|
|
package model_setting |
|
|
|
|
|
import ( |
|
|
"net/http" |
|
|
|
|
|
"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 { |
|
|
|
|
|
existingValues := httpHeader.Values(headerKey) |
|
|
existingValuesMap := make(map[string]bool) |
|
|
for _, v := range existingValues { |
|
|
existingValuesMap[v] = true |
|
|
} |
|
|
|
|
|
|
|
|
for _, headerValue := range headerValues { |
|
|
if !existingValuesMap[headerValue] { |
|
|
httpHeader.Add(headerKey, headerValue) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
func (c *ClaudeSettings) GetDefaultMaxTokens(model string) int { |
|
|
if maxTokens, ok := c.DefaultMaxTokens[model]; ok { |
|
|
return maxTokens |
|
|
} |
|
|
return c.DefaultMaxTokens["default"] |
|
|
} |
|
|
|