getResponse method
Implementation
@override
Future<String> getResponse() async {
_assertNotClosed();
final text = _queryBuffer.toString();
_queryBuffer.clear();
final audio = _pendingAudio;
final image = _pendingImage;
_pendingAudio = null;
_pendingImage = null;
// For Gemma 4, walk raw SDK JSON so chat.dart can read `tool_calls` via
// [LiteRtLmFfiClient.extractToolCalls]. Other models keep the existing
// text-only fast path (raw JSON cache stays null).
if (modelType == ModelType.gemma4) {
final rawBuffer = StringBuffer();
final textBuffer = StringBuffer();
await for (final rawChunk in ffiClient.chatRaw(
text,
imageBytes: image,
audioBytes: audio,
enableThinking: enableThinking,
)) {
rawBuffer.write(rawChunk);
textBuffer.write(LiteRtLmFfiClient.extractTextFromResponse(rawChunk));
}
_lastRawResponse = rawBuffer.toString();
return textBuffer.toString();
}
_lastRawResponse = null;
final buffer = StringBuffer();
await for (final chunk in ffiClient.chat(
text,
imageBytes: image,
audioBytes: audio,
enableThinking: enableThinking,
)) {
buffer.write(chunk);
}
return buffer.toString();
}