register.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package adaptors
  2. import (
  3. "github.com/labring/aiproxy/core/model"
  4. "github.com/labring/aiproxy/core/relay/adaptor"
  5. "github.com/labring/aiproxy/core/relay/adaptor/ai360"
  6. "github.com/labring/aiproxy/core/relay/adaptor/ali"
  7. "github.com/labring/aiproxy/core/relay/adaptor/anthropic"
  8. "github.com/labring/aiproxy/core/relay/adaptor/aws"
  9. "github.com/labring/aiproxy/core/relay/adaptor/azure"
  10. "github.com/labring/aiproxy/core/relay/adaptor/azure2"
  11. "github.com/labring/aiproxy/core/relay/adaptor/baichuan"
  12. "github.com/labring/aiproxy/core/relay/adaptor/baidu"
  13. "github.com/labring/aiproxy/core/relay/adaptor/baiduv2"
  14. "github.com/labring/aiproxy/core/relay/adaptor/cloudflare"
  15. "github.com/labring/aiproxy/core/relay/adaptor/cohere"
  16. "github.com/labring/aiproxy/core/relay/adaptor/coze"
  17. "github.com/labring/aiproxy/core/relay/adaptor/deepseek"
  18. "github.com/labring/aiproxy/core/relay/adaptor/doc2x"
  19. "github.com/labring/aiproxy/core/relay/adaptor/doubao"
  20. "github.com/labring/aiproxy/core/relay/adaptor/doubaoaudio"
  21. "github.com/labring/aiproxy/core/relay/adaptor/gemini"
  22. "github.com/labring/aiproxy/core/relay/adaptor/geminiopenai"
  23. "github.com/labring/aiproxy/core/relay/adaptor/groq"
  24. "github.com/labring/aiproxy/core/relay/adaptor/jina"
  25. "github.com/labring/aiproxy/core/relay/adaptor/lingyiwanwu"
  26. "github.com/labring/aiproxy/core/relay/adaptor/minimax"
  27. "github.com/labring/aiproxy/core/relay/adaptor/mistral"
  28. "github.com/labring/aiproxy/core/relay/adaptor/moonshot"
  29. "github.com/labring/aiproxy/core/relay/adaptor/novita"
  30. "github.com/labring/aiproxy/core/relay/adaptor/ollama"
  31. "github.com/labring/aiproxy/core/relay/adaptor/openai"
  32. "github.com/labring/aiproxy/core/relay/adaptor/openrouter"
  33. "github.com/labring/aiproxy/core/relay/adaptor/qianfan"
  34. "github.com/labring/aiproxy/core/relay/adaptor/sangforaicp"
  35. "github.com/labring/aiproxy/core/relay/adaptor/siliconflow"
  36. "github.com/labring/aiproxy/core/relay/adaptor/stepfun"
  37. "github.com/labring/aiproxy/core/relay/adaptor/streamlake"
  38. "github.com/labring/aiproxy/core/relay/adaptor/tencent"
  39. textembeddingsinference "github.com/labring/aiproxy/core/relay/adaptor/text-embeddings-inference"
  40. "github.com/labring/aiproxy/core/relay/adaptor/vertexai"
  41. "github.com/labring/aiproxy/core/relay/adaptor/xai"
  42. "github.com/labring/aiproxy/core/relay/adaptor/xunfei"
  43. "github.com/labring/aiproxy/core/relay/adaptor/zhipu"
  44. "github.com/labring/aiproxy/core/relay/adaptor/zhipucoding"
  45. log "github.com/sirupsen/logrus"
  46. )
  47. var ChannelAdaptor = map[model.ChannelType]adaptor.Adaptor{
  48. model.ChannelTypeOpenAI: &openai.Adaptor{},
  49. model.ChannelTypeAzure: &azure.Adaptor{},
  50. model.ChannelTypeAzure2: &azure2.Adaptor{},
  51. model.ChannelTypeGoogleGeminiOpenAI: &geminiopenai.Adaptor{},
  52. model.ChannelTypeBaiduV2: &baiduv2.Adaptor{},
  53. model.ChannelTypeAnthropic: &anthropic.Adaptor{},
  54. model.ChannelTypeBaidu: &baidu.Adaptor{},
  55. model.ChannelTypeZhipu: &zhipu.Adaptor{},
  56. model.ChannelTypeAli: &ali.Adaptor{},
  57. model.ChannelTypeXunfei: &xunfei.Adaptor{},
  58. model.ChannelTypeAI360: &ai360.Adaptor{},
  59. model.ChannelTypeOpenRouter: &openrouter.Adaptor{},
  60. model.ChannelTypeTencent: &tencent.Adaptor{},
  61. model.ChannelTypeGoogleGemini: &gemini.Adaptor{},
  62. model.ChannelTypeMoonshot: &moonshot.Adaptor{},
  63. model.ChannelTypeBaichuan: &baichuan.Adaptor{},
  64. model.ChannelTypeMinimax: &minimax.Adaptor{},
  65. model.ChannelTypeMistral: &mistral.Adaptor{},
  66. model.ChannelTypeGroq: &groq.Adaptor{},
  67. model.ChannelTypeOllama: &ollama.Adaptor{},
  68. model.ChannelTypeLingyiwanwu: &lingyiwanwu.Adaptor{},
  69. model.ChannelTypeStepfun: &stepfun.Adaptor{},
  70. model.ChannelTypeAWS: &aws.Adaptor{},
  71. model.ChannelTypeCoze: &coze.Adaptor{},
  72. model.ChannelTypeCohere: &cohere.Adaptor{},
  73. model.ChannelTypeDeepseek: &deepseek.Adaptor{},
  74. model.ChannelTypeCloudflare: &cloudflare.Adaptor{},
  75. model.ChannelTypeDoubao: &doubao.Adaptor{},
  76. model.ChannelTypeNovita: &novita.Adaptor{},
  77. model.ChannelTypeVertexAI: &vertexai.Adaptor{},
  78. model.ChannelTypeSiliconflow: &siliconflow.Adaptor{},
  79. model.ChannelTypeDoubaoAudio: &doubaoaudio.Adaptor{},
  80. model.ChannelTypeXAI: &xai.Adaptor{},
  81. model.ChannelTypeDoc2x: &doc2x.Adaptor{},
  82. model.ChannelTypeJina: &jina.Adaptor{},
  83. model.ChannelTypeTextEmbeddingsInference: &textembeddingsinference.Adaptor{},
  84. model.ChannelTypeQianfan: &qianfan.Adaptor{},
  85. model.ChannelTypeSangforAICP: &sangforaicp.Adaptor{},
  86. model.ChannelTypeStreamlake: &streamlake.Adaptor{},
  87. model.ChannelTypeZhipuCoding: &zhipucoding.Adaptor{},
  88. }
  89. func GetAdaptor(channelType model.ChannelType) (adaptor.Adaptor, bool) {
  90. a, ok := ChannelAdaptor[channelType]
  91. return a, ok
  92. }
  93. type AdaptorMeta struct {
  94. Name string `json:"name"`
  95. KeyHelp string `json:"keyHelp"`
  96. DefaultBaseURL string `json:"defaultBaseUrl"`
  97. Readme string `json:"readme"`
  98. ConfigTemplates map[string]adaptor.ConfigTemplate `json:"configs,omitempty"`
  99. }
  100. var ChannelMetas = map[model.ChannelType]AdaptorMeta{}
  101. func init() {
  102. for i, a := range ChannelAdaptor {
  103. adaptorMeta := a.Metadata()
  104. meta := AdaptorMeta{
  105. Name: i.String(),
  106. KeyHelp: adaptorMeta.KeyHelp,
  107. DefaultBaseURL: a.DefaultBaseURL(),
  108. Readme: adaptorMeta.Readme,
  109. ConfigTemplates: adaptorMeta.ConfigTemplates.Configs,
  110. }
  111. for key, template := range adaptorMeta.ConfigTemplates.Configs {
  112. if template.Name == "" {
  113. log.Fatalf("config template %s is invalid: name is empty", key)
  114. }
  115. }
  116. ChannelMetas[i] = meta
  117. }
  118. }
  119. var defaultKeyValidator adaptor.KeyValidator = (*KeyValidatorNoop)(nil)
  120. type KeyValidatorNoop struct{}
  121. func (a *KeyValidatorNoop) ValidateKey(_ string) error {
  122. return nil
  123. }
  124. func GetKeyValidator(a adaptor.Adaptor) adaptor.KeyValidator {
  125. if keyValidator, ok := a.(adaptor.KeyValidator); ok {
  126. return keyValidator
  127. }
  128. return defaultKeyValidator
  129. }