mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-10-05 02:41:26 +00:00
Merge a1bedb3434 into cb83656718
This commit is contained in:
commit
e129d56381
26 changed files with 457 additions and 32 deletions
|
|
@ -82,6 +82,10 @@ export const modelInfoSchema = z.object({
|
||||||
// Capability flag to indicate whether the model supports an output verbosity parameter
|
// Capability flag to indicate whether the model supports an output verbosity parameter
|
||||||
supportsVerbosity: z.boolean().optional(),
|
supportsVerbosity: z.boolean().optional(),
|
||||||
supportsReasoningBudget: z.boolean().optional(),
|
supportsReasoningBudget: z.boolean().optional(),
|
||||||
|
// Capability flag to indicate whether the model supports adaptive thinking (Claude Sonnet 4.6 / Opus 4.6+)
|
||||||
|
supportsAdaptiveThinking: z.boolean().optional(),
|
||||||
|
// Capability flag to indicate whether the model supports "max" effort in adaptive thinking (Opus 4.6 only)
|
||||||
|
supportsAdaptiveThinkingMaxEffort: z.boolean().optional(),
|
||||||
// Capability flag to indicate whether the model supports simple on/off binary reasoning
|
// Capability flag to indicate whether the model supports simple on/off binary reasoning
|
||||||
supportsReasoningBinary: z.boolean().optional(),
|
supportsReasoningBinary: z.boolean().optional(),
|
||||||
// Capability flag to indicate whether the model supports temperature parameter
|
// Capability flag to indicate whether the model supports temperature parameter
|
||||||
|
|
|
||||||
|
|
@ -192,6 +192,9 @@ const baseProviderSettingsSchema = z.object({
|
||||||
reasoningEffort: reasoningEffortSettingSchema.optional(),
|
reasoningEffort: reasoningEffortSettingSchema.optional(),
|
||||||
modelMaxTokens: z.number().optional(),
|
modelMaxTokens: z.number().optional(),
|
||||||
modelMaxThinkingTokens: z.number().optional(),
|
modelMaxThinkingTokens: z.number().optional(),
|
||||||
|
// Adaptive thinking (Claude Sonnet 4.6 / Opus 4.6 only)
|
||||||
|
useAdaptiveThinking: z.boolean().optional(),
|
||||||
|
adaptiveThinkingEffort: z.enum(["low", "medium", "high", "max"]).optional(),
|
||||||
|
|
||||||
// Model verbosity.
|
// Model verbosity.
|
||||||
verbosity: verbosityLevelsSchema.optional(),
|
verbosity: verbosityLevelsSchema.optional(),
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ export const anthropicModels = {
|
||||||
cacheWritesPrice: 3.75, // $3.75 per million tokens
|
cacheWritesPrice: 3.75, // $3.75 per million tokens
|
||||||
cacheReadsPrice: 0.3, // $0.30 per million tokens
|
cacheReadsPrice: 0.3, // $0.30 per million tokens
|
||||||
supportsReasoningBudget: true,
|
supportsReasoningBudget: true,
|
||||||
|
supportsAdaptiveThinking: true,
|
||||||
// Tiered pricing for extended context (requires beta flag 'context-1m-2025-08-07')
|
// Tiered pricing for extended context (requires beta flag 'context-1m-2025-08-07')
|
||||||
tiers: [
|
tiers: [
|
||||||
{
|
{
|
||||||
|
|
@ -80,6 +81,8 @@ export const anthropicModels = {
|
||||||
cacheWritesPrice: 6.25, // $6.25 per million tokens
|
cacheWritesPrice: 6.25, // $6.25 per million tokens
|
||||||
cacheReadsPrice: 0.5, // $0.50 per million tokens
|
cacheReadsPrice: 0.5, // $0.50 per million tokens
|
||||||
supportsReasoningBudget: true,
|
supportsReasoningBudget: true,
|
||||||
|
supportsAdaptiveThinking: true,
|
||||||
|
supportsAdaptiveThinkingMaxEffort: true, // "max" effort is only available for Opus 4.6
|
||||||
// Tiered pricing for extended context (requires beta flag)
|
// Tiered pricing for extended context (requires beta flag)
|
||||||
tiers: [
|
tiers: [
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ export class AnthropicHandler extends BaseProvider implements SingleCompletionHa
|
||||||
maxTokens,
|
maxTokens,
|
||||||
temperature,
|
temperature,
|
||||||
reasoning: thinking,
|
reasoning: thinking,
|
||||||
|
outputConfig,
|
||||||
} = this.getModel()
|
} = this.getModel()
|
||||||
|
|
||||||
// Filter out non-Anthropic blocks (reasoning, thoughtSignature, etc.) before sending to the API
|
// Filter out non-Anthropic blocks (reasoning, thoughtSignature, etc.) before sending to the API
|
||||||
|
|
@ -119,6 +120,7 @@ export class AnthropicHandler extends BaseProvider implements SingleCompletionHa
|
||||||
max_tokens: maxTokens ?? ANTHROPIC_DEFAULT_MAX_TOKENS,
|
max_tokens: maxTokens ?? ANTHROPIC_DEFAULT_MAX_TOKENS,
|
||||||
temperature,
|
temperature,
|
||||||
thinking,
|
thinking,
|
||||||
|
...(outputConfig ? { output_config: outputConfig } : {}),
|
||||||
// Setting cache breakpoint for system prompt so new tasks can reuse it.
|
// Setting cache breakpoint for system prompt so new tasks can reuse it.
|
||||||
system: [{ text: systemPrompt, type: "text", cache_control: cacheControl }],
|
system: [{ text: systemPrompt, type: "text", cache_control: cacheControl }],
|
||||||
messages: sanitizedMessages.map((message, index) => {
|
messages: sanitizedMessages.map((message, index) => {
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import type { ModelInfo, ProviderSettings, ReasoningEffortWithMinimal } from "@r
|
||||||
import {
|
import {
|
||||||
getOpenRouterReasoning,
|
getOpenRouterReasoning,
|
||||||
getAnthropicReasoning,
|
getAnthropicReasoning,
|
||||||
|
getAnthropicOutputConfig,
|
||||||
getOpenAiReasoning,
|
getOpenAiReasoning,
|
||||||
getRooReasoning,
|
getRooReasoning,
|
||||||
getGeminiReasoning,
|
getGeminiReasoning,
|
||||||
|
|
@ -458,6 +459,176 @@ describe("reasoning.ts", () => {
|
||||||
|
|
||||||
expect(result).toBeUndefined()
|
expect(result).toBeUndefined()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should return adaptive thinking params when useAdaptiveThinking is true and model supports it", () => {
|
||||||
|
const modelWithAdaptive: ModelInfo = {
|
||||||
|
...baseModel,
|
||||||
|
supportsAdaptiveThinking: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
const settingsWithAdaptive: ProviderSettings = {
|
||||||
|
useAdaptiveThinking: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
...baseOptions,
|
||||||
|
model: modelWithAdaptive,
|
||||||
|
settings: settingsWithAdaptive,
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = getAnthropicReasoning(options)
|
||||||
|
|
||||||
|
expect(result).toEqual({ type: "adaptive" })
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return {type: 'adaptive'} regardless of effort (effort goes in output_config)", () => {
|
||||||
|
const modelWithAdaptive: ModelInfo = {
|
||||||
|
...baseModel,
|
||||||
|
supportsAdaptiveThinking: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
const settingsWithEffort: ProviderSettings = {
|
||||||
|
useAdaptiveThinking: true,
|
||||||
|
adaptiveThinkingEffort: "high",
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
...baseOptions,
|
||||||
|
model: modelWithAdaptive,
|
||||||
|
settings: settingsWithEffort,
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = getAnthropicReasoning(options)
|
||||||
|
|
||||||
|
// output_config is a SEPARATE top-level param; thinking only contains {type: "adaptive"}
|
||||||
|
expect(result).toEqual({ type: "adaptive" })
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should not return adaptive thinking when model does not support it", () => {
|
||||||
|
const settingsWithAdaptive: ProviderSettings = {
|
||||||
|
useAdaptiveThinking: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
...baseOptions,
|
||||||
|
settings: settingsWithAdaptive,
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = getAnthropicReasoning(options)
|
||||||
|
|
||||||
|
// Falls through to manual mode, but base model has no reasoning budget support
|
||||||
|
expect(result).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should not return adaptive thinking when useAdaptiveThinking is false", () => {
|
||||||
|
const modelWithAdaptive: ModelInfo = {
|
||||||
|
...baseModel,
|
||||||
|
supportsAdaptiveThinking: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
const settingsWithDisabled: ProviderSettings = {
|
||||||
|
useAdaptiveThinking: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
...baseOptions,
|
||||||
|
model: modelWithAdaptive,
|
||||||
|
settings: settingsWithDisabled,
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = getAnthropicReasoning(options)
|
||||||
|
|
||||||
|
// Falls through to manual mode, but base model has no reasoning budget support
|
||||||
|
expect(result).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should prioritize adaptive thinking over manual budget when both settings present", () => {
|
||||||
|
const modelWithBoth: ModelInfo = {
|
||||||
|
...baseModel,
|
||||||
|
supportsAdaptiveThinking: true,
|
||||||
|
supportsReasoningBudget: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
const settingsWithBoth: ProviderSettings = {
|
||||||
|
useAdaptiveThinking: true,
|
||||||
|
enableReasoningEffort: true,
|
||||||
|
adaptiveThinkingEffort: "medium",
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
...baseOptions,
|
||||||
|
model: modelWithBoth,
|
||||||
|
settings: settingsWithBoth,
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = getAnthropicReasoning(options)
|
||||||
|
|
||||||
|
// output_config is separate; thinking only contains {type: "adaptive"}
|
||||||
|
expect(result).toEqual({ type: "adaptive" })
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("getAnthropicOutputConfig", () => {
|
||||||
|
it("should return undefined when adaptive thinking is not enabled", () => {
|
||||||
|
const result = getAnthropicOutputConfig({ model: baseModel, settings: {} })
|
||||||
|
expect(result).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return undefined when model does not support adaptive thinking", () => {
|
||||||
|
const settings: ProviderSettings = { useAdaptiveThinking: true, adaptiveThinkingEffort: "high" }
|
||||||
|
const result = getAnthropicOutputConfig({ model: baseModel, settings })
|
||||||
|
expect(result).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return undefined when no effort is specified", () => {
|
||||||
|
const modelWithAdaptive: ModelInfo = { ...baseModel, supportsAdaptiveThinking: true }
|
||||||
|
const settings: ProviderSettings = { useAdaptiveThinking: true }
|
||||||
|
const result = getAnthropicOutputConfig({ model: modelWithAdaptive, settings })
|
||||||
|
expect(result).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return effort when adaptiveThinkingEffort is set", () => {
|
||||||
|
const modelWithAdaptive: ModelInfo = { ...baseModel, supportsAdaptiveThinking: true }
|
||||||
|
const settings: ProviderSettings = { useAdaptiveThinking: true, adaptiveThinkingEffort: "high" }
|
||||||
|
const result = getAnthropicOutputConfig({ model: modelWithAdaptive, settings })
|
||||||
|
expect(result).toEqual({ effort: "high" })
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should fallback to high when max is set but model does not support it", () => {
|
||||||
|
const modelNoMax: ModelInfo = {
|
||||||
|
...baseModel,
|
||||||
|
supportsAdaptiveThinking: true,
|
||||||
|
supportsAdaptiveThinkingMaxEffort: false,
|
||||||
|
}
|
||||||
|
const settings: ProviderSettings = { useAdaptiveThinking: true, adaptiveThinkingEffort: "max" }
|
||||||
|
const result = getAnthropicOutputConfig({ model: modelNoMax, settings })
|
||||||
|
expect(result).toEqual({ effort: "high" })
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return max effort when model supports it", () => {
|
||||||
|
const modelWithMax: ModelInfo = {
|
||||||
|
...baseModel,
|
||||||
|
supportsAdaptiveThinking: true,
|
||||||
|
supportsAdaptiveThinkingMaxEffort: true,
|
||||||
|
}
|
||||||
|
const settings: ProviderSettings = { useAdaptiveThinking: true, adaptiveThinkingEffort: "max" }
|
||||||
|
const result = getAnthropicOutputConfig({ model: modelWithMax, settings })
|
||||||
|
expect(result).toEqual({ effort: "max" })
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return low effort", () => {
|
||||||
|
const modelWithAdaptive: ModelInfo = { ...baseModel, supportsAdaptiveThinking: true }
|
||||||
|
const settings: ProviderSettings = { useAdaptiveThinking: true, adaptiveThinkingEffort: "low" }
|
||||||
|
const result = getAnthropicOutputConfig({ model: modelWithAdaptive, settings })
|
||||||
|
expect(result).toEqual({ effort: "low" })
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return medium effort", () => {
|
||||||
|
const modelWithAdaptive: ModelInfo = { ...baseModel, supportsAdaptiveThinking: true }
|
||||||
|
const settings: ProviderSettings = { useAdaptiveThinking: true, adaptiveThinkingEffort: "medium" }
|
||||||
|
const result = getAnthropicOutputConfig({ model: modelWithAdaptive, settings })
|
||||||
|
expect(result).toEqual({ effort: "medium" })
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("getOpenAiReasoning", () => {
|
describe("getOpenAiReasoning", () => {
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,12 @@ import {
|
||||||
|
|
||||||
import {
|
import {
|
||||||
type AnthropicReasoningParams,
|
type AnthropicReasoningParams,
|
||||||
|
type AnthropicOutputConfig,
|
||||||
type OpenAiReasoningParams,
|
type OpenAiReasoningParams,
|
||||||
type GeminiReasoningParams,
|
type GeminiReasoningParams,
|
||||||
type OpenRouterReasoningParams,
|
type OpenRouterReasoningParams,
|
||||||
getAnthropicReasoning,
|
getAnthropicReasoning,
|
||||||
|
getAnthropicOutputConfig,
|
||||||
getOpenAiReasoning,
|
getOpenAiReasoning,
|
||||||
getGeminiReasoning,
|
getGeminiReasoning,
|
||||||
getOpenRouterReasoning,
|
getOpenRouterReasoning,
|
||||||
|
|
@ -48,6 +50,7 @@ type BaseModelParams = {
|
||||||
type AnthropicModelParams = {
|
type AnthropicModelParams = {
|
||||||
format: "anthropic"
|
format: "anthropic"
|
||||||
reasoning: AnthropicReasoningParams | undefined
|
reasoning: AnthropicReasoningParams | undefined
|
||||||
|
outputConfig: AnthropicOutputConfig | undefined
|
||||||
} & BaseModelParams
|
} & BaseModelParams
|
||||||
|
|
||||||
type OpenAiModelParams = {
|
type OpenAiModelParams = {
|
||||||
|
|
@ -151,6 +154,7 @@ export function getModelParams({
|
||||||
format,
|
format,
|
||||||
...params,
|
...params,
|
||||||
reasoning: getAnthropicReasoning({ model, reasoningBudget, reasoningEffort, settings }),
|
reasoning: getAnthropicReasoning({ model, reasoningBudget, reasoningEffort, settings }),
|
||||||
|
outputConfig: getAnthropicOutputConfig({ model, settings }),
|
||||||
}
|
}
|
||||||
} else if (format === "openai") {
|
} else if (format === "openai") {
|
||||||
// Special case for o1 and o3-mini, which don't support temperature.
|
// Special case for o1 and o3-mini, which don't support temperature.
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ export type RooReasoningParams = {
|
||||||
|
|
||||||
export type AnthropicReasoningParams = BetaThinkingConfigParam
|
export type AnthropicReasoningParams = BetaThinkingConfigParam
|
||||||
|
|
||||||
|
export type AnthropicOutputConfig = { effort: "low" | "medium" | "high" | "max" }
|
||||||
|
|
||||||
export type OpenAiReasoningParams = { reasoning_effort: OpenAI.Chat.ChatCompletionCreateParams["reasoning_effort"] }
|
export type OpenAiReasoningParams = { reasoning_effort: OpenAI.Chat.ChatCompletionCreateParams["reasoning_effort"] }
|
||||||
|
|
||||||
// Valid Gemini thinking levels for effort-based reasoning
|
// Valid Gemini thinking levels for effort-based reasoning
|
||||||
|
|
@ -108,8 +110,41 @@ export const getAnthropicReasoning = ({
|
||||||
model,
|
model,
|
||||||
reasoningBudget,
|
reasoningBudget,
|
||||||
settings,
|
settings,
|
||||||
}: GetModelReasoningOptions): AnthropicReasoningParams | undefined =>
|
}: GetModelReasoningOptions): AnthropicReasoningParams | undefined => {
|
||||||
shouldUseReasoningBudget({ model, settings }) ? { type: "enabled", budget_tokens: reasoningBudget! } : undefined
|
// Adaptive thinking: Claude determines dynamically when and how much to use extended thinking.
|
||||||
|
// Supported on claude-sonnet-4-6 and claude-opus-4-6 only.
|
||||||
|
if (settings?.useAdaptiveThinking && model.supportsAdaptiveThinking) {
|
||||||
|
return { type: "adaptive" as any } as any
|
||||||
|
}
|
||||||
|
|
||||||
|
// Manual mode: fixed budget_tokens
|
||||||
|
return shouldUseReasoningBudget({ model, settings })
|
||||||
|
? { type: "enabled", budget_tokens: reasoningBudget! }
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the `output_config` top-level parameter for Anthropic API calls when adaptive thinking
|
||||||
|
* is enabled with an effort level. This is a SEPARATE top-level parameter from `thinking`.
|
||||||
|
* See: https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#adaptive-thinking
|
||||||
|
*/
|
||||||
|
export const getAnthropicOutputConfig = ({
|
||||||
|
model,
|
||||||
|
settings,
|
||||||
|
}: Pick<GetModelReasoningOptions, "model" | "settings">): AnthropicOutputConfig | undefined => {
|
||||||
|
if (!settings?.useAdaptiveThinking || !model.supportsAdaptiveThinking) {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
const effort = settings.adaptiveThinkingEffort
|
||||||
|
if (!effort) {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
// "max" effort is only supported on claude-opus-4-6; fall back to "high" otherwise
|
||||||
|
if (effort === "max" && !model.supportsAdaptiveThinkingMaxEffort) {
|
||||||
|
return { effort: "high" }
|
||||||
|
}
|
||||||
|
return { effort }
|
||||||
|
}
|
||||||
|
|
||||||
export const getOpenAiReasoning = ({
|
export const getOpenAiReasoning = ({
|
||||||
model,
|
model,
|
||||||
|
|
|
||||||
|
|
@ -179,6 +179,24 @@ export const ThinkingBudget = ({ apiConfiguration, setApiConfigurationField, mod
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isAdaptiveThinkingSupported = !!modelInfo && (modelInfo as any).supportsAdaptiveThinking
|
||||||
|
const isMaxEffortSupported = !!modelInfo && (modelInfo as any).supportsAdaptiveThinkingMaxEffort
|
||||||
|
const useAdaptiveThinking = apiConfiguration.useAdaptiveThinking ?? false
|
||||||
|
const adaptiveThinkingEffort = (apiConfiguration.adaptiveThinkingEffort ?? "high") as
|
||||||
|
| "low"
|
||||||
|
| "medium"
|
||||||
|
| "high"
|
||||||
|
| "max"
|
||||||
|
|
||||||
|
const adaptiveEffortOptions: Array<{ value: "low" | "medium" | "high" | "max"; labelKey: string }> = [
|
||||||
|
{ value: "low", labelKey: "settings:thinkingBudget.adaptiveEffort.low" },
|
||||||
|
{ value: "medium", labelKey: "settings:thinkingBudget.adaptiveEffort.medium" },
|
||||||
|
{ value: "high", labelKey: "settings:thinkingBudget.adaptiveEffort.high" },
|
||||||
|
...(isMaxEffortSupported
|
||||||
|
? [{ value: "max" as const, labelKey: "settings:thinkingBudget.adaptiveEffort.max" }]
|
||||||
|
: []),
|
||||||
|
]
|
||||||
|
|
||||||
return isReasoningBudgetSupported && !!modelInfo.maxTokens ? (
|
return isReasoningBudgetSupported && !!modelInfo.maxTokens ? (
|
||||||
<>
|
<>
|
||||||
{!isReasoningBudgetRequired && (
|
{!isReasoningBudgetRequired && (
|
||||||
|
|
@ -194,6 +212,43 @@ export const ThinkingBudget = ({ apiConfiguration, setApiConfigurationField, mod
|
||||||
)}
|
)}
|
||||||
{(isReasoningBudgetRequired || enableReasoningEffort) && (
|
{(isReasoningBudgetRequired || enableReasoningEffort) && (
|
||||||
<>
|
<>
|
||||||
|
{isAdaptiveThinkingSupported && (
|
||||||
|
<div className="flex flex-col gap-1">
|
||||||
|
<Checkbox
|
||||||
|
checked={useAdaptiveThinking}
|
||||||
|
onChange={(checked: boolean) => {
|
||||||
|
setApiConfigurationField("useAdaptiveThinking", checked === true)
|
||||||
|
if (!checked) {
|
||||||
|
setApiConfigurationField("adaptiveThinkingEffort", undefined as any)
|
||||||
|
}
|
||||||
|
}}>
|
||||||
|
{t("settings:thinkingBudget.useAdaptiveThinking")}
|
||||||
|
</Checkbox>
|
||||||
|
{useAdaptiveThinking && (
|
||||||
|
<div className="ml-5 flex flex-col gap-1">
|
||||||
|
<div className="text-sm text-vscode-descriptionForeground">
|
||||||
|
{t("settings:thinkingBudget.adaptiveThinkingDescription")}
|
||||||
|
</div>
|
||||||
|
<Select
|
||||||
|
value={adaptiveThinkingEffort}
|
||||||
|
onValueChange={(value: "low" | "medium" | "high" | "max") =>
|
||||||
|
setApiConfigurationField("adaptiveThinkingEffort", value)
|
||||||
|
}>
|
||||||
|
<SelectTrigger className="w-full">
|
||||||
|
<SelectValue />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent>
|
||||||
|
{adaptiveEffortOptions.map(({ value, labelKey }) => (
|
||||||
|
<SelectItem key={value} value={value}>
|
||||||
|
{t(labelKey)}
|
||||||
|
</SelectItem>
|
||||||
|
))}
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<div className="flex flex-col gap-1">
|
<div className="flex flex-col gap-1">
|
||||||
<div className="font-medium">{t("settings:thinkingBudget.maxTokens")}</div>
|
<div className="font-medium">{t("settings:thinkingBudget.maxTokens")}</div>
|
||||||
<div className="flex items-center gap-1">
|
<div className="flex items-center gap-1">
|
||||||
|
|
@ -211,19 +266,23 @@ export const ThinkingBudget = ({ apiConfiguration, setApiConfigurationField, mod
|
||||||
<div className="w-12 text-sm text-center">{customMaxOutputTokens}</div>
|
<div className="w-12 text-sm text-center">{customMaxOutputTokens}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-1">
|
{!useAdaptiveThinking && (
|
||||||
<div className="font-medium">{t("settings:thinkingBudget.maxThinkingTokens")}</div>
|
<div className="flex flex-col gap-1">
|
||||||
<div className="flex items-center gap-1" data-testid="reasoning-budget">
|
<div className="font-medium">{t("settings:thinkingBudget.maxThinkingTokens")}</div>
|
||||||
<Slider
|
<div className="flex items-center gap-1" data-testid="reasoning-budget">
|
||||||
min={minThinkingTokens}
|
<Slider
|
||||||
max={modelMaxThinkingTokens}
|
min={minThinkingTokens}
|
||||||
step={minThinkingTokens === 128 ? 128 : 1024}
|
max={modelMaxThinkingTokens}
|
||||||
value={[customMaxThinkingTokens]}
|
step={minThinkingTokens === 128 ? 128 : 1024}
|
||||||
onValueChange={([value]) => setApiConfigurationField("modelMaxThinkingTokens", value)}
|
value={[customMaxThinkingTokens]}
|
||||||
/>
|
onValueChange={([value]) =>
|
||||||
<div className="w-12 text-sm text-center">{customMaxThinkingTokens}</div>
|
setApiConfigurationField("modelMaxThinkingTokens", value)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<div className="w-12 text-sm text-center">{customMaxThinkingTokens}</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/ca/settings.json
generated
10
webview-ui/src/i18n/locales/ca/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Tokens màxims",
|
"maxTokens": "Tokens màxims",
|
||||||
"maxThinkingTokens": "Tokens de pensament màxims"
|
"maxThinkingTokens": "Tokens de pensament màxims",
|
||||||
|
"useAdaptiveThinking": "Usa el pensament adaptatiu",
|
||||||
|
"adaptiveThinkingDescription": "Deixa que Claude determini dinàmicament quan i quant pensar en funció de la complexitat de la sol·licitud.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Baix",
|
||||||
|
"medium": "Mitjà",
|
||||||
|
"high": "Alt (per defecte)",
|
||||||
|
"max": "Màxim (només Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Heu de proporcionar una clau API vàlida.",
|
"apiKey": "Heu de proporcionar una clau API vàlida.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/de/settings.json
generated
10
webview-ui/src/i18n/locales/de/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Max Tokens",
|
"maxTokens": "Max Tokens",
|
||||||
"maxThinkingTokens": "Max Thinking Tokens"
|
"maxThinkingTokens": "Max Thinking Tokens",
|
||||||
|
"useAdaptiveThinking": "Adaptives Denken verwenden",
|
||||||
|
"adaptiveThinkingDescription": "Lasse Claude dynamisch bestimmen, wann und wie viel es basierend auf der Anfragekomplexität denkt.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Niedrig",
|
||||||
|
"medium": "Mittel",
|
||||||
|
"high": "Hoch (Standard)",
|
||||||
|
"max": "Maximal (nur Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Du musst einen gültigen API-Schlüssel angeben.",
|
"apiKey": "Du musst einen gültigen API-Schlüssel angeben.",
|
||||||
|
|
|
||||||
|
|
@ -943,7 +943,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Max Tokens",
|
"maxTokens": "Max Tokens",
|
||||||
"maxThinkingTokens": "Max Thinking Tokens"
|
"maxThinkingTokens": "Max Thinking Tokens",
|
||||||
|
"useAdaptiveThinking": "Use Adaptive Thinking",
|
||||||
|
"adaptiveThinkingDescription": "Let Claude dynamically determine when and how much to think based on request complexity.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Low",
|
||||||
|
"medium": "Medium",
|
||||||
|
"high": "High (Default)",
|
||||||
|
"max": "Max (Opus 4.6 only)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "You must provide a valid API key.",
|
"apiKey": "You must provide a valid API key.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/es/settings.json
generated
10
webview-ui/src/i18n/locales/es/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Tokens máximos",
|
"maxTokens": "Tokens máximos",
|
||||||
"maxThinkingTokens": "Tokens máximos de pensamiento"
|
"maxThinkingTokens": "Tokens máximos de pensamiento",
|
||||||
|
"useAdaptiveThinking": "Usar pensamiento adaptativo",
|
||||||
|
"adaptiveThinkingDescription": "Deja que Claude determine dinámicamente cuándo y cuánto pensar según la complejidad de la solicitud.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Bajo",
|
||||||
|
"medium": "Medio",
|
||||||
|
"high": "Alto (predeterminado)",
|
||||||
|
"max": "Máximo (solo Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Debe proporcionar una clave API válida.",
|
"apiKey": "Debe proporcionar una clave API válida.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/fr/settings.json
generated
10
webview-ui/src/i18n/locales/fr/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Tokens maximum",
|
"maxTokens": "Tokens maximum",
|
||||||
"maxThinkingTokens": "Tokens de réflexion maximum"
|
"maxThinkingTokens": "Tokens de réflexion maximum",
|
||||||
|
"useAdaptiveThinking": "Utiliser la réflexion adaptative",
|
||||||
|
"adaptiveThinkingDescription": "Laissez Claude déterminer dynamiquement quand et combien réfléchir en fonction de la complexité de la demande.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Faible",
|
||||||
|
"medium": "Moyen",
|
||||||
|
"high": "Élevé (par défaut)",
|
||||||
|
"max": "Maximum (Opus 4.6 uniquement)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Vous devez fournir une clé API valide.",
|
"apiKey": "Vous devez fournir une clé API valide.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/hi/settings.json
generated
10
webview-ui/src/i18n/locales/hi/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "अधिकतम tokens",
|
"maxTokens": "अधिकतम tokens",
|
||||||
"maxThinkingTokens": "अधिकतम thinking tokens"
|
"maxThinkingTokens": "अधिकतम thinking tokens",
|
||||||
|
"useAdaptiveThinking": "अनुकूली सोच का उपयोग करें",
|
||||||
|
"adaptiveThinkingDescription": "Claude को अनुरोध की जटिलता के आधार पर गतिशील रूप से यह निर्धारित करने दें कि कब और कितना सोचना है।",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "कम",
|
||||||
|
"medium": "मध्यम",
|
||||||
|
"high": "उच्च (डिफ़ॉल्ट)",
|
||||||
|
"max": "अधिकतम (केवल Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "आपको एक मान्य API कुंजी प्रदान करनी होगी।",
|
"apiKey": "आपको एक मान्य API कुंजी प्रदान करनी होगी।",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/id/settings.json
generated
10
webview-ui/src/i18n/locales/id/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Token Maksimum",
|
"maxTokens": "Token Maksimum",
|
||||||
"maxThinkingTokens": "Token Thinking Maksimum"
|
"maxThinkingTokens": "Token Thinking Maksimum",
|
||||||
|
"useAdaptiveThinking": "Gunakan Pemikiran Adaptif",
|
||||||
|
"adaptiveThinkingDescription": "Biarkan Claude menentukan secara dinamis kapan dan seberapa banyak berpikir berdasarkan kompleksitas permintaan.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Rendah",
|
||||||
|
"medium": "Sedang",
|
||||||
|
"high": "Tinggi (Default)",
|
||||||
|
"max": "Maksimum (Hanya Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Kamu harus menyediakan API key yang valid.",
|
"apiKey": "Kamu harus menyediakan API key yang valid.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/it/settings.json
generated
10
webview-ui/src/i18n/locales/it/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Token massimi",
|
"maxTokens": "Token massimi",
|
||||||
"maxThinkingTokens": "Token massimi di pensiero"
|
"maxThinkingTokens": "Token massimi di pensiero",
|
||||||
|
"useAdaptiveThinking": "Usa il pensiero adattivo",
|
||||||
|
"adaptiveThinkingDescription": "Lascia che Claude determini dinamicamente quando e quanto pensare in base alla complessità della richiesta.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Basso",
|
||||||
|
"medium": "Medio",
|
||||||
|
"high": "Alto (predefinito)",
|
||||||
|
"max": "Massimo (solo Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "È necessario fornire una chiave API valida.",
|
"apiKey": "È necessario fornire una chiave API valida.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/ja/settings.json
generated
10
webview-ui/src/i18n/locales/ja/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "最大 tokens",
|
"maxTokens": "最大 tokens",
|
||||||
"maxThinkingTokens": "最大思考 tokens"
|
"maxThinkingTokens": "最大思考 tokens",
|
||||||
|
"useAdaptiveThinking": "アダプティブ思考を使用",
|
||||||
|
"adaptiveThinkingDescription": "リクエストの複雑さに基づいて、Claudeがいつどれだけ考えるかを動的に決定できるようにします。",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "低",
|
||||||
|
"medium": "中",
|
||||||
|
"high": "高(デフォルト)",
|
||||||
|
"max": "最大(Opus 4.6のみ)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "有効なAPIキーを入力してください。",
|
"apiKey": "有効なAPIキーを入力してください。",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/ko/settings.json
generated
10
webview-ui/src/i18n/locales/ko/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "최대 tokens",
|
"maxTokens": "최대 tokens",
|
||||||
"maxThinkingTokens": "최대 사고 tokens"
|
"maxThinkingTokens": "최대 사고 tokens",
|
||||||
|
"useAdaptiveThinking": "적응형 사고 사용",
|
||||||
|
"adaptiveThinkingDescription": "Claude가 요청 복잡성에 따라 언제, 얼마나 생각할지를 동적으로 결정하도록 합니다.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "낮음",
|
||||||
|
"medium": "중간",
|
||||||
|
"high": "높음 (기본값)",
|
||||||
|
"max": "최대 (Opus 4.6만 해당)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "유효한 API 키를 입력해야 합니다.",
|
"apiKey": "유효한 API 키를 입력해야 합니다.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/nl/settings.json
generated
10
webview-ui/src/i18n/locales/nl/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Max tokens",
|
"maxTokens": "Max tokens",
|
||||||
"maxThinkingTokens": "Max denk-tokens"
|
"maxThinkingTokens": "Max denk-tokens",
|
||||||
|
"useAdaptiveThinking": "Adaptief denken gebruiken",
|
||||||
|
"adaptiveThinkingDescription": "Laat Claude dynamisch bepalen wanneer en hoeveel te denken op basis van de complexiteit van het verzoek.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Laag",
|
||||||
|
"medium": "Gemiddeld",
|
||||||
|
"high": "Hoog (standaard)",
|
||||||
|
"max": "Maximaal (alleen Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Je moet een geldige API-sleutel opgeven.",
|
"apiKey": "Je moet een geldige API-sleutel opgeven.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/pl/settings.json
generated
10
webview-ui/src/i18n/locales/pl/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Maksymalna liczba tokenów",
|
"maxTokens": "Maksymalna liczba tokenów",
|
||||||
"maxThinkingTokens": "Maksymalna liczba tokenów myślenia"
|
"maxThinkingTokens": "Maksymalna liczba tokenów myślenia",
|
||||||
|
"useAdaptiveThinking": "Używaj adaptywnego myślenia",
|
||||||
|
"adaptiveThinkingDescription": "Pozwól Claude dynamicznie określać, kiedy i ile myśleć w oparciu o złożoność żądania.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Niski",
|
||||||
|
"medium": "Średni",
|
||||||
|
"high": "Wysoki (domyślny)",
|
||||||
|
"max": "Maksymalny (tylko Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Musisz podać prawidłowy klucz API.",
|
"apiKey": "Musisz podać prawidłowy klucz API.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
10
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Tokens máximos",
|
"maxTokens": "Tokens máximos",
|
||||||
"maxThinkingTokens": "Tokens máximos de pensamento"
|
"maxThinkingTokens": "Tokens máximos de pensamento",
|
||||||
|
"useAdaptiveThinking": "Usar pensamento adaptativo",
|
||||||
|
"adaptiveThinkingDescription": "Deixe o Claude determinar dinamicamente quando e quanto pensar com base na complexidade da solicitação.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Baixo",
|
||||||
|
"medium": "Médio",
|
||||||
|
"high": "Alto (padrão)",
|
||||||
|
"max": "Máximo (apenas Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Você deve fornecer uma chave de API válida.",
|
"apiKey": "Você deve fornecer uma chave de API válida.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/ru/settings.json
generated
10
webview-ui/src/i18n/locales/ru/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Максимум токенов",
|
"maxTokens": "Максимум токенов",
|
||||||
"maxThinkingTokens": "Максимум токенов на размышления"
|
"maxThinkingTokens": "Максимум токенов на размышления",
|
||||||
|
"useAdaptiveThinking": "Использовать адаптивное мышление",
|
||||||
|
"adaptiveThinkingDescription": "Позвольте Claude динамически определять, когда и сколько думать в зависимости от сложности запроса.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Низкий",
|
||||||
|
"medium": "Средний",
|
||||||
|
"high": "Высокий (по умолчанию)",
|
||||||
|
"max": "Максимальный (только Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Вы должны указать действительный API-ключ.",
|
"apiKey": "Вы должны указать действительный API-ключ.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/tr/settings.json
generated
10
webview-ui/src/i18n/locales/tr/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Maksimum token",
|
"maxTokens": "Maksimum token",
|
||||||
"maxThinkingTokens": "Maksimum düşünme tokeni"
|
"maxThinkingTokens": "Maksimum düşünme tokeni",
|
||||||
|
"useAdaptiveThinking": "Uyarlamalı Düşünmeyi Kullan",
|
||||||
|
"adaptiveThinkingDescription": "Claude'un istek karmaşıklığına göre ne zaman ve ne kadar düşüneceğini dinamik olarak belirlemesine izin verin.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Düşük",
|
||||||
|
"medium": "Orta",
|
||||||
|
"high": "Yüksek (Varsayılan)",
|
||||||
|
"max": "Maksimum (Yalnızca Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Geçerli bir API anahtarı sağlamalısınız.",
|
"apiKey": "Geçerli bir API anahtarı sağlamalısınız.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/vi/settings.json
generated
10
webview-ui/src/i18n/locales/vi/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "Tokens tối đa",
|
"maxTokens": "Tokens tối đa",
|
||||||
"maxThinkingTokens": "Tokens suy nghĩ tối đa"
|
"maxThinkingTokens": "Tokens suy nghĩ tối đa",
|
||||||
|
"useAdaptiveThinking": "Sử dụng tư duy thích ứng",
|
||||||
|
"adaptiveThinkingDescription": "Để Claude tự động xác định khi nào và bao nhiêu để suy nghĩ dựa trên độ phức tạp của yêu cầu.",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "Thấp",
|
||||||
|
"medium": "Trung bình",
|
||||||
|
"high": "Cao (mặc định)",
|
||||||
|
"max": "Tối đa (chỉ Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "Bạn phải cung cấp khóa API hợp lệ.",
|
"apiKey": "Bạn phải cung cấp khóa API hợp lệ.",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
10
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
|
|
@ -880,7 +880,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "最大Token数",
|
"maxTokens": "最大Token数",
|
||||||
"maxThinkingTokens": "最大思考Token数"
|
"maxThinkingTokens": "最大思考Token数",
|
||||||
|
"useAdaptiveThinking": "使用自适应思考",
|
||||||
|
"adaptiveThinkingDescription": "让Claude根据请求复杂性动态决定何时以及思考多少。",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "低",
|
||||||
|
"medium": "中",
|
||||||
|
"high": "高(默认)",
|
||||||
|
"max": "最大(仅Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "您必须提供有效的 API 密钥。",
|
"apiKey": "您必须提供有效的 API 密钥。",
|
||||||
|
|
|
||||||
10
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
10
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
|
|
@ -890,7 +890,15 @@
|
||||||
},
|
},
|
||||||
"thinkingBudget": {
|
"thinkingBudget": {
|
||||||
"maxTokens": "最大 Token 數",
|
"maxTokens": "最大 Token 數",
|
||||||
"maxThinkingTokens": "最大思考 Token 數"
|
"maxThinkingTokens": "最大思考 Token 數",
|
||||||
|
"useAdaptiveThinking": "使用自適應思考",
|
||||||
|
"adaptiveThinkingDescription": "讓 Claude 根據請求複雜性動態決定何時以及思考多少。",
|
||||||
|
"adaptiveEffort": {
|
||||||
|
"low": "低",
|
||||||
|
"medium": "中",
|
||||||
|
"high": "高(預設)",
|
||||||
|
"max": "最大(僅 Opus 4.6)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"apiKey": "請提供有效的 API 金鑰。",
|
"apiKey": "請提供有效的 API 金鑰。",
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue