chore: update

Carlos Alexandro Becker created

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Change summary

cmd/aihubmix/main.go                     |  62 -
internal/providers/configs/aihubmix.json | 873 +++++++++++++++++++++++++
2 files changed, 870 insertions(+), 65 deletions(-)

Detailed changes

cmd/aihubmix/main.go 🔗

@@ -37,6 +37,13 @@ type Pricing struct {
 	CacheWrite *float64 `json:"cache_write"`
 }
 
+const (
+	minContextWindow  = 20000
+	defaultLargeModel = "gpt-5"
+	defaultSmallModel = "gpt-5-nano"
+	maxTokensFactor   = 10
+)
+
 // ModelsResponse is the response structure for the models API.
 type ModelsResponse struct {
 	Data    []APIModel `json:"data"`
@@ -69,24 +76,12 @@ func fetchAIHubMixModels() (*ModelsResponse, error) {
 	return &mr, nil
 }
 
-func hasFeature(features, feature string) bool {
-	if features == "" {
-		return false
-	}
-	for f := range strings.SplitSeq(features, ",") {
-		if strings.TrimSpace(f) == feature {
-			return true
-		}
-	}
-	return false
-}
-
-func hasModality(modalities, modality string) bool {
-	if modalities == "" {
+func hasField(s, field string) bool {
+	if s == "" {
 		return false
 	}
-	for m := range strings.SplitSeq(modalities, ",") {
-		if strings.TrimSpace(m) == modality {
+	for item := range strings.SplitSeq(s, ",") {
+		if strings.TrimSpace(item) == field {
 			return true
 		}
 	}
@@ -95,7 +90,7 @@ func hasModality(modalities, modality string) bool {
 
 func parseFloat(p *float64) float64 {
 	if p == nil {
-		return 0.0
+		return 0
 	}
 	return *p
 }
@@ -112,32 +107,25 @@ func main() {
 		APIKey:              "$AIHUBMIX_API_KEY",
 		APIEndpoint:         "https://aihubmix.com/v1",
 		Type:                catwalk.TypeOpenAICompat,
-		DefaultLargeModelID: "gpt-5",
-		DefaultSmallModelID: "gpt-5-nano",
-		Models:              []catwalk.Model{},
+		DefaultLargeModelID: defaultLargeModel,
+		DefaultSmallModelID: defaultSmallModel,
 		DefaultHeaders: map[string]string{
 			"APP-Code": "IUFF7106",
 		},
 	}
 
 	for _, model := range modelsResp.Data {
-		// Skip models with context window < 20000
-		if model.ContextLength < 20000 {
+		if model.ContextLength < minContextWindow {
 			continue
 		}
 
-		// Check for text I/O support
-		if !hasModality(model.InputModalities, "text") {
+		if !hasField(model.InputModalities, "text") {
 			continue
 		}
 
-		// Check reasoning capability
-		canReason := hasFeature(model.Features, "thinking")
-
-		// Check image support
-		supportsImages := hasModality(model.InputModalities, "image")
+		canReason := hasField(model.Features, "thinking")
+		supportsImages := hasField(model.InputModalities, "image")
 
-		// Parse reasoning levels
 		var reasoningLevels []string
 		var defaultReasoning string
 		if canReason {
@@ -145,13 +133,12 @@ func main() {
 			defaultReasoning = "medium"
 		}
 
-		// Calculate default max tokens
-		defaultMaxTokens := model.MaxOutput
-		if defaultMaxTokens == 0 || defaultMaxTokens > model.ContextLength/2 {
-			defaultMaxTokens = model.ContextLength / 10
+		maxTokens := model.MaxOutput
+		if maxTokens == 0 || maxTokens > model.ContextLength/2 {
+			maxTokens = model.ContextLength / maxTokensFactor
 		}
 
-		catwalkModel := catwalk.Model{
+		aiHubMixProvider.Models = append(aiHubMixProvider.Models, catwalk.Model{
 			ID:                     model.ModelID,
 			Name:                   model.ModelID,
 			CostPer1MIn:            parseFloat(model.Pricing.Input),
@@ -159,14 +146,13 @@ func main() {
 			CostPer1MInCached:      parseFloat(model.Pricing.CacheWrite),
 			CostPer1MOutCached:     parseFloat(model.Pricing.CacheRead),
 			ContextWindow:          model.ContextLength,
-			DefaultMaxTokens:       defaultMaxTokens,
+			DefaultMaxTokens:       maxTokens,
 			CanReason:              canReason,
 			ReasoningLevels:        reasoningLevels,
 			DefaultReasoningEffort: defaultReasoning,
 			SupportsImages:         supportsImages,
-		}
+		})
 
-		aiHubMixProvider.Models = append(aiHubMixProvider.Models, catwalkModel)
 		fmt.Printf("Added model %s with context window %d\n",
 			model.ModelID, model.ContextLength)
 	}

internal/providers/configs/aihubmix.json 🔗

@@ -52,6 +52,19 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "DeepSeek-OCR",
+      "name": "DeepSeek-OCR",
+      "cost_per_1m_in": 0.02,
+      "cost_per_1m_out": 0.02,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 8000,
+      "default_max_tokens": 800,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
     {
       "id": "DeepSeek-R1",
       "name": "DeepSeek-R1",
@@ -200,6 +213,58 @@
       "supports_attachments": false,
       "options": {}
     },
+    {
+      "id": "Qwen/Qwen2.5-VL-32B-Instruct",
+      "name": "Qwen/Qwen2.5-VL-32B-Instruct",
+      "cost_per_1m_in": 0.24,
+      "cost_per_1m_out": 0.24,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "Qwen/Qwen2.5-VL-72B-Instruct",
+      "name": "Qwen/Qwen2.5-VL-72B-Instruct",
+      "cost_per_1m_in": 0.5,
+      "cost_per_1m_out": 0.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "ahm-Phi-3-5-vision-instruct",
+      "name": "ahm-Phi-3-5-vision-instruct",
+      "cost_per_1m_in": 0.4,
+      "cost_per_1m_out": 1.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "aihub-Phi-4",
+      "name": "aihub-Phi-4",
+      "cost_per_1m_in": 0.12,
+      "cost_per_1m_out": 0.48,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 16400,
+      "default_max_tokens": 1640,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
     {
       "id": "aihub-Phi-4-mini-instruct",
       "name": "aihub-Phi-4-mini-instruct",
@@ -226,6 +291,214 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "aihubmix-Cohere-command-r",
+      "name": "aihubmix-Cohere-command-r",
+      "cost_per_1m_in": 0.64,
+      "cost_per_1m_out": 1.92,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "aihubmix-command-r-08-2024",
+      "name": "aihubmix-command-r-08-2024",
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 0.8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "aihubmix-command-r-plus",
+      "name": "aihubmix-command-r-plus",
+      "cost_per_1m_in": 3.84,
+      "cost_per_1m_out": 19.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "aihubmix-command-r-plus-08-2024",
+      "name": "aihubmix-command-r-plus-08-2024",
+      "cost_per_1m_in": 2.8,
+      "cost_per_1m_out": 11.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "aihubmix-router",
+      "name": "aihubmix-router",
+      "cost_per_1m_in": 0.4,
+      "cost_per_1m_out": 1.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.1,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "baidu-deepseek-v3.2",
+      "name": "baidu-deepseek-v3.2",
+      "cost_per_1m_in": 0.274,
+      "cost_per_1m_out": 0.411,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "baidu-deepseek-v3.2-exp",
+      "name": "baidu-deepseek-v3.2-exp",
+      "cost_per_1m_in": 0.274,
+      "cost_per_1m_out": 0.411,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.0274,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "baidu/ERNIE-4.5-300B-A47B",
+      "name": "baidu/ERNIE-4.5-300B-A47B",
+      "cost_per_1m_in": 0.32,
+      "cost_per_1m_out": 1.28,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "cc-MiniMax-M2",
+      "name": "cc-MiniMax-M2",
+      "cost_per_1m_in": 0.1,
+      "cost_per_1m_out": 0.1,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "cc-deepseek-v3.1",
+      "name": "cc-deepseek-v3.1",
+      "cost_per_1m_in": 0.56,
+      "cost_per_1m_out": 1.68,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "cc-ernie-4.5-300b-a47b",
+      "name": "cc-ernie-4.5-300b-a47b",
+      "cost_per_1m_in": 0.32,
+      "cost_per_1m_out": 1.28,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "cc-kimi-k2-instruct",
+      "name": "cc-kimi-k2-instruct",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 3.3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "cc-kimi-k2-instruct-0905",
+      "name": "cc-kimi-k2-instruct-0905",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 3.3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "cc-minimax-m2",
+      "name": "cc-minimax-m2",
+      "cost_per_1m_in": 0.1,
+      "cost_per_1m_out": 0.1,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "cc-minimax-m2.1",
+      "name": "cc-minimax-m2.1",
+      "cost_per_1m_in": 0.1,
+      "cost_per_1m_out": 0.1,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "chatgpt-4o-latest",
+      "name": "chatgpt-4o-latest",
+      "cost_per_1m_in": 5,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
     {
       "id": "claude-3-5-haiku",
       "name": "claude-3-5-haiku",
@@ -284,6 +557,58 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "claude-3-haiku-20240229",
+      "name": "claude-3-haiku-20240229",
+      "cost_per_1m_in": 0.275,
+      "cost_per_1m_out": 0.275,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "claude-3-haiku-20240307",
+      "name": "claude-3-haiku-20240307",
+      "cost_per_1m_in": 0.275,
+      "cost_per_1m_out": 1.375,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "claude-3-haiku@20240307",
+      "name": "claude-3-haiku@20240307",
+      "cost_per_1m_in": 0.275,
+      "cost_per_1m_out": 1.375,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "claude-3-sonnet-20240229",
+      "name": "claude-3-sonnet-20240229",
+      "cost_per_1m_in": 3.3,
+      "cost_per_1m_out": 16.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
     {
       "id": "claude-haiku-4-5",
       "name": "claude-haiku-4-5",
@@ -430,6 +755,38 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "codex-mini-latest",
+      "name": "codex-mini-latest",
+      "cost_per_1m_in": 1.5,
+      "cost_per_1m_out": 6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.375,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "coding-glm-4.6",
+      "name": "coding-glm-4.6",
+      "cost_per_1m_in": 0.06,
+      "cost_per_1m_out": 0.22,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.010998,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
+    },
     {
       "id": "coding-glm-4.6-free",
       "name": "coding-glm-4.6-free",
@@ -449,6 +806,44 @@
       "supports_attachments": false,
       "options": {}
     },
+    {
+      "id": "coding-glm-4.7",
+      "name": "coding-glm-4.7",
+      "cost_per_1m_in": 0.06,
+      "cost_per_1m_out": 0.22,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.010998,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "coding-glm-4.7-free",
+      "name": "coding-glm-4.7-free",
+      "cost_per_1m_in": 0,
+      "cost_per_1m_out": 0,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
+    },
     {
       "id": "coding-minimax-m2",
       "name": "coding-minimax-m2",
@@ -506,6 +901,84 @@
       "supports_attachments": false,
       "options": {}
     },
+    {
+      "id": "command",
+      "name": "command",
+      "cost_per_1m_in": 1,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "command-a-03-2025",
+      "name": "command-a-03-2025",
+      "cost_per_1m_in": 2.5,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "command-r",
+      "name": "command-r",
+      "cost_per_1m_in": 0.64,
+      "cost_per_1m_out": 1.92,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "command-r-08-2024",
+      "name": "command-r-08-2024",
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 0.8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "command-r-plus",
+      "name": "command-r-plus",
+      "cost_per_1m_in": 3.84,
+      "cost_per_1m_out": 19.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "command-r-plus-08-2024",
+      "name": "command-r-plus-08-2024",
+      "cost_per_1m_in": 2.8,
+      "cost_per_1m_out": 11.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
     {
       "id": "deepseek-math-v2",
       "name": "deepseek-math-v2",
@@ -525,6 +998,25 @@
       "supports_attachments": false,
       "options": {}
     },
+    {
+      "id": "deepseek-r1-distill-llama-70b",
+      "name": "deepseek-r1-distill-llama-70b",
+      "cost_per_1m_in": 0.8,
+      "cost_per_1m_out": 1.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
+    },
     {
       "id": "deepseek-v3.2",
       "name": "deepseek-v3.2",
@@ -667,6 +1159,32 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "ernie-4.5-0.3b",
+      "name": "ernie-4.5-0.3b",
+      "cost_per_1m_in": 0.0136,
+      "cost_per_1m_out": 0.0544,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "ernie-4.5-turbo-128k-preview",
+      "name": "ernie-4.5-turbo-128k-preview",
+      "cost_per_1m_in": 0.108,
+      "cost_per_1m_out": 0.432,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
     {
       "id": "ernie-4.5-turbo-latest",
       "name": "ernie-4.5-turbo-latest",
@@ -763,6 +1281,32 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "gemini-2.0-flash-exp",
+      "name": "gemini-2.0-flash-exp",
+      "cost_per_1m_in": 0.02,
+      "cost_per_1m_out": 0.08,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.0-flash-exp-search",
+      "name": "gemini-2.0-flash-exp-search",
+      "cost_per_1m_in": 0.1,
+      "cost_per_1m_out": 0.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
     {
       "id": "gemini-2.0-flash-free",
       "name": "gemini-2.0-flash-free",
@@ -776,6 +1320,77 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "gemini-2.0-flash-lite",
+      "name": "gemini-2.0-flash-lite",
+      "cost_per_1m_in": 0.076,
+      "cost_per_1m_out": 0.304,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.076,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.0-flash-preview-image-generation",
+      "name": "gemini-2.0-flash-preview-image-generation",
+      "cost_per_1m_in": 0.1,
+      "cost_per_1m_out": 0.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.0-flash-search",
+      "name": "gemini-2.0-flash-search",
+      "cost_per_1m_in": 0.1,
+      "cost_per_1m_out": 0.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.025,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.0-flash-thinking-exp-01-21",
+      "name": "gemini-2.0-flash-thinking-exp-01-21",
+      "cost_per_1m_in": 0.076,
+      "cost_per_1m_out": 0.304,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.0-pro-exp-02-05",
+      "name": "gemini-2.0-pro-exp-02-05",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
     {
       "id": "gemini-2.5-flash",
       "name": "gemini-2.5-flash",
@@ -899,13 +1514,159 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "gemini-2.5-pro-exp-03-25",
+      "name": "gemini-2.5-pro-exp-03-25",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.5-pro-preview-03-25",
+      "name": "gemini-2.5-pro-preview-03-25",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.5-pro-preview-03-25-search",
+      "name": "gemini-2.5-pro-preview-03-25-search",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
+    },
     {
       "id": "gemini-2.5-pro-preview-05-06",
       "name": "gemini-2.5-pro-preview-05-06",
       "cost_per_1m_in": 1.25,
       "cost_per_1m_out": 10,
       "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0.125,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 1048576,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.5-pro-preview-05-06-search",
+      "name": "gemini-2.5-pro-preview-05-06-search",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.5-pro-preview-06-05",
+      "name": "gemini-2.5-pro-preview-06-05",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 1048576,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.5-pro-preview-06-05-search",
+      "name": "gemini-2.5-pro-preview-06-05-search",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-2.5-pro-search",
+      "name": "gemini-2.5-pro-search",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 1048576,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gemini-3-flash-preview",
+      "name": "gemini-3-flash-preview",
+      "cost_per_1m_in": 0.5,
+      "cost_per_1m_out": 3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.05,
       "context_window": 1048576,
       "default_max_tokens": 65536,
       "can_reason": true,
@@ -919,12 +1680,12 @@
       "options": {}
     },
     {
-      "id": "gemini-2.5-pro-preview-06-05",
-      "name": "gemini-2.5-pro-preview-06-05",
-      "cost_per_1m_in": 1.25,
-      "cost_per_1m_out": 10,
+      "id": "gemini-3-flash-preview-free",
+      "name": "gemini-3-flash-preview-free",
+      "cost_per_1m_in": 0,
+      "cost_per_1m_out": 0,
       "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0.125,
+      "cost_per_1m_out_cached": 0,
       "context_window": 1048576,
       "default_max_tokens": 65536,
       "can_reason": true,
@@ -938,14 +1699,14 @@
       "options": {}
     },
     {
-      "id": "gemini-2.5-pro-search",
-      "name": "gemini-2.5-pro-search",
-      "cost_per_1m_in": 1.25,
-      "cost_per_1m_out": 10,
+      "id": "gemini-3-flash-preview-search",
+      "name": "gemini-3-flash-preview-search",
+      "cost_per_1m_in": 0.5,
+      "cost_per_1m_out": 3,
       "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0.125,
-      "context_window": 1048576,
-      "default_max_tokens": 65536,
+      "cost_per_1m_out_cached": 0.05,
+      "context_window": 0,
+      "default_max_tokens": 0,
       "can_reason": true,
       "reasoning_levels": [
         "low",
@@ -957,14 +1718,14 @@
       "options": {}
     },
     {
-      "id": "gemini-3-flash-preview",
-      "name": "gemini-3-flash-preview",
-      "cost_per_1m_in": 0.5,
-      "cost_per_1m_out": 3,
+      "id": "gemini-3-pro-preview",
+      "name": "gemini-3-pro-preview",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 12,
       "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0.05,
-      "context_window": 1048576,
-      "default_max_tokens": 65536,
+      "cost_per_1m_out_cached": 0.2,
+      "context_window": 0,
+      "default_max_tokens": 0,
       "can_reason": true,
       "reasoning_levels": [
         "low",
@@ -976,14 +1737,14 @@
       "options": {}
     },
     {
-      "id": "gemini-3-flash-preview-free",
-      "name": "gemini-3-flash-preview-free",
-      "cost_per_1m_in": 0,
-      "cost_per_1m_out": 0,
+      "id": "gemini-3-pro-preview-search",
+      "name": "gemini-3-pro-preview-search",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 12,
       "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0,
-      "context_window": 1048576,
-      "default_max_tokens": 65536,
+      "cost_per_1m_out_cached": 0.2,
+      "context_window": 0,
+      "default_max_tokens": 0,
       "can_reason": true,
       "reasoning_levels": [
         "low",
@@ -1058,6 +1819,25 @@
       "supports_attachments": false,
       "options": {}
     },
+    {
+      "id": "glm-4.7-flash-free",
+      "name": "glm-4.7-flash-free",
+      "cost_per_1m_in": 0,
+      "cost_per_1m_out": 0,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
+    },
     {
       "id": "gpt-4.1",
       "name": "gpt-4.1",
@@ -1149,6 +1929,32 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "gpt-4o-mini-2024-07-18",
+      "name": "gpt-4o-mini-2024-07-18",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.075,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "gpt-4o-mini-audio-preview",
+      "name": "gpt-4o-mini-audio-preview",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": false,
+      "options": {}
+    },
     {
       "id": "gpt-4o-mini-search-preview",
       "name": "gpt-4o-mini-search-preview",
@@ -1175,6 +1981,19 @@
       "supports_attachments": true,
       "options": {}
     },
+    {
+      "id": "gpt-4o-zh",
+      "name": "gpt-4o-zh",
+      "cost_per_1m_in": 2.5,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 0,
+      "default_max_tokens": 0,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
+    },
     {
       "id": "gpt-5",
       "name": "gpt-5",