From 76e4b8277fb4dbbb8a4a893f24e2bdc37822f020 Mon Sep 17 00:00:00 2001 From: GeekCheyun Date: Sun, 8 Mar 2026 21:10:59 +0800 Subject: [PATCH] fix(issue-39839): address tool-call extra params parsing for kimi anthropic-messages --- .../pi-embedded-runner-extraparams.test.ts | 34 +++++++++++++++++++ src/agents/pi-embedded-runner/extra-params.ts | 9 +++++ 2 files changed, 43 insertions(+) diff --git a/src/agents/pi-embedded-runner-extraparams.test.ts b/src/agents/pi-embedded-runner-extraparams.test.ts index 6cee98487a8..2da38cbc8b3 100644 --- a/src/agents/pi-embedded-runner-extraparams.test.ts +++ b/src/agents/pi-embedded-runner-extraparams.test.ts @@ -803,6 +803,40 @@ describe("applyExtraParamsToAgent", () => { }); }); + it("normalizes anthropic tool_choice modes for kimi-coding endpoints", () => { + const payloads: Record[] = []; + const baseStreamFn: StreamFn = (_model, _context, options) => { + const payload: Record = { + tools: [ + { + name: "read", + description: "Read file", + input_schema: { type: "object", properties: {} }, + }, + ], + tool_choice: { type: "auto" }, + }; + options?.onPayload?.(payload); + payloads.push(payload); + return {} as ReturnType; + }; + const agent = { streamFn: baseStreamFn }; + + applyExtraParamsToAgent(agent, undefined, "kimi-coding", "k2p5", undefined, "low"); + + const model = { + api: "anthropic-messages", + provider: "kimi-coding", + id: "k2p5", + baseUrl: "https://api.kimi.com/coding/", + } as Model<"anthropic-messages">; + const context: Context = { messages: [] }; + void agent.streamFn?.(model, context, {}); + + expect(payloads).toHaveLength(1); + expect(payloads[0]?.tool_choice).toBe("auto"); + }); + it("does not rewrite anthropic tool schema for non-kimi endpoints", () => { const payloads: Record[] = []; const baseStreamFn: StreamFn = (_model, _context, options) => { diff --git a/src/agents/pi-embedded-runner/extra-params.ts b/src/agents/pi-embedded-runner/extra-params.ts index 8fca03683f1..98cd12ed975 100644 --- a/src/agents/pi-embedded-runner/extra-params.ts +++ b/src/agents/pi-embedded-runner/extra-params.ts @@ -858,6 +858,15 @@ function normalizeKimiCodingToolChoice(toolChoice: unknown): unknown { } const choice = toolChoice as Record; + if (choice.type === "auto") { + return "auto"; + } + if (choice.type === "none") { + return "none"; + } + if (choice.type === "required") { + return "required"; + } if (choice.type === "any") { return "required"; }