Skip to content
8 changes: 6 additions & 2 deletions modules/tool_parsing.py
Original file line number Diff line number Diff line change
Expand Up @@ -463,10 +463,14 @@ def _parse_gemma4_tool_calls(answer: str, tool_names: list[str]):

# Convert to JSON: split on <|"|> tokens so that key quoting
# only applies outside string values (even-indexed parts),
# escape newlines and double quotes in arguments (odd-indexed parts),
# then rejoin with real quotes.
parts = content.split('<|"|>')
for idx in range(0, len(parts), 2):
parts[idx] = re.sub(r'(^|[{,\[])\s*(\w+)\s*:', r'\1"\2":', parts[idx])
for idx in range(len(parts)):
if idx % 2 == 0:
parts[idx] = re.sub(r'(^|[{,\[])\s*(\w+)\s*:', r'\1"\2":', parts[idx])
else:
parts[idx] = parts[idx].replace("\n", "\\n").replace('"', '\\"').replace("\\\\", "\\")
json_str = '"'.join(parts)

try:
Expand Down