From 11f6265c863db0a762d630ea31c8a2dccc778896 Mon Sep 17 00:00:00 2001 From: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Date: Fri, 20 Mar 2026 08:31:31 -0700 Subject: [PATCH] fix(providers): strip store param for non-Responses APIs when supportsStore=false shouldStripResponsesStore only stripped store for openai-responses API models, but upstream pi-ai sends store:false for all API types. Providers like Cerebras that use openai-completions reject the unknown store parameter with HTTP 400. Remove the OPENAI_RESPONSES_APIS guard so store is stripped for any model that declares compat.supportsStore=false regardless of API type. Fixes #51058 --- .../pi-embedded-runner-extraparams.test.ts | 21 +++++++++++++++++++ .../openai-stream-wrappers.ts | 7 +++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/agents/pi-embedded-runner-extraparams.test.ts b/src/agents/pi-embedded-runner-extraparams.test.ts index b176de6fab5..bbf6eecd382 100644 --- a/src/agents/pi-embedded-runner-extraparams.test.ts +++ b/src/agents/pi-embedded-runner-extraparams.test.ts @@ -2143,6 +2143,27 @@ describe("applyExtraParamsToAgent", () => { expect(payload.context_management).toEqual([{ type: "compaction", compact_threshold: 12_345 }]); }); + it("strips store from payload for openai-completions providers with supportsStore=false (#51058)", () => { + const payload = runResponsesPayloadMutationCase({ + applyProvider: "cerebras", + applyModelId: "llama3.1-8b", + model: { + api: "openai-completions", + provider: "cerebras", + id: "llama3.1-8b", + name: "llama3.1-8b", + baseUrl: "https://api.cerebras.ai/v1", + reasoning: false, + input: ["text"], + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + contextWindow: 128_000, + maxTokens: 8_192, + compat: { supportsStore: false }, + } as unknown as Model<"openai-completions">, + }); + expect(payload).not.toHaveProperty("store"); + }); + it("auto-injects OpenAI Responses context_management compaction for direct OpenAI models", () => { const payload = runResponsesPayloadMutationCase({ applyProvider: "openai", diff --git a/src/agents/pi-embedded-runner/openai-stream-wrappers.ts b/src/agents/pi-embedded-runner/openai-stream-wrappers.ts index a4433f65b10..cae147f7c0a 100644 --- a/src/agents/pi-embedded-runner/openai-stream-wrappers.ts +++ b/src/agents/pi-embedded-runner/openai-stream-wrappers.ts @@ -148,10 +148,9 @@ function shouldStripResponsesStore( if (forceStore) { return false; } - if (typeof model.api !== "string") { - return false; - } - return OPENAI_RESPONSES_APIS.has(model.api) && model.compat?.supportsStore === false; + // Strip store for ANY API type when the model declares supportsStore=false. + // Providers like Cerebras reject unknown parameters including `store` (#51058). + return model.compat?.supportsStore === false; } function shouldStripResponsesPromptCache(model: { api?: unknown; baseUrl?: unknown }): boolean {