chore: import Local-Cursor v1.1.8 source snapshot
Includes the current working directory changes. Historical commits and release binaries are excluded to limit Gitea storage. Source base: d7515973fbfd6dd2001fa156c483455b8081c7cb
This commit is contained in:
58
internal/backend/agent/model/provider_limits.go
Normal file
58
internal/backend/agent/model/provider_limits.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package modeladapter
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func maxAnthropicTokens(req StreamRequest) int {
|
||||
if req.AnthropicMaxTokens > 0 {
|
||||
return req.AnthropicMaxTokens
|
||||
}
|
||||
if req.MaxTokens > 0 {
|
||||
return req.MaxTokens
|
||||
}
|
||||
return 65536
|
||||
}
|
||||
|
||||
// anthropicOutputLimitPattern 匹配 one-api/new-api 风格网关在 max_tokens 超限时的 400 错误:
|
||||
// "Requested token count exceeds the configured maximum output length of 131072 tokens."
|
||||
var anthropicOutputLimitPattern = regexp.MustCompile(`exceeds the configured maximum output length of (\d+) tokens`)
|
||||
|
||||
// anthropicOutputLimitFromError 从网关错误文本中提取其声明的最大输出上限;不匹配或解析失败返回 0。
|
||||
func anthropicOutputLimitFromError(err error) int {
|
||||
if err == nil {
|
||||
return 0
|
||||
}
|
||||
matches := anthropicOutputLimitPattern.FindStringSubmatch(err.Error())
|
||||
if len(matches) < 2 {
|
||||
return 0
|
||||
}
|
||||
limit, parseErr := strconv.Atoi(matches[1])
|
||||
if parseErr != nil || limit <= 0 {
|
||||
return 0
|
||||
}
|
||||
return limit
|
||||
}
|
||||
|
||||
// anthropicBodyMaxTokens 读取既有请求体中实际发送的 max_tokens;
|
||||
// 常规构造为 int,RequestBodyOverride 反序列化产物为 float64,两者都兼容。
|
||||
func anthropicBodyMaxTokens(body map[string]any) int {
|
||||
switch value := body["max_tokens"].(type) {
|
||||
case int:
|
||||
return value
|
||||
case int64:
|
||||
return int(value)
|
||||
case float64:
|
||||
return int(value)
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
func maxThinkingBudget(req StreamRequest) int {
|
||||
if req.ThinkingBudgetTokens > 0 {
|
||||
return req.ThinkingBudgetTokens
|
||||
}
|
||||
return anthropicThinkingBudget(maxAnthropicTokens(req))
|
||||
}
|
||||
Reference in New Issue
Block a user