Add Xiaomi MiMo provider (mimo-v2.5) support
CI / Lint (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled

This commit is contained in:
newkirk
2026-05-29 12:19:24 -04:00
parent 1dc5f586b9
commit b3354a1bbc
7 changed files with 177 additions and 4 deletions
+14 -3
View File
@@ -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)