Compare commits
3 Commits
6b2bd13903
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9375448087 | |||
| 5be2f6f7aa | |||
| eebcadcba1 |
@@ -203,5 +203,5 @@ func (c *Config) GetAPIKey(provider string) (string, error) {
|
|||||||
if val == "" {
|
if val == "" {
|
||||||
return "", fmt.Errorf("environment variable %s not set for %s", envVar, provider)
|
return "", fmt.Errorf("environment variable %s not set for %s", envVar, provider)
|
||||||
}
|
}
|
||||||
return val, nil
|
return strings.TrimSpace(val), nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,9 +58,20 @@ func MessagesToOpenAIJSON(messages []models.UnifiedMessage) ([]interface{}, erro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var finalContent interface{}
|
||||||
|
if len(parts) == 1 {
|
||||||
|
if p, ok := parts[0].(map[string]interface{}); ok && p["type"] == "text" {
|
||||||
|
finalContent = p["text"]
|
||||||
|
} else {
|
||||||
|
finalContent = parts
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
finalContent = parts
|
||||||
|
}
|
||||||
|
|
||||||
msg := map[string]interface{}{
|
msg := map[string]interface{}{
|
||||||
"role": m.Role,
|
"role": m.Role,
|
||||||
"content": parts,
|
"content": finalContent,
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.ReasoningContent != nil {
|
if m.ReasoningContent != nil {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ func NewMoonshotProvider(cfg config.MoonshotConfig, apiKey string) *MoonshotProv
|
|||||||
return &MoonshotProvider{
|
return &MoonshotProvider{
|
||||||
client: resty.New(),
|
client: resty.New(),
|
||||||
config: cfg,
|
config: cfg,
|
||||||
apiKey: apiKey,
|
apiKey: strings.TrimSpace(apiKey),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,11 +43,15 @@ func (p *MoonshotProvider) ChatCompletion(ctx context.Context, req *models.Unifi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
baseURL := strings.TrimRight(p.config.BaseURL, "/")
|
||||||
|
|
||||||
resp, err := p.client.R().
|
resp, err := p.client.R().
|
||||||
SetContext(ctx).
|
SetContext(ctx).
|
||||||
SetHeader("Authorization", "Bearer "+p.apiKey).
|
SetHeader("Authorization", "Bearer "+p.apiKey).
|
||||||
|
SetHeader("Content-Type", "application/json").
|
||||||
|
SetHeader("Accept", "application/json").
|
||||||
SetBody(body).
|
SetBody(body).
|
||||||
Post(fmt.Sprintf("%s/chat/completions", p.config.BaseURL))
|
Post(fmt.Sprintf("%s/chat/completions", baseURL))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("request failed: %w", err)
|
return nil, fmt.Errorf("request failed: %w", err)
|
||||||
@@ -79,12 +83,16 @@ func (p *MoonshotProvider) ChatCompletionStream(ctx context.Context, req *models
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
baseURL := strings.TrimRight(p.config.BaseURL, "/")
|
||||||
|
|
||||||
resp, err := p.client.R().
|
resp, err := p.client.R().
|
||||||
SetContext(ctx).
|
SetContext(ctx).
|
||||||
SetHeader("Authorization", "Bearer "+p.apiKey).
|
SetHeader("Authorization", "Bearer "+p.apiKey).
|
||||||
|
SetHeader("Content-Type", "application/json").
|
||||||
|
SetHeader("Accept", "text/event-stream").
|
||||||
SetBody(body).
|
SetBody(body).
|
||||||
SetDoNotParseResponse(true).
|
SetDoNotParseResponse(true).
|
||||||
Post(fmt.Sprintf("%s/chat/completions", p.config.BaseURL))
|
Post(fmt.Sprintf("%s/chat/completions", baseURL))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("request failed: %w", err)
|
return nil, fmt.Errorf("request failed: %w", err)
|
||||||
|
|||||||
@@ -801,7 +801,7 @@ func (s *Server) handleGetProviders(c *gin.Context) {
|
|||||||
dbMap[cfg.ID] = cfg
|
dbMap[cfg.ID] = cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
providerIDs := []string{"openai", "gemini", "deepseek", "grok", "ollama"}
|
providerIDs := []string{"openai", "gemini", "deepseek", "moonshot", "grok", "ollama"}
|
||||||
var result []gin.H
|
var result []gin.H
|
||||||
|
|
||||||
for _, id := range providerIDs {
|
for _, id := range providerIDs {
|
||||||
@@ -822,6 +822,10 @@ func (s *Server) handleGetProviders(c *gin.Context) {
|
|||||||
name = "DeepSeek"
|
name = "DeepSeek"
|
||||||
enabled = s.cfg.Providers.DeepSeek.Enabled
|
enabled = s.cfg.Providers.DeepSeek.Enabled
|
||||||
baseURL = s.cfg.Providers.DeepSeek.BaseURL
|
baseURL = s.cfg.Providers.DeepSeek.BaseURL
|
||||||
|
case "moonshot":
|
||||||
|
name = "Moonshot"
|
||||||
|
enabled = s.cfg.Providers.Moonshot.Enabled
|
||||||
|
baseURL = s.cfg.Providers.Moonshot.BaseURL
|
||||||
case "grok":
|
case "grok":
|
||||||
name = "xAI Grok"
|
name = "xAI Grok"
|
||||||
enabled = s.cfg.Providers.Grok.Enabled
|
enabled = s.cfg.Providers.Grok.Enabled
|
||||||
@@ -870,6 +874,7 @@ func (s *Server) handleGetProviders(c *gin.Context) {
|
|||||||
if s.registry != nil {
|
if s.registry != nil {
|
||||||
registryID := id
|
registryID := id
|
||||||
if id == "gemini" { registryID = "google" }
|
if id == "gemini" { registryID = "google" }
|
||||||
|
if id == "moonshot" { registryID = "moonshot" }
|
||||||
if id == "grok" { registryID = "xai" }
|
if id == "grok" { registryID = "xai" }
|
||||||
|
|
||||||
if pInfo, ok := s.registry.Providers[registryID]; ok {
|
if pInfo, ok := s.registry.Providers[registryID]; ok {
|
||||||
@@ -978,6 +983,8 @@ func (s *Server) handleTestProvider(c *gin.Context) {
|
|||||||
testReq.Model = "gemini-2.0-flash"
|
testReq.Model = "gemini-2.0-flash"
|
||||||
} else if name == "deepseek" {
|
} else if name == "deepseek" {
|
||||||
testReq.Model = "deepseek-chat"
|
testReq.Model = "deepseek-chat"
|
||||||
|
} else if name == "moonshot" {
|
||||||
|
testReq.Model = "kimi-k2.5"
|
||||||
} else if name == "grok" {
|
} else if name == "grok" {
|
||||||
testReq.Model = "grok-4-1-fast-non-reasoning"
|
testReq.Model = "grok-4-1-fast-non-reasoning"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ func (s *Server) RefreshProviders() error {
|
|||||||
dbMap[cfg.ID] = cfg
|
dbMap[cfg.ID] = cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
providerIDs := []string{"openai", "gemini", "deepseek", "grok", "moonshot"}
|
providerIDs := []string{"openai", "gemini", "deepseek", "moonshot", "grok"}
|
||||||
for _, id := range providerIDs {
|
for _, id := range providerIDs {
|
||||||
// Default values from config
|
// Default values from config
|
||||||
enabled := false
|
enabled := false
|
||||||
@@ -95,14 +95,14 @@ func (s *Server) RefreshProviders() error {
|
|||||||
enabled = s.cfg.Providers.DeepSeek.Enabled
|
enabled = s.cfg.Providers.DeepSeek.Enabled
|
||||||
baseURL = s.cfg.Providers.DeepSeek.BaseURL
|
baseURL = s.cfg.Providers.DeepSeek.BaseURL
|
||||||
apiKey, _ = s.cfg.GetAPIKey("deepseek")
|
apiKey, _ = s.cfg.GetAPIKey("deepseek")
|
||||||
case "grok":
|
|
||||||
enabled = s.cfg.Providers.Grok.Enabled
|
|
||||||
baseURL = s.cfg.Providers.Grok.BaseURL
|
|
||||||
apiKey, _ = s.cfg.GetAPIKey("grok")
|
|
||||||
case "moonshot":
|
case "moonshot":
|
||||||
enabled = s.cfg.Providers.Moonshot.Enabled
|
enabled = s.cfg.Providers.Moonshot.Enabled
|
||||||
baseURL = s.cfg.Providers.Moonshot.BaseURL
|
baseURL = s.cfg.Providers.Moonshot.BaseURL
|
||||||
apiKey, _ = s.cfg.GetAPIKey("moonshot")
|
apiKey, _ = s.cfg.GetAPIKey("moonshot")
|
||||||
|
case "grok":
|
||||||
|
enabled = s.cfg.Providers.Grok.Enabled
|
||||||
|
baseURL = s.cfg.Providers.Grok.BaseURL
|
||||||
|
apiKey, _ = s.cfg.GetAPIKey("grok")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overrides from DB
|
// Overrides from DB
|
||||||
@@ -144,14 +144,14 @@ func (s *Server) RefreshProviders() error {
|
|||||||
cfg := s.cfg.Providers.DeepSeek
|
cfg := s.cfg.Providers.DeepSeek
|
||||||
cfg.BaseURL = baseURL
|
cfg.BaseURL = baseURL
|
||||||
s.providers["deepseek"] = providers.NewDeepSeekProvider(cfg, apiKey)
|
s.providers["deepseek"] = providers.NewDeepSeekProvider(cfg, apiKey)
|
||||||
case "grok":
|
|
||||||
cfg := s.cfg.Providers.Grok
|
|
||||||
cfg.BaseURL = baseURL
|
|
||||||
s.providers["grok"] = providers.NewGrokProvider(cfg, apiKey)
|
|
||||||
case "moonshot":
|
case "moonshot":
|
||||||
cfg := s.cfg.Providers.Moonshot
|
cfg := s.cfg.Providers.Moonshot
|
||||||
cfg.BaseURL = baseURL
|
cfg.BaseURL = baseURL
|
||||||
s.providers["moonshot"] = providers.NewMoonshotProvider(cfg, apiKey)
|
s.providers["moonshot"] = providers.NewMoonshotProvider(cfg, apiKey)
|
||||||
|
case "grok":
|
||||||
|
cfg := s.cfg.Providers.Grok
|
||||||
|
cfg.BaseURL = baseURL
|
||||||
|
s.providers["grok"] = providers.NewGrokProvider(cfg, apiKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user