From e0be1c0e13e389a3683f317ebf3ff38a7f7bbef5 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 15:04:54 -0500 Subject: [PATCH] fix(ai): match AI SDK Azure URL handling (#43506) Co-authored-by: rekram1-node --- packages/ai/src/providers/azure.ts | 3 +-- packages/ai/test/provider/openai-chat.test.ts | 23 ------------------- 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/packages/ai/src/providers/azure.ts b/packages/ai/src/providers/azure.ts index 75e89e506b..94d5edb4c8 100644 --- a/packages/ai/src/providers/azure.ts +++ b/packages/ai/src/providers/azure.ts @@ -90,8 +90,7 @@ function endpoint(input: Config, modelID: string | ModelID) { if (input.baseURL !== undefined && !new URL(input.baseURL).hostname.endsWith(".openai.azure.com")) { return { baseURL, query: input.queryParams } } - // Azure's v1 API serves from /openai/v1; callers may pass the base URL with or without the version segment. - return { baseURL: baseURL.endsWith("/v1") ? baseURL : `${baseURL}/v1`, query } + return { baseURL: `${baseURL}/v1`, query } } export const configure = (input: Config) => { diff --git a/packages/ai/test/provider/openai-chat.test.ts b/packages/ai/test/provider/openai-chat.test.ts index ed557fe2b7..e7a8532e2e 100644 --- a/packages/ai/test/provider/openai-chat.test.ts +++ b/packages/ai/test/provider/openai-chat.test.ts @@ -277,29 +277,6 @@ describe("OpenAI Chat route", () => { ), ) - it.effect("does not duplicate /v1 for already-versioned Azure Chat base URLs", () => - LLMClient.generate( - LLMRequest.update(request, { - model: Azure.configure({ - baseURL: "https://opencode-test.openai.azure.com/openai/v1/", - apiKey: "azure-key", - }).chat("gpt-4o-mini"), - }), - ).pipe( - Effect.provide( - dynamicResponse((input) => - Effect.gen(function* () { - const web = yield* HttpClientRequest.toWeb(input.request).pipe(Effect.orDie) - expect(web.url).toBe("https://opencode-test.openai.azure.com/openai/v1/chat/completions?api-version=v1") - return input.respond(sseEvents(deltaChunk({}, "stop")), { - headers: { "content-type": "text/event-stream" }, - }) - }), - ), - ), - ), - ) - it.effect("applies serializable HTTP overlays after payload lowering", () => LLMClient.generate( LLMRequest.update(request, {