




















@@ -995,6 +995,31 @@ describe("openai transport stream", () => {
995995expect(params.input?.[0]).toMatchObject({ role: "developer" });
996996});
997997998+it("uses model maxTokens for Responses params when runtime maxTokens is omitted", () => {
999+const params = buildOpenAIResponsesParams(
1000+{
1001+id: "gpt-5.4",
1002+name: "GPT-5.4",
1003+api: "openai-responses",
1004+provider: "openai",
1005+baseUrl: "https://api.openai.com/v1",
1006+reasoning: true,
1007+input: ["text"],
1008+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
1009+contextWindow: 200000,
1010+maxTokens: 65_536,
1011+} satisfies Model<"openai-responses">,
1012+{
1013+systemPrompt: "system",
1014+messages: [],
1015+tools: [],
1016+} as never,
1017+undefined,
1018+) as { max_output_tokens?: unknown };
1019+1020+expect(params.max_output_tokens).toBe(65_536);
1021+});
1022+9981023it("uses top-level instructions for Codex responses and strips unsupported ChatGPT params", () => {
9991024const params = buildOpenAIResponsesParams(
10001025{
@@ -2373,6 +2398,57 @@ describe("openai transport stream", () => {
23732398expect(params).not.toHaveProperty("max_completion_tokens");
23742399});
237524002401+it("uses model maxTokens for OpenAI completions params when runtime maxTokens is omitted", () => {
2402+const params = buildOpenAICompletionsParams(
2403+{
2404+id: "gpt-5.4",
2405+name: "GPT-5.4",
2406+api: "openai-completions",
2407+provider: "openai",
2408+baseUrl: "https://api.openai.com/v1",
2409+reasoning: true,
2410+input: ["text"],
2411+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
2412+contextWindow: 200000,
2413+maxTokens: 65_536,
2414+} satisfies Model<"openai-completions">,
2415+{
2416+systemPrompt: "system",
2417+messages: [],
2418+tools: [],
2419+} as never,
2420+undefined,
2421+);
2422+2423+expect(params.max_completion_tokens).toBe(65_536);
2424+expect(params).not.toHaveProperty("max_tokens");
2425+});
2426+2427+it("uses model maxTokens with max_tokens completions compat when runtime maxTokens is omitted", () => {
2428+const params = buildOpenAICompletionsParams(
2429+{
2430+id: "zai-org/GLM-4.7-TEE",
2431+name: "GLM 4.7 TEE",
2432+api: "openai-completions",
2433+provider: "chutes",
2434+reasoning: true,
2435+input: ["text"],
2436+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
2437+contextWindow: 200000,
2438+maxTokens: 65_536,
2439+} as never,
2440+{
2441+systemPrompt: "system",
2442+messages: [],
2443+tools: [],
2444+} as never,
2445+undefined,
2446+);
2447+2448+expect(params.max_tokens).toBe(65_536);
2449+expect(params).not.toHaveProperty("max_completion_tokens");
2450+});
2451+23762452it("omits strict tool shaping for Z.ai default-route completions providers", () => {
23772453const params = buildOpenAICompletionsParams(
23782454{
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。