claude.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package model_setting
  2. import (
  3. "net/http"
  4. "github.com/QuantumNous/new-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. // get existing values for this header key
  45. existingValues := httpHeader.Values(headerKey)
  46. existingValuesMap := make(map[string]bool)
  47. for _, v := range existingValues {
  48. existingValuesMap[v] = true
  49. }
  50. // add only values that don't already exist
  51. for _, headerValue := range headerValues {
  52. if !existingValuesMap[headerValue] {
  53. httpHeader.Add(headerKey, headerValue)
  54. }
  55. }
  56. }
  57. }
  58. }
  59. func (c *ClaudeSettings) GetDefaultMaxTokens(model string) int {
  60. if maxTokens, ok := c.DefaultMaxTokens[model]; ok {
  61. return maxTokens
  62. }
  63. return c.DefaultMaxTokens["default"]
  64. }