summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorChristopher Tso <[email protected]>2026-01-19 16:30:28 +1100
committerGitHub <[email protected]>2026-01-18 23:30:28 -0600
commitfc6c9cbbd262daa0f98338ed3c79270fbfa086ad (patch)
tree5c7119e7600b23a1f74c5325b987245e5e157dfd
parent6b481b5fb07134cac6f3df4fa2195aa56476295c (diff)
downloadopencode-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.ts22
-rw-r--r--packages/opencode/src/provider/transform.ts6
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
}