fix(agents): normalize SiliconFlow Pro thinking=off payload (#25435)

Land PR #25435 from @Zjianru.
Changelog: add 2026.2.24 fix entry with contributor credit.

Co-authored-by: codez <codezhujr@gmail.com>
This commit is contained in:
Peter Steinberger
2026-02-25 01:11:20 +00:00
parent 8470dff619
commit bd213cf2ad
3 changed files with 106 additions and 0 deletions

View File

@@ -310,6 +310,68 @@ describe("applyExtraParamsToAgent", () => {
expect(payloads[0]).toEqual({ reasoning: { max_tokens: 256 } });
});
it("normalizes thinking=off to null for SiliconFlow Pro models", () => {
const payloads: Record<string, unknown>[] = [];
const baseStreamFn: StreamFn = (_model, _context, options) => {
const payload: Record<string, unknown> = { thinking: "off" };
options?.onPayload?.(payload);
payloads.push(payload);
return {} as ReturnType<StreamFn>;
};
const agent = { streamFn: baseStreamFn };
applyExtraParamsToAgent(
agent,
undefined,
"siliconflow",
"Pro/MiniMaxAI/MiniMax-M2.1",
undefined,
"off",
);
const model = {
api: "openai-completions",
provider: "siliconflow",
id: "Pro/MiniMaxAI/MiniMax-M2.1",
} as Model<"openai-completions">;
const context: Context = { messages: [] };
void agent.streamFn?.(model, context, {});
expect(payloads).toHaveLength(1);
expect(payloads[0]?.thinking).toBeNull();
});
it("keeps thinking=off unchanged for non-Pro SiliconFlow model IDs", () => {
const payloads: Record<string, unknown>[] = [];
const baseStreamFn: StreamFn = (_model, _context, options) => {
const payload: Record<string, unknown> = { thinking: "off" };
options?.onPayload?.(payload);
payloads.push(payload);
return {} as ReturnType<StreamFn>;
};
const agent = { streamFn: baseStreamFn };
applyExtraParamsToAgent(
agent,
undefined,
"siliconflow",
"deepseek-ai/DeepSeek-V3.2",
undefined,
"off",
);
const model = {
api: "openai-completions",
provider: "siliconflow",
id: "deepseek-ai/DeepSeek-V3.2",
} as Model<"openai-completions">;
const context: Context = { messages: [] };
void agent.streamFn?.(model, context, {});
expect(payloads).toHaveLength(1);
expect(payloads[0]?.thinking).toBe("off");
});
it("adds OpenRouter attribution headers to stream options", () => {
const { calls, agent } = createOptionsCaptureAgent();