From 0fd75521e2e8d2d2b507c34b2166a5b7be565e79 Mon Sep 17 00:00:00 2001 From: edenbuilds <279970382+edenbuilds@users.noreply.github.com> Date: Fri, 7 Aug 2026 04:52:44 +0530 Subject: [PATCH 1/2] fix(openai-adapters): suppress org/project headers under Turkish locales MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OpenAI SDK injects OpenAI-Organization from OPENAI_ORG_ID; under tr-TR that name lowercases to an invalid token (openaı-organization) and crashes requests. --- packages/openai-adapters/src/apis/Azure.ts | 7 ++++ packages/openai-adapters/src/apis/OpenAI.ts | 9 +++++ .../openai-adapters/src/test/main.test.ts | 37 +++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/packages/openai-adapters/src/apis/Azure.ts b/packages/openai-adapters/src/apis/Azure.ts index 4d161c8438a..90adf82aa9f 100644 --- a/packages/openai-adapters/src/apis/Azure.ts +++ b/packages/openai-adapters/src/apis/Azure.ts @@ -23,6 +23,13 @@ export class AzureApi extends OpenAIApi { baseURL, fetch: customFetch(azureConfig.requestOptions), defaultQuery, + // Same Turkish-locale header guard as OpenAIApi — see #12568. + organization: null, + project: null, + defaultHeaders: { + "openai-organization": null, + "openai-project": null, + }, }); } diff --git a/packages/openai-adapters/src/apis/OpenAI.ts b/packages/openai-adapters/src/apis/OpenAI.ts index d0f8d30ca3a..b2d53979b98 100644 --- a/packages/openai-adapters/src/apis/OpenAI.ts +++ b/packages/openai-adapters/src/apis/OpenAI.ts @@ -46,6 +46,15 @@ export class OpenAIApi implements BaseLlmApi { baseURL: this.apiBase, fetch: customFetch(config.requestOptions), timeout: config?.requestOptions?.timeout || undefined, + // Avoid injecting OpenAI-Organization / OpenAI-Project from env. Under + // Turkish locales those PascalCase names lowercase to invalid tokens + // (openaı-organization) and crash fetch. See #12568. + organization: null, + project: null, + defaultHeaders: { + "openai-organization": null, + "openai-project": null, + }, }); } modifyChatBody(body: T): T { diff --git a/packages/openai-adapters/src/test/main.test.ts b/packages/openai-adapters/src/test/main.test.ts index 8a10c8b727f..03358a9873d 100644 --- a/packages/openai-adapters/src/test/main.test.ts +++ b/packages/openai-adapters/src/test/main.test.ts @@ -235,6 +235,43 @@ describe("Configuration", () => { ); }); + it("should suppress OpenAI org/project headers that break under Turkish locales", () => { + // Demonstrates the locale bug: mixed-case OpenAI-* headers lowercase to + // invalid HTTP tokens under tr-TR (dotless ı). + expect("OpenAI-Organization".toLocaleLowerCase("tr-TR")).toBe( + "openaı-organization", + ); + expect(() => { + new Headers({ "openaı-organization": "org" }); + }).toThrow(); + + const prevOrg = process.env.OPENAI_ORG_ID; + const prevProject = process.env.OPENAI_PROJECT_ID; + process.env.OPENAI_ORG_ID = "org_should_not_leak"; + process.env.OPENAI_PROJECT_ID = "proj_should_not_leak"; + try { + const openai = constructLlmApi({ + provider: "openai", + apiKey: "sk-xxx", + apiBase: "https://openrouter.ai/api/v1/", + }) as OpenAIApi; + + // Client must not pick up org/project from the environment — that is what + // injects the PascalCase headers the SDK then lowercases unsafely. + expect(openai.openai.organization).toBeNull(); + expect(openai.openai.project).toBeNull(); + expect((openai.openai as any)._options.defaultHeaders).toMatchObject({ + "openai-organization": null, + "openai-project": null, + }); + } finally { + if (prevOrg === undefined) delete process.env.OPENAI_ORG_ID; + else process.env.OPENAI_ORG_ID = prevOrg; + if (prevProject === undefined) delete process.env.OPENAI_PROJECT_ID; + else process.env.OPENAI_PROJECT_ID = prevProject; + } + }); + it("should configure Inception OpenAI client with correct apiBase and apiKey", () => { const inception = constructLlmApi({ provider: "inception", From 3dcb17e7d300734de0eb518a045525bbed52b2a7 Mon Sep 17 00:00:00 2001 From: edenbuilds <279970382+edenbuilds@users.noreply.github.com> Date: Fri, 7 Aug 2026 06:05:07 +0530 Subject: [PATCH 2/2] chore: retrigger CI after unrelated PromptFile/jetbrains flakes