Skip to content

Commit fc6c9cb

Browse files
christsoclaude
andauthored
fix(github-copilot): auto-route GPT-5+ models to Responses API (anomalyco#5877)
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 6b481b5 commit fc6c9cb

2 files changed

Lines changed: 19 additions & 9 deletions

File tree

packages/opencode/src/provider/provider.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,18 @@ import { ProviderTransform } from "./transform"
4141
export namespace Provider {
4242
const log = Log.create({ service: "provider" })
4343

44+
function isGpt5OrLater(modelID: string): boolean {
45+
const match = /^gpt-(\d+)/.exec(modelID)
46+
if (!match) {
47+
return false
48+
}
49+
return Number(match[1]) >= 5
50+
}
51+
52+
function shouldUseCopilotResponsesApi(modelID: string): boolean {
53+
return isGpt5OrLater(modelID) && !modelID.startsWith("gpt-5-mini")
54+
}
55+
4456
const BUNDLED_PROVIDERS: Record<string, (options: any) => SDK> = {
4557
"@ai-sdk/amazon-bedrock": createAmazonBedrock,
4658
"@ai-sdk/anthropic": createAnthropic,
@@ -120,10 +132,7 @@ export namespace Provider {
120132
return {
121133
autoload: false,
122134
async getModel(sdk: any, modelID: string, _options?: Record<string, any>) {
123-
if (modelID.includes("codex")) {
124-
return sdk.responses(modelID)
125-
}
126-
return sdk.chat(modelID)
135+
return shouldUseCopilotResponsesApi(modelID) ? sdk.responses(modelID) : sdk.chat(modelID)
127136
},
128137
options: {},
129138
}
@@ -132,10 +141,7 @@ export namespace Provider {
132141
return {
133142
autoload: false,
134143
async getModel(sdk: any, modelID: string, _options?: Record<string, any>) {
135-
if (modelID.includes("codex")) {
136-
return sdk.responses(modelID)
137-
}
138-
return sdk.chat(modelID)
144+
return shouldUseCopilotResponsesApi(modelID) ? sdk.responses(modelID) : sdk.chat(modelID)
139145
},
140146
options: {},
141147
}

packages/opencode/src/provider/transform.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,11 @@ export namespace ProviderTransform {
524524
const result: Record<string, any> = {}
525525

526526
// openai and providers using openai package should set store to false by default.
527-
if (input.model.providerID === "openai" || input.model.api.npm === "@ai-sdk/openai") {
527+
if (
528+
input.model.providerID === "openai" ||
529+
input.model.api.npm === "@ai-sdk/openai" ||
530+
input.model.api.npm === "@ai-sdk/github-copilot"
531+
) {
528532
result["store"] = false
529533
}
530534

0 commit comments

Comments
 (0)