parse method

ParsedTurn parse(
  1. String generated
)

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?>{},
      ),
    ],
  );
}