


























@@ -291,6 +291,7 @@ import { createMinimaxFastModeWrapper } from "./pi-embedded-runner/minimax-strea
291291import {
292292createCodexNativeWebSearchWrapper,
293293createOpenAIAttributionHeadersWrapper,
294+createOpenAICompletionsStrictMessageKeysWrapper,
294295createOpenAIDefaultTransportWrapper,
295296createOpenAIFastModeWrapper,
296297createOpenAIReasoningCompatibilityWrapper,
@@ -437,6 +438,7 @@ function createTestOpenAIProviderWrapper(
437438agentDir: params.context.agentDir,
438439});
439440streamFn = createOpenAIStringContentWrapper(streamFn);
441+streamFn = createOpenAICompletionsStrictMessageKeysWrapper(streamFn);
440442return createOpenAIResponsesContextManagementWrapper(
441443createOpenAIReasoningCompatibilityWrapper(
442444createOpenAIThinkingLevelWrapper(streamFn, params.context.thinkingLevel),
@@ -1125,6 +1127,55 @@ describe("applyExtraParamsToAgent", () => {
11251127]);
11261128});
112711291130+it("strips extra OpenAI completions message keys for strict-key compat models", () => {
1131+const payload = runResponsesPayloadMutationCase({
1132+applyProvider: "infomaniak",
1133+applyModelId: "mistral3",
1134+model: {
1135+api: "openai-completions",
1136+provider: "infomaniak",
1137+id: "mistral3",
1138+name: "mistral3",
1139+baseUrl: "https://api.infomaniak.com/1/ai/example/openai",
1140+reasoning: false,
1141+input: ["text"],
1142+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
1143+contextWindow: 32768,
1144+maxTokens: 4096,
1145+compat: {
1146+strictMessageKeys: true,
1147+} as Record<string, unknown>,
1148+} as unknown as Model<"openai-completions">,
1149+payload: {
1150+messages: [
1151+{
1152+role: "assistant",
1153+content: "calling tool",
1154+name: "agent",
1155+tool_calls: [{ id: "call_1", type: "function", function: { name: "noop" } }],
1156+cache_control: { type: "ephemeral" },
1157+},
1158+{
1159+role: "tool",
1160+content: "tool result",
1161+tool_call_id: "call_1",
1162+},
1163+],
1164+},
1165+});
1166+1167+expect(payload.messages).toEqual([
1168+{
1169+role: "assistant",
1170+content: "calling tool",
1171+},
1172+{
1173+role: "tool",
1174+content: "tool result",
1175+},
1176+]);
1177+});
1178+11281179it("injects parallel_tool_calls for openai-responses payloads when configured", () => {
11291180const payload = runParallelToolCallsPayloadMutationCase({
11301181applyProvider: "openai",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。