fix: update token limits for Claude models

This commit is contained in:
suyao 2025-05-19 12:37:59 +08:00 committed by 亢奋猫
parent 6212349a83
commit ca1a4e06a1
3 changed files with 21 additions and 7 deletions

View File

@ -2616,7 +2616,7 @@ export const THINKING_TOKEN_MAP: Record<string, { min: number; max: number }> =
'qwen3-.*$': { min: 0, max: 38912 },
// Claude models
'claude-3[.-]7.*sonnet.*$': { min: 0, max: 64000 }
'claude-3[.-]7.*sonnet.*$': { min: 1024, max: 64000 }
}
export const findTokenLimit = (modelId: string): { min: number; max: number } | undefined => {

View File

@ -13,7 +13,7 @@ import {
WebSearchToolResultError
} from '@anthropic-ai/sdk/resources'
import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant'
import { isClaudeReasoningModel, isReasoningModel, isWebSearchModel } from '@renderer/config/models'
import { findTokenLimit, isClaudeReasoningModel, isReasoningModel, isWebSearchModel } from '@renderer/config/models'
import { getStoreSetting } from '@renderer/hooks/useSettings'
import i18n from '@renderer/i18n'
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/AssistantService'
@ -189,7 +189,16 @@ export default class AnthropicProvider extends BaseProvider {
const effortRatio = EFFORT_RATIO[reasoningEffort]
const budgetTokens = Math.floor((maxTokens || DEFAULT_MAX_TOKENS) * effortRatio * 0.8)
const budgetTokens = Math.max(
1024,
Math.floor(
Math.min(
(findTokenLimit(model.id)?.max! - findTokenLimit(model.id)?.min!) * effortRatio +
findTokenLimit(model.id)?.min!,
(maxTokens || DEFAULT_MAX_TOKENS) * effortRatio
)
)
)
return {
type: 'enabled',

View File

@ -1,3 +1,4 @@
import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant'
import {
findTokenLimit,
getOpenAIWebSearchParams,
@ -275,7 +276,10 @@ export default class OpenAIProvider extends BaseOpenAIProvider {
return {}
}
const effortRatio = EFFORT_RATIO[reasoningEffort]
const budgetTokens = Math.floor((findTokenLimit(model.id)?.max || 0) * effortRatio)
const budgetTokens = Math.floor(
(findTokenLimit(model.id)?.max! - findTokenLimit(model.id)?.min!) * effortRatio + findTokenLimit(model.id)?.min!
)
// OpenRouter models
if (model.provider === 'openrouter') {
if (isSupportedReasoningEffortModel(model)) {
@ -319,10 +323,11 @@ export default class OpenAIProvider extends BaseOpenAIProvider {
// Claude models
if (isSupportedThinkingTokenClaudeModel(model)) {
const maxTokens = assistant.settings?.maxTokens
return {
thinking: {
type: 'enabled',
budget_tokens: budgetTokens
budget_tokens: Math.max(1024, Math.min(budgetTokens, (maxTokens || DEFAULT_MAX_TOKENS) * effortRatio))
}
}
}
@ -1142,8 +1147,8 @@ export default class OpenAIProvider extends BaseOpenAIProvider {
stream
}
if (this.provider.id !== 'github') {
body.enable_thinking = false; // qwen3
if (isSupportedThinkingTokenQwenModel(model)) {
body.enable_thinking = false // qwen3
}
try {