package model_setting import ( "net/http" "strings" "github.com/QuantumNous/new-api/setting/config" ) //var claudeHeadersSettings = map[string][]string{} // //var ClaudeThinkingAdapterEnabled = true //var ClaudeThinkingAdapterMaxTokens = 8192 //var ClaudeThinkingAdapterBudgetTokensPercentage = 0.8 // ClaudeSettings 定义Claude模型的配置 type ClaudeSettings struct { HeadersSettings map[string]map[string][]string `json:"model_headers_settings"` DefaultMaxTokens map[string]int `json:"default_max_tokens"` ThinkingAdapterEnabled bool `json:"thinking_adapter_enabled"` ThinkingAdapterBudgetTokensPercentage float64 `json:"thinking_adapter_budget_tokens_percentage"` } // 默认配置 var defaultClaudeSettings = ClaudeSettings{ HeadersSettings: map[string]map[string][]string{}, ThinkingAdapterEnabled: true, DefaultMaxTokens: map[string]int{ "default": 8192, }, ThinkingAdapterBudgetTokensPercentage: 0.8, } // 全局实例 var claudeSettings = defaultClaudeSettings func init() { // 注册到全局配置管理器 config.GlobalConfig.Register("claude", &claudeSettings) } // GetClaudeSettings 获取Claude配置 func GetClaudeSettings() *ClaudeSettings { // check default max tokens must have default key if _, ok := claudeSettings.DefaultMaxTokens["default"]; !ok { claudeSettings.DefaultMaxTokens["default"] = 8192 } return &claudeSettings } func (c *ClaudeSettings) WriteHeaders(originModel string, httpHeader *http.Header) { if headers, ok := c.HeadersSettings[originModel]; ok { for headerKey, headerValues := range headers { mergedValues := normalizeHeaderListValues( append(append([]string(nil), httpHeader.Values(headerKey)...), headerValues...), ) if len(mergedValues) == 0 { continue } httpHeader.Set(headerKey, strings.Join(mergedValues, ",")) } } } func normalizeHeaderListValues(values []string) []string { normalizedValues := make([]string, 0, len(values)) seenValues := make(map[string]struct{}, len(values)) for _, value := range values { for _, item := range strings.Split(value, ",") { normalizedItem := strings.TrimSpace(item) if normalizedItem == "" { continue } if _, exists := seenValues[normalizedItem]; exists { continue } seenValues[normalizedItem] = struct{}{} normalizedValues = append(normalizedValues, normalizedItem) } } return normalizedValues } func (c *ClaudeSettings) GetDefaultMaxTokens(model string) int { if maxTokens, ok := c.DefaultMaxTokens[model]; ok { return maxTokens } return c.DefaultMaxTokens["default"] }