diff --git a/src/agents/ollama-stream.ts b/src/agents/ollama-stream.ts index f332ad1fd83..c06d0193279 100644 --- a/src/agents/ollama-stream.ts +++ b/src/agents/ollama-stream.ts @@ -216,6 +216,19 @@ interface OllamaChatResponse { eval_duration?: number; } +// ── Helpers ────────────────────────────────────────────────────────────────── + +function parseToolArgs(raw: unknown): Record { + if (typeof raw === "string") { + try { + return JSON.parse(raw) as Record; + } catch { + return {}; + } + } + return (raw as Record) ?? {}; +} + // ── Message conversion ────────────────────────────────────────────────────── type InputContentPart = @@ -254,9 +267,9 @@ function extractToolCalls(content: unknown): OllamaToolCall[] { const result: OllamaToolCall[] = []; for (const part of parts) { if (part.type === "toolCall") { - result.push({ function: { name: part.name, arguments: part.arguments } }); + result.push({ function: { name: part.name, arguments: parseToolArgs(part.arguments) } }); } else if (part.type === "tool_use") { - result.push({ function: { name: part.name, arguments: part.input } }); + result.push({ function: { name: part.name, arguments: part.input ?? {} } }); } } return result; @@ -355,7 +368,7 @@ export function buildAssistantMessage( type: "toolCall", id: `ollama_call_${randomUUID()}`, name: tc.function.name, - arguments: tc.function.arguments, + arguments: parseToolArgs(tc.function.arguments), }); } }