claude.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package model_setting
  2. import (
  3. "net/http"
  4. "one-api/setting/config"
  5. )
  6. //var claudeHeadersSettings = map[string][]string{}
  7. //
  8. //var ClaudeThinkingAdapterEnabled = true
  9. //var ClaudeThinkingAdapterMaxTokens = 8192
  10. //var ClaudeThinkingAdapterBudgetTokensPercentage = 0.8
  11. // ClaudeSettings 定义Claude模型的配置
  12. type ClaudeSettings struct {
  13. HeadersSettings map[string]map[string][]string `json:"model_headers_settings"`
  14. DefaultMaxTokens map[string]int `json:"default_max_tokens"`
  15. ThinkingAdapterEnabled bool `json:"thinking_adapter_enabled"`
  16. ThinkingAdapterBudgetTokensPercentage float64 `json:"thinking_adapter_budget_tokens_percentage"`
  17. }
  18. // 默认配置
  19. var defaultClaudeSettings = ClaudeSettings{
  20. HeadersSettings: map[string]map[string][]string{},
  21. ThinkingAdapterEnabled: true,
  22. DefaultMaxTokens: map[string]int{
  23. "default": 8192,
  24. },
  25. ThinkingAdapterBudgetTokensPercentage: 0.8,
  26. }
  27. // 全局实例
  28. var claudeSettings = defaultClaudeSettings
  29. func init() {
  30. // 注册到全局配置管理器
  31. config.GlobalConfig.Register("claude", &claudeSettings)
  32. }
  33. // GetClaudeSettings 获取Claude配置
  34. func GetClaudeSettings() *ClaudeSettings {
  35. // check default max tokens must have default key
  36. if _, ok := claudeSettings.DefaultMaxTokens["default"]; !ok {
  37. claudeSettings.DefaultMaxTokens["default"] = 8192
  38. }
  39. return &claudeSettings
  40. }
  41. func (c *ClaudeSettings) WriteHeaders(originModel string, httpHeader *http.Header) {
  42. if headers, ok := c.HeadersSettings[originModel]; ok {
  43. for headerKey, headerValues := range headers {
  44. httpHeader.Del(headerKey)
  45. for _, headerValue := range headerValues {
  46. httpHeader.Add(headerKey, headerValue)
  47. }
  48. }
  49. }
  50. }
  51. func (c *ClaudeSettings) GetDefaultMaxTokens(model string) int {
  52. if maxTokens, ok := c.DefaultMaxTokens[model]; ok {
  53. return maxTokens
  54. }
  55. return c.DefaultMaxTokens["default"]
  56. }