MIF_E31222656/lib/services/gemini_service.dart

60 lines
1.8 KiB
Dart

import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
class GeminiService {
static const String apiKey =
'AIzaSyCGpxG4Jn_eXvFEfANnCLPTpVimEzQZcaM'; // Gunakan API key yang sama dengan fitur deteksi
static const String baseUrl =
'https://generativelanguage.googleapis.com/v1beta/models';
static const String model =
'gemini-1.5-flash'; // Model yang lebih ringan dan cepat
/// Metode untuk bertanya ke Gemini API
static Future<String> askGemini(String prompt) async {
try {
final requestBody = {
'contents': [
{
'parts': [
{'text': prompt},
],
},
],
'generationConfig': {
'temperature': 0.1, // Lebih deterministik untuk jawaban ya/tidak
'topK': 1,
'topP': 1,
'maxOutputTokens': 50, // Cukup untuk jawaban pendek
},
};
final response = await http.post(
Uri.parse('$baseUrl/$model:generateContent?key=$apiKey'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode(requestBody),
);
if (response.statusCode != 200) {
debugPrint(
'Gemini API error: ${response.statusCode} - ${response.body}',
);
return 'ya'; // Fallback ke positif jika terjadi error
}
final responseData = jsonDecode(response.body);
if (responseData['candidates'] == null ||
responseData['candidates'].isEmpty) {
return 'ya'; // Fallback ke positif jika tidak ada respons
}
final generatedText =
responseData['candidates'][0]['content']['parts'][0]['text'];
return generatedText.trim().toLowerCase();
} catch (e) {
debugPrint('Error in Gemini service: $e');
return 'ya'; // Fallback ke positif jika terjadi exception
}
}
}