thinking-toggle-wip
Aiden Cline 2025-12-28 01:09:26 -06:00
parent ccf1826400
commit f3437d9a49
2 changed files with 59 additions and 10 deletions

View File

@ -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<string, any> {
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<string, any> = {
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(

View File

@ -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,
},
)