From 45c0e44143b71be8c7b3c02c9feb31bc0aa515cc Mon Sep 17 00:00:00 2001 From: Tarun Suresh Date: Sun, 8 Mar 2026 06:13:55 +0000 Subject: [PATCH] fix: parse tool call arguments as dicts for Ollama API compatibility Ollama's chat API expects tool_call arguments as JSON objects (dicts), but messages_to_dicts serializes them as JSON strings. This caused 400 errors on multi-turn tool-calling conversations. The fix parses string arguments back to dicts before sending to Ollama. Co-Authored-By: Claude Opus 4.6 --- src/openjarvis/engine/ollama.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/openjarvis/engine/ollama.py b/src/openjarvis/engine/ollama.py index b3ee0113..19cc4795 100644 --- a/src/openjarvis/engine/ollama.py +++ b/src/openjarvis/engine/ollama.py @@ -41,9 +41,20 @@ class OllamaEngine(InferenceEngine): max_tokens: int = 1024, **kwargs: Any, ) -> Dict[str, Any]: + msg_dicts = messages_to_dicts(messages) + # Ollama expects tool_call arguments as dicts, not JSON strings + for md in msg_dicts: + for tc in md.get("tool_calls", []): + fn = tc.get("function", {}) + args = fn.get("arguments") + if isinstance(args, str): + try: + fn["arguments"] = json.loads(args) + except (json.JSONDecodeError, TypeError): + pass payload: Dict[str, Any] = { "model": model, - "messages": messages_to_dicts(messages), + "messages": msg_dicts, "stream": False, "options": { "temperature": temperature,