




























@@ -5961,6 +5961,150 @@ describe("openai transport stream", () => {
59615961expect(params).not.toHaveProperty("reasoning_effort");
59625962});
596359635964+it.each([
5965+["implicit default", ""],
5966+["default", "https://api.openai.com/v1"],
5967+])(
5968+"omits reasoning_effort for OpenAI %s gpt-5.5 Chat Completions tool payloads",
5969+(_label, baseUrl) => {
5970+const params = buildOpenAICompletionsParams(
5971+{
5972+id: "gpt-5.5",
5973+name: "GPT-5.5",
5974+api: "openai-completions",
5975+provider: "openai",
5976+ baseUrl,
5977+reasoning: true,
5978+input: ["text"],
5979+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
5980+contextWindow: 1000000,
5981+maxTokens: 128000,
5982+} satisfies Model<"openai-completions">,
5983+{
5984+systemPrompt: "system",
5985+messages: [],
5986+tools: [
5987+{
5988+name: "lookup_weather",
5989+description: "Get forecast",
5990+parameters: { type: "object", properties: {}, additionalProperties: false },
5991+},
5992+],
5993+} as never,
5994+{
5995+reasoning: "medium",
5996+} as never,
5997+) as { reasoning_effort?: unknown; tools?: unknown };
5998+5999+expect(params.tools).toHaveLength(1);
6000+expect(params).not.toHaveProperty("reasoning_effort");
6001+},
6002+);
6003+6004+it.each([
6005+["Azure OpenAI", "https://example.openai.azure.com/openai/v1"],
6006+["Foundry", "https://example.services.ai.azure.com/openai/v1"],
6007+["Cognitive Services", "https://example.cognitiveservices.azure.com/openai/v1"],
6008+])(
6009+"omits reasoning_effort for %s gpt-5.5 deployment aliases with tool payloads",
6010+(_label, baseUrl) => {
6011+const params = buildOpenAICompletionsParams(
6012+{
6013+id: "prod-spud",
6014+name: "GPT-5.5 (Azure)",
6015+api: "openai-completions",
6016+provider: "azure-openai",
6017+ baseUrl,
6018+reasoning: true,
6019+input: ["text"],
6020+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
6021+contextWindow: 1000000,
6022+maxTokens: 128000,
6023+} satisfies Model<"openai-completions">,
6024+{
6025+systemPrompt: "system",
6026+messages: [],
6027+tools: [
6028+{
6029+name: "lookup_weather",
6030+description: "Get forecast",
6031+parameters: { type: "object", properties: {}, additionalProperties: false },
6032+},
6033+],
6034+} as never,
6035+{
6036+reasoning: "medium",
6037+} as never,
6038+) as { reasoning_effort?: unknown; tools?: unknown };
6039+6040+expect(params.tools).toHaveLength(1);
6041+expect(params).not.toHaveProperty("reasoning_effort");
6042+},
6043+);
6044+6045+it("keeps reasoning_effort for custom gpt-5.5 Chat Completions tool payloads", () => {
6046+const params = buildOpenAICompletionsParams(
6047+{
6048+id: "gpt-5.5",
6049+name: "GPT-5.5",
6050+api: "openai-completions",
6051+provider: "custom-openai",
6052+baseUrl: "https://models.example.com/v1",
6053+compat: { supportsReasoningEffort: true },
6054+reasoning: true,
6055+input: ["text"],
6056+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
6057+contextWindow: 1000000,
6058+maxTokens: 128000,
6059+} satisfies Model<"openai-completions">,
6060+{
6061+systemPrompt: "system",
6062+messages: [],
6063+tools: [
6064+{
6065+name: "lookup_weather",
6066+description: "Get forecast",
6067+parameters: { type: "object", properties: {}, additionalProperties: false },
6068+},
6069+],
6070+} as never,
6071+{
6072+reasoning: "medium",
6073+} as never,
6074+) as { reasoning_effort?: unknown; tools?: unknown };
6075+6076+expect(params.tools).toHaveLength(1);
6077+expect(params.reasoning_effort).toBe("medium");
6078+});
6079+6080+it("keeps reasoning_effort for gpt-5.5 Chat Completions payloads without tools", () => {
6081+const params = buildOpenAICompletionsParams(
6082+{
6083+id: "gpt-5.5",
6084+name: "GPT-5.5",
6085+api: "openai-completions",
6086+provider: "openai",
6087+baseUrl: "https://api.openai.com/v1",
6088+reasoning: true,
6089+input: ["text"],
6090+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
6091+contextWindow: 1000000,
6092+maxTokens: 128000,
6093+} satisfies Model<"openai-completions">,
6094+{
6095+systemPrompt: "system",
6096+messages: [],
6097+tools: [],
6098+} as never,
6099+{
6100+reasoning: "medium",
6101+} as never,
6102+) as { reasoning_effort?: unknown; tools?: unknown };
6103+6104+expect(params.tools).toHaveLength(0);
6105+expect(params.reasoning_effort).toBe("medium");
6106+});
6107+59646108it("keeps reasoning_effort for gpt-5.4-mini Chat Completions payloads without tools", () => {
59656109const params = buildOpenAICompletionsParams(
59666110{
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。