Merge 31da281d9b6784e2618d246caa6ef4d3b2419f4f into 43513cd1df63af0704dfb351ee7864607f955dcc
This commit is contained in:
commit
0f7afc41bf
@ -216,6 +216,19 @@ interface OllamaChatResponse {
|
||||
eval_duration?: number;
|
||||
}
|
||||
|
||||
// ── Helpers ──────────────────────────────────────────────────────────────────
|
||||
|
||||
function parseToolArgs(raw: unknown): Record<string, unknown> {
|
||||
if (typeof raw === "string") {
|
||||
try {
|
||||
return JSON.parse(raw) as Record<string, unknown>;
|
||||
} catch {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
return (raw as Record<string, unknown>) ?? {};
|
||||
}
|
||||
|
||||
// ── 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),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user