getResponse method
Implementation
@override
Future<String> getResponse() async {
if (kDebugMode) {
gemmaLog('🚀 getResponse: Starting response generation');
}
try {
final promptArray = _createPromptArray();
if (kDebugMode) {
gemmaLog(
'🎯 getResponse: Prompt array type: ${promptArray.runtimeType}');
gemmaLog('🎯 getResponse: Is JSString? ${promptArray is JSString}');
}
String response;
// Use appropriate method based on prompt type
if (promptArray is JSString) {
if (kDebugMode) {
gemmaLog(
'📝 getResponse: Using generateResponse for text-only prompt');
}
response =
(await llmInference.generateResponse(promptArray, null).toDart)
.toDart;
} else {
if (kDebugMode) {
gemmaLog(
'🖼️ getResponse: Using generateResponseMultimodal for multimodal prompt');
}
response = (await llmInference
.generateResponseMultimodal(promptArray, null)
.toDart)
.toDart;
}
if (kDebugMode) {
gemmaLog(
'✅ getResponse: Successfully generated response of length ${response.length}');
gemmaLog(
'✅ getResponse: Response preview: ${response.substring(0, math.min(100, response.length))}...',
level: GemmaLogLevel.verbose);
}
// Don't add response back to promptParts - that's handled by InferenceChat
return response;
} catch (e, stackTrace) {
if (kDebugMode) {
gemmaLog('❌ getResponse: Exception caught: $e');
gemmaLog('❌ getResponse: Stack trace: $stackTrace');
}
_promptParts.clear();
rethrow;
}
}