fix(opencode): add GitLab reasoning variants (#47306)

This commit is contained in:
far-ouq 2026-09-05 19:29:29 -04:00 committed by GitHub
parent bbd72fb8b0
commit 7c2199d84a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 25 additions and 8 deletions

View file

@ -341,7 +341,7 @@
"drizzle-orm": "catalog:",
"effect": "catalog:",
"fuzzysort": "3.1.0",
"gitlab-ai-provider": "6.13.0",
"gitlab-ai-provider": "6.14.0",
"glob": "13.0.5",
"google-auth-library": "10.5.0",
"gray-matter": "4.0.3",
@ -634,7 +634,7 @@
"drizzle-orm": "catalog:",
"effect": "catalog:",
"fuzzysort": "3.1.0",
"gitlab-ai-provider": "6.13.0",
"gitlab-ai-provider": "6.14.0",
"glob": "13.0.5",
"google-auth-library": "10.5.0",
"gray-matter": "4.0.3",
@ -3845,7 +3845,7 @@
"github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="],
"gitlab-ai-provider": ["gitlab-ai-provider@6.13.0", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "openai": "^6.16.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=3.0.0", "@ai-sdk/provider-utils": ">=4.0.0" } }, "sha512-JDZhNjvoiB7xBfesNegXNDg6ItKf9M2l8/DifuIyuvYmGgaZnDDbl89QrOKSoIzAOpo/+3Om0qviBPm84nGEbg=="],
"gitlab-ai-provider": ["gitlab-ai-provider@6.14.0", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "openai": "^6.16.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=3.0.0", "@ai-sdk/provider-utils": ">=4.0.0" } }, "sha512-qTkmFhcHXH0tjQN6i5D2lz9OpmYN0lwJdmFIXlsmy6IiYVV2dmsqMemlDNjpE5M8gdSC+61n4mByPzVsyBu0lg=="],
"glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="],

View file

@ -108,7 +108,7 @@
"drizzle-orm": "catalog:",
"effect": "catalog:",
"fuzzysort": "3.1.0",
"gitlab-ai-provider": "6.13.0",
"gitlab-ai-provider": "6.14.0",
"glob": "13.0.5",
"google-auth-library": "10.5.0",
"gray-matter": "4.0.3",

View file

@ -120,7 +120,7 @@
"drizzle-orm": "catalog:",
"effect": "catalog:",
"fuzzysort": "3.1.0",
"gitlab-ai-provider": "6.13.0",
"gitlab-ai-provider": "6.14.0",
"glob": "13.0.5",
"google-auth-library": "10.5.0",
"gray-matter": "4.0.3",

View file

@ -1824,11 +1824,14 @@ function reasoningEffort(model: Provider.Model, effort: string) {
case "ai-gateway-provider":
case "merge-gateway-ai-sdk-provider":
return { reasoningEffort: effort }
case "gitlab-ai-provider":
if (model.family?.startsWith("gpt")) return { reasoningEffort: effort }
if (model.family?.startsWith("claude")) return { thinking: { type: "adaptive", effort } }
return
case "@ai-sdk/cohere":
case "@ai-sdk/perplexity":
case "@ai-sdk/vercel":
case "@ai-sdk/alibaba":
case "gitlab-ai-provider":
return
}
}

View file

@ -3798,10 +3798,11 @@ describe("ProviderTransform sampling defaults - DeepSeek", () => {
describe("ProviderTransform.reasoningVariants", () => {
const model = (reasoning_options: ModelsDev.Model["reasoning_options"]) => ({ reasoning_options }) as ModelsDev.Model
const target = (npm: string, id = "test-model") =>
const target = (npm: string, id = "test-model", family = "") =>
({
id,
providerID: "test",
family,
api: { id, npm, url: "" },
capabilities: { reasoning: true },
limit: { output: 64_000 },
@ -3951,6 +3952,19 @@ describe("ProviderTransform.reasoningVariants", () => {
})
})
test("maps GitLab model efforts to provider-specific options", () => {
const options = model([{ type: "effort", values: ["max"] }])
const openai = target("gitlab-ai-provider", "duo-chat-gpt-5-6-sol", "gpt-sol")
const anthropic = target("gitlab-ai-provider", "duo-chat-opus-4-8", "claude-opus")
expect(ProviderTransform.reasoningVariants(options, openai)).toEqual({
max: { reasoningEffort: "max" },
})
expect(ProviderTransform.reasoningVariants(options, anthropic)).toEqual({
max: { thinking: { type: "adaptive", effort: "max" } },
})
})
test("uses adaptive reasoning config for Anthropic models on Bedrock", () => {
expect(
ProviderTransform.reasoningVariants(
@ -4150,7 +4164,7 @@ describe("ProviderTransform.reasoningVariants", () => {
expect(ProviderTransform.reasoningVariants(effort, target("@ai-sdk/github-copilot", "gemini-3-pro"))).toEqual({})
})
test.each(["@ai-sdk/cohere", "@ai-sdk/perplexity", "@ai-sdk/vercel", "@ai-sdk/alibaba", "gitlab-ai-provider"])(
test.each(["@ai-sdk/cohere", "@ai-sdk/perplexity", "@ai-sdk/vercel", "@ai-sdk/alibaba"])(
"does not invent effort controls for %s",
(npm) => {
expect(ProviderTransform.reasoningVariants(model([{ type: "effort", values: ["high"] }]), target(npm))).toEqual(