| package model_setting |
|
|
| import ( |
| "net/http" |
| "strings" |
|
|
| "github.com/QuantumNous/new-api/setting/config" |
| ) |
|
|
| |
| |
| |
| |
| |
|
|
| |
| 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) |
| } |
|
|
| |
| func GetClaudeSettings() *ClaudeSettings { |
| |
| 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"] |
| } |
|
|