













@@ -4953,6 +4953,89 @@ describe("openai transport stream", () => {
49534953});
49544954});
495549554956+it("omits tools from completions payload when model compat sets supportsTools to false", () => {
4957+const params = buildOpenAICompletionsParams(
4958+{
4959+id: "chat-only-model",
4960+name: "Chat Only Model",
4961+api: "openai-completions",
4962+provider: "venice",
4963+baseUrl: "https://api.venice.ai/api/v1",
4964+reasoning: false,
4965+input: ["text"],
4966+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
4967+contextWindow: 128000,
4968+maxTokens: 4096,
4969+compat: {
4970+supportsTools: false,
4971+} as Record<string, unknown>,
4972+} satisfies Model<"openai-completions">,
4973+{
4974+systemPrompt: "system",
4975+messages: [],
4976+tools: [
4977+{
4978+name: "noop",
4979+description: "noop tool",
4980+parameters: { type: "object", properties: {} },
4981+},
4982+],
4983+} as never,
4984+undefined,
4985+) as { tools?: unknown; tool_choice?: unknown };
4986+4987+expect(params).not.toHaveProperty("tools");
4988+expect(params).not.toHaveProperty("tool_choice");
4989+});
4990+4991+it("omits tool-history tools:[] fallback when model compat sets supportsTools to false", () => {
4992+const params = buildOpenAICompletionsParams(
4993+{
4994+id: "chat-only-model",
4995+name: "Chat Only Model",
4996+api: "openai-completions",
4997+provider: "venice",
4998+baseUrl: "https://api.venice.ai/api/v1",
4999+reasoning: false,
5000+input: ["text"],
5001+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
5002+contextWindow: 128000,
5003+maxTokens: 4096,
5004+compat: {
5005+supportsTools: false,
5006+} as Record<string, unknown>,
5007+} satisfies Model<"openai-completions">,
5008+{
5009+systemPrompt: "system",
5010+messages: [
5011+{
5012+role: "assistant",
5013+content: [
5014+{
5015+type: "toolCall",
5016+id: "call_abc",
5017+name: "noop",
5018+arguments: {},
5019+},
5020+],
5021+timestamp: Date.now(),
5022+},
5023+{
5024+role: "toolResult",
5025+toolCallId: "call_abc",
5026+toolName: "noop",
5027+content: [{ type: "text", text: "ok" }],
5028+isError: false,
5029+timestamp: Date.now(),
5030+},
5031+],
5032+} as never,
5033+undefined,
5034+) as { tools?: unknown };
5035+5036+expect(params).not.toHaveProperty("tools");
5037+});
5038+49565039describe("Gemini thought_signature round-trip on OpenAI-compatible completions", () => {
49575040const geminiModel = {
49585041id: "gemini-3-flash-preview",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。