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;
}
}