60 lines
1.8 KiB
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
|
|
}
|
|
}
|
|
}
|