parse method
Parses one raw generated turn into prose plus any tool calls.
Throws FormatException when the python_tag body is not valid JSON so
the decoder can fall back to raw text.
Implementation
ParsedTurn parse(String generated) {
final at = generated.indexOf(pythonTag);
if (at < 0) {
return ParsedTurn(text: generated.trim(), calls: const []);
}
final text = generated.substring(0, at).trim();
var body = generated.substring(at + pythonTag.length);
final endAt = body.indexOf(eom);
if (endAt >= 0) body = body.substring(0, endAt);
final decoded = jsonDecode(body.trim());
if (decoded is! Map) {
throw FormatException('Tool call is not a JSON object', body);
}
final args = (decoded['parameters'] ?? decoded['arguments']) as Map?;
return ParsedTurn(
text: text,
calls: <FunctionCallContent>[
FunctionCallContent(
callId: 'call_0',
name: decoded['name'] as String? ?? '',
arguments: args?.cast<String, Object?>() ?? const <String, Object?>{},
),
],
);
}