Add Xiaomi MiMo provider (mimo-v2.5) support
This commit is contained in:
@@ -19,6 +19,7 @@ func (s *Server) handleGetModels(c *gin.Context) {
|
||||
"deepseek": "deepseek",
|
||||
"xai": "grok",
|
||||
"ollama": "ollama",
|
||||
"xiaomi": "xiaomi",
|
||||
}
|
||||
|
||||
// Merge registry models with DB overrides
|
||||
|
||||
@@ -25,7 +25,7 @@ func (s *Server) handleGetProviders(c *gin.Context) {
|
||||
dbMap[cfg.ID] = cfg
|
||||
}
|
||||
|
||||
providerIDs := []string{"openai", "gemini", "deepseek", "moonshot", "grok", "ollama"}
|
||||
providerIDs := []string{"openai", "gemini", "deepseek", "moonshot", "grok", "ollama", "xiaomi"}
|
||||
var result []gin.H
|
||||
|
||||
for _, id := range providerIDs {
|
||||
@@ -54,6 +54,10 @@ func (s *Server) handleGetProviders(c *gin.Context) {
|
||||
name = "xAI Grok"
|
||||
enabled = s.cfg.Providers.Grok.Enabled
|
||||
baseURL = s.cfg.Providers.Grok.BaseURL
|
||||
case "xiaomi":
|
||||
name = "Xiaomi MiMo"
|
||||
enabled = s.cfg.Providers.Xiaomi.Enabled
|
||||
baseURL = s.cfg.Providers.Xiaomi.BaseURL
|
||||
case "ollama":
|
||||
name = "Ollama"
|
||||
enabled = s.cfg.Providers.Ollama.Enabled
|
||||
@@ -109,6 +113,9 @@ func (s *Server) handleGetProviders(c *gin.Context) {
|
||||
if id == "grok" {
|
||||
registryID = "xai"
|
||||
}
|
||||
if id == "xiaomi" {
|
||||
registryID = "xiaomi"
|
||||
}
|
||||
|
||||
if pInfo, ok := s.registry.Providers[registryID]; ok {
|
||||
for mID := range pInfo.Models {
|
||||
@@ -226,6 +233,8 @@ func (s *Server) handleTestProvider(c *gin.Context) {
|
||||
testReq.Model = "kimi-k2.5"
|
||||
} else if name == "grok" {
|
||||
testReq.Model = "grok-4-1-fast-non-reasoning"
|
||||
} else if name == "xiaomi" {
|
||||
testReq.Model = "mimo-v2.5"
|
||||
}
|
||||
|
||||
_, err := provider.ChatCompletion(c.Request.Context(), testReq)
|
||||
|
||||
@@ -85,7 +85,7 @@ func (s *Server) RefreshProviders() error {
|
||||
dbMap[cfg.ID] = cfg
|
||||
}
|
||||
|
||||
providerIDs := []string{"openai", "gemini", "deepseek", "moonshot", "grok", "ollama"}
|
||||
providerIDs := []string{"openai", "gemini", "deepseek", "moonshot", "grok", "ollama", "xiaomi"}
|
||||
for _, id := range providerIDs {
|
||||
// Default values from config
|
||||
enabled := false
|
||||
@@ -113,6 +113,10 @@ func (s *Server) RefreshProviders() error {
|
||||
enabled = s.cfg.Providers.Grok.Enabled
|
||||
baseURL = s.cfg.Providers.Grok.BaseURL
|
||||
apiKey, _ = s.cfg.GetAPIKey("grok")
|
||||
case "xiaomi":
|
||||
enabled = s.cfg.Providers.Xiaomi.Enabled
|
||||
baseURL = s.cfg.Providers.Xiaomi.BaseURL
|
||||
apiKey, _ = s.cfg.GetAPIKey("xiaomi")
|
||||
}
|
||||
|
||||
// Overrides from DB
|
||||
@@ -167,6 +171,10 @@ func (s *Server) RefreshProviders() error {
|
||||
cfg := s.cfg.Providers.Ollama
|
||||
cfg.BaseURL = baseURL
|
||||
p = providers.NewOllamaProvider(cfg)
|
||||
case "xiaomi":
|
||||
cfg := s.cfg.Providers.Xiaomi
|
||||
cfg.BaseURL = baseURL
|
||||
p = providers.NewXiaomiProvider(cfg, apiKey)
|
||||
}
|
||||
|
||||
if p != nil {
|
||||
@@ -313,7 +321,7 @@ func (s *Server) handleResponses(c *gin.Context) {
|
||||
// (same pattern as handleChatCompletions).
|
||||
modelGroup := ""
|
||||
modelID := req.Model
|
||||
prefixes := []string{"gemini/", "google/", "openai/", "deepseek/", "moonshot/", "grok/", "ollama/"}
|
||||
prefixes := []string{"gemini/", "google/", "openai/", "deepseek/", "moonshot/", "grok/", "ollama/", "xiaomi/"}
|
||||
for _, p := range prefixes {
|
||||
if strings.HasPrefix(modelID, p) {
|
||||
modelID = strings.TrimPrefix(modelID, p)
|
||||
@@ -446,6 +454,7 @@ func (s *Server) handleListModels(c *gin.Context) {
|
||||
"xai": true, // Models from models.dev use 'xai' ID for Grok
|
||||
"llmgateway": true, // Catch-all for newer models
|
||||
"ollama": true,
|
||||
"xiaomi": true, // Xiaomi MiMo models
|
||||
}
|
||||
|
||||
s.registryMu.RLock()
|
||||
@@ -529,6 +538,8 @@ func (s *Server) selectProvider(modelID string) (providers.Provider, string, err
|
||||
strings.Contains(modelLower, "codellama") ||
|
||||
strings.Contains(modelLower, "command-r") {
|
||||
providerName = "ollama"
|
||||
} else if strings.HasPrefix(modelLower, "xiaomi/") || strings.Contains(modelLower, "mimo") || strings.Contains(modelLower, "xiaomi") {
|
||||
providerName = "xiaomi"
|
||||
}
|
||||
|
||||
p, ok := s.providers[providerName]
|
||||
@@ -548,7 +559,7 @@ func (s *Server) handleChatCompletions(c *gin.Context) {
|
||||
|
||||
// Strip common prefixes and prepare model ID
|
||||
modelID := req.Model
|
||||
prefixes := []string{"gemini/", "google/", "openai/", "deepseek/", "moonshot/", "grok/", "ollama/"}
|
||||
prefixes := []string{"gemini/", "google/", "openai/", "deepseek/", "moonshot/", "grok/", "ollama/", "xiaomi/"}
|
||||
for _, p := range prefixes {
|
||||
if strings.HasPrefix(modelID, p) {
|
||||
modelID = strings.TrimPrefix(modelID, p)
|
||||
|
||||
Reference in New Issue
Block a user