diff options
| author | Christopher Tso <[email protected]> | 2026-01-19 16:30:28 +1100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-01-18 23:30:28 -0600 |
| commit | fc6c9cbbd262daa0f98338ed3c79270fbfa086ad (patch) | |
| tree | 5c7119e7600b23a1f74c5325b987245e5e157dfd | |
| parent | 6b481b5fb07134cac6f3df4fa2195aa56476295c (diff) | |
| download | opencode-fc6c9cbbd262daa0f98338ed3c79270fbfa086ad.tar.gz opencode-fc6c9cbbd262daa0f98338ed3c79270fbfa086ad.zip | |
fix(github-copilot): auto-route GPT-5+ models to Responses API (#5877)
Co-authored-by: Claude <[email protected]>
| -rw-r--r-- | packages/opencode/src/provider/provider.ts | 22 | ||||
| -rw-r--r-- | packages/opencode/src/provider/transform.ts | 6 |
2 files changed, 19 insertions, 9 deletions
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index bcb115edf..d4d4b3e26 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -41,6 +41,18 @@ import { ProviderTransform } from "./transform" export namespace Provider { const log = Log.create({ service: "provider" }) + function isGpt5OrLater(modelID: string): boolean { + const match = /^gpt-(\d+)/.exec(modelID) + if (!match) { + return false + } + return Number(match[1]) >= 5 + } + + function shouldUseCopilotResponsesApi(modelID: string): boolean { + return isGpt5OrLater(modelID) && !modelID.startsWith("gpt-5-mini") + } + const BUNDLED_PROVIDERS: Record<string, (options: any) => SDK> = { "@ai-sdk/amazon-bedrock": createAmazonBedrock, "@ai-sdk/anthropic": createAnthropic, @@ -120,10 +132,7 @@ export namespace Provider { return { autoload: false, async getModel(sdk: any, modelID: string, _options?: Record<string, any>) { - if (modelID.includes("codex")) { - return sdk.responses(modelID) - } - return sdk.chat(modelID) + return shouldUseCopilotResponsesApi(modelID) ? sdk.responses(modelID) : sdk.chat(modelID) }, options: {}, } @@ -132,10 +141,7 @@ export namespace Provider { return { autoload: false, async getModel(sdk: any, modelID: string, _options?: Record<string, any>) { - if (modelID.includes("codex")) { - return sdk.responses(modelID) - } - return sdk.chat(modelID) + return shouldUseCopilotResponsesApi(modelID) ? sdk.responses(modelID) : sdk.chat(modelID) }, options: {}, } diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index b803bd66c..2cacb61aa 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -524,7 +524,11 @@ export namespace ProviderTransform { const result: Record<string, any> = {} // openai and providers using openai package should set store to false by default. - if (input.model.providerID === "openai" || input.model.api.npm === "@ai-sdk/openai") { + if ( + input.model.providerID === "openai" || + input.model.api.npm === "@ai-sdk/openai" || + input.model.api.npm === "@ai-sdk/github-copilot" + ) { result["store"] = false } |
