From f3437d9a49d53a51a4526b85813cff4417bb84d3 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Sun, 28 Dec 2025 01:09:26 -0600 Subject: [PATCH] wip --- packages/opencode/src/provider/transform.ts | 54 +++++++++++++++++++-- packages/opencode/src/session/llm.ts | 15 +++--- 2 files changed, 59 insertions(+), 10 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index edfdf2bd6c..3a8e2f1a04 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -125,7 +125,7 @@ export namespace ProviderTransform { cacheControl: { type: "ephemeral" }, }, openrouter: { - cache_control: { type: "ephemeral" }, + cacheControl: { type: "ephemeral" }, }, bedrock: { cachePoint: { type: "ephemeral" }, @@ -244,14 +244,21 @@ export namespace ProviderTransform { return undefined } - export function thinking(model: Provider.Model, thinking: MessageV2.Thinking) { - if (!model.capabilities.reasoning || thinking.effort === "default") return undefined + export function thinking(model: Provider.Model, thinking: MessageV2.Thinking): Record { + if (!model.capabilities.reasoning || thinking.effort === "default") return {} switch (model.api.npm) { case "@openrouter/ai-sdk-provider": return { reasoning: { effort: thinking.effort }, } + + case "@ai-sdk/xai": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/xai + case "@ai-sdk/deepinfra": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/deepinfra + case "@ai-sdk/azure": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/azure case "@ai-sdk/openai-compatible": const result: Record = { reasoningEffort: thinking.effort, @@ -273,7 +280,48 @@ export namespace ProviderTransform { case "@ai-sdk/anthropic": // TODO: map to thinking budgets return {} + + case "@ai-sdk/amazon-bedrock": + // TODO: implement bedrock thinking options + return {} + case "@ai-sdk/google": + // TODO: implement google thinking options + return {} + case "@ai-sdk/google-vertex": + // TODO: implement google-vertex thinking options + return {} + case "@ai-sdk/gateway": + // TODO: implement gateway thinking options + return {} + case "@ai-sdk/mistral": + // TODO: implement mistral thinking options + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/mistral + return {} + + case "@ai-sdk/cerebras": + // TODO: implement cerebras thinking options + return {} + case "@ai-sdk/cohere": + // TODO: implement cohere thinking options + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/cohere + return {} + + case "@ai-sdk/groq": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/groq + return { + reasoningFormat: "parsed", + reasoningEffort: thinking.effort, + } + + case "@ai-sdk/perplexity": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/perplexity + return {} + + case "@ai-sdk/togetherai": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/togetherai + return {} } + return {} } export function options( diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index a81aa7db22..649f313651 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -75,6 +75,13 @@ export namespace LLM { const provider = await Provider.getProvider(input.model.providerID) + const options = pipe( + ProviderTransform.options(input.model, input.sessionID, provider.options), + mergeDeep(input.small ? ProviderTransform.smallOptions(input.model) : {}), + mergeDeep(input.model.options), + mergeDeep(input.agent.options), + mergeDeep(input.user.thinking ? ProviderTransform.thinking(input.model, input.user.thinking) : {}), + ) const params = await Plugin.trigger( "chat.params", { @@ -90,13 +97,7 @@ export namespace LLM { : undefined, topP: input.agent.topP ?? ProviderTransform.topP(input.model), topK: ProviderTransform.topK(input.model), - options: pipe( - {}, - mergeDeep(ProviderTransform.options(input.model, input.sessionID, provider.options)), - input.small ? mergeDeep(ProviderTransform.smallOptions(input.model)) : mergeDeep({}), - mergeDeep(input.model.options), - mergeDeep(input.agent.options), - ), + options, }, )