diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 6a187aa601..4956020321 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -722,6 +722,7 @@ function effortVariant(model: Provider.Model, effort: ReasoningEffortValue) { case "venice-ai-sdk-provider": case "@ai-sdk/openai-compatible": case "@ai-sdk/groq": + case "@ai-sdk/mistral": return { reasoningEffort: effort } } return undefined diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index e19707c7d1..ff373f6e72 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -3067,6 +3067,25 @@ describe("ProviderTransform.variants", () => { }) }) + test("mistral reasoning_options drive supported effort variants", () => { + const result = ProviderTransform.variants( + createMockModel({ + id: "mistral/mistral-small-2603", + providerID: "mistral", + api: { + id: "mistral-small-2603", + url: "https://api.mistral.com", + npm: "@ai-sdk/mistral", + }, + reasoning_options: [{ type: "effort", values: ["none", "high"] }], + }), + ) + expect(result).toEqual({ + none: { reasoningEffort: "none" }, + high: { reasoningEffort: "high" }, + }) + }) + test("mistral without reasoning returns empty object", () => { const model = createMockModel({ id: "mistral/mistral-large",