feat: rework configurations and add `/v2` api prefix (#75)

Kujtim Hoxha created

Change summary

cmd/huggingface/main.go                      |    2 
cmd/openrouter/main.go                       |   59 
internal/deprecated/README.md                |    3 
internal/deprecated/configs/aihubmix.json    |  153 +
internal/deprecated/configs/anthropic.json   |  107 
internal/deprecated/configs/azure.json       |  196 +
internal/deprecated/configs/bedrock.json     |   83 
internal/deprecated/configs/cerebras.json    |  103 
internal/deprecated/configs/chutes.json      |  242 ++
internal/deprecated/configs/deepseek.json    |   36 
internal/deprecated/configs/gemini.json      |   35 
internal/deprecated/configs/groq.json        |   29 
internal/deprecated/configs/huggingface.json |  314 ++
internal/deprecated/configs/openai.json      |  156 +
internal/deprecated/configs/openrouter.json  | 2615 ++++++++++++++++++++++
internal/deprecated/configs/venice.json      |   71 
internal/deprecated/configs/vertexai.json    |   35 
internal/deprecated/configs/xai.json         |   71 
internal/deprecated/configs/zai.json         |   52 
internal/deprecated/old.go                   |   33 
internal/deprecated/providers.go             |  159 +
internal/providers/configs/aihubmix.json     |    2 
internal/providers/configs/azure.json        |   45 
internal/providers/configs/cerebras.json     |   32 
internal/providers/configs/chutes.json       |   94 
internal/providers/configs/deepseek.json     |    9 
internal/providers/configs/gemini.json       |    2 
internal/providers/configs/groq.json         |    9 
internal/providers/configs/huggingface.json  |    2 
internal/providers/configs/openai.json       |   66 
internal/providers/configs/openrouter.json   |  556 ++-
internal/providers/configs/venice.json       |    2 
internal/providers/configs/vertexai.json     |   27 
internal/providers/configs/xai.json          |    7 
internal/providers/configs/zai.json          |    8 
main.go                                      |   23 
pkg/catwalk/client.go                        |    2 
pkg/catwalk/provider.go                      |   63 
38 files changed, 5,189 insertions(+), 314 deletions(-)

Detailed changes

cmd/huggingface/main.go πŸ”—

@@ -112,7 +112,7 @@ func main() {
 		ID:                  catwalk.InferenceProviderHuggingFace,
 		APIKey:              "$HF_TOKEN",
 		APIEndpoint:         "https://router.huggingface.co/v1",
-		Type:                catwalk.TypeOpenAI,
+		Type:                catwalk.TypeOpenAICompat,
 		DefaultLargeModelID: "moonshotai/Kimi-K2-Instruct-0905:groq",
 		DefaultSmallModelID: "openai/gpt-oss-20b",
 		Models:              []catwalk.Model{},

cmd/openrouter/main.go πŸ”—

@@ -244,7 +244,7 @@ func main() {
 		ID:                  "openrouter",
 		APIKey:              "$OPENROUTER_API_KEY",
 		APIEndpoint:         "https://openrouter.ai/api/v1",
-		Type:                catwalk.TypeOpenAI,
+		Type:                catwalk.TypeOpenRouter,
 		DefaultLargeModelID: "anthropic/claude-sonnet-4",
 		DefaultSmallModelID: "anthropic/claude-3.5-haiku",
 		Models:              []catwalk.Model{},
@@ -255,6 +255,9 @@ func main() {
 	}
 
 	for _, model := range modelsResp.Data {
+		if model.ContextLength < 20000 {
+			continue
+		}
 		// skip non‐text models or those without tools
 		if !slices.Contains(model.SupportedParams, "tools") ||
 			!slices.Contains(model.Architecture.InputModalities, "text") ||
@@ -271,17 +274,24 @@ func main() {
 			canReason := slices.Contains(model.SupportedParams, "reasoning")
 			supportsImages := slices.Contains(model.Architecture.InputModalities, "image")
 
+			var reasoningLevels []string
+			var defaultReasoning string
+			if canReason {
+				reasoningLevels = []string{"low", "medium", "high"}
+				defaultReasoning = "medium"
+			}
 			m := catwalk.Model{
-				ID:                 model.ID,
-				Name:               model.Name,
-				CostPer1MIn:        pricing.CostPer1MIn,
-				CostPer1MOut:       pricing.CostPer1MOut,
-				CostPer1MInCached:  pricing.CostPer1MInCached,
-				CostPer1MOutCached: pricing.CostPer1MOutCached,
-				ContextWindow:      model.ContextLength,
-				CanReason:          canReason,
-				HasReasoningEffort: canReason,
-				SupportsImages:     supportsImages,
+				ID:                     model.ID,
+				Name:                   model.Name,
+				CostPer1MIn:            pricing.CostPer1MIn,
+				CostPer1MOut:           pricing.CostPer1MOut,
+				CostPer1MInCached:      pricing.CostPer1MInCached,
+				CostPer1MOutCached:     pricing.CostPer1MOutCached,
+				ContextWindow:          model.ContextLength,
+				CanReason:              canReason,
+				DefaultReasoningEffort: defaultReasoning,
+				ReasoningLevels:        reasoningLevels,
+				SupportsImages:         supportsImages,
 			}
 			if model.TopProvider.MaxCompletionTokens != nil {
 				m.DefaultMaxTokens = *model.TopProvider.MaxCompletionTokens / 2
@@ -334,17 +344,24 @@ func main() {
 		canReason := slices.Contains(bestEndpoint.SupportedParams, "reasoning")
 		supportsImages := slices.Contains(model.Architecture.InputModalities, "image")
 
+		var reasoningLevels []string
+		var defaultReasoning string
+		if canReason {
+			reasoningLevels = []string{"low", "medium", "high"}
+			defaultReasoning = "medium"
+		}
 		m := catwalk.Model{
-			ID:                 model.ID,
-			Name:               model.Name,
-			CostPer1MIn:        pricing.CostPer1MIn,
-			CostPer1MOut:       pricing.CostPer1MOut,
-			CostPer1MInCached:  pricing.CostPer1MInCached,
-			CostPer1MOutCached: pricing.CostPer1MOutCached,
-			ContextWindow:      bestEndpoint.ContextLength,
-			CanReason:          canReason,
-			HasReasoningEffort: canReason,
-			SupportsImages:     supportsImages,
+			ID:                     model.ID,
+			Name:                   model.Name,
+			CostPer1MIn:            pricing.CostPer1MIn,
+			CostPer1MOut:           pricing.CostPer1MOut,
+			CostPer1MInCached:      pricing.CostPer1MInCached,
+			CostPer1MOutCached:     pricing.CostPer1MOutCached,
+			ContextWindow:          bestEndpoint.ContextLength,
+			CanReason:              canReason,
+			DefaultReasoningEffort: defaultReasoning,
+			ReasoningLevels:        reasoningLevels,
+			SupportsImages:         supportsImages,
 		}
 
 		// Set max tokens based on the best endpoint

internal/deprecated/README.md πŸ”—

@@ -0,0 +1,3 @@
+# Deprecated
+
+This version of the config is deprecated, if you want to add a provider or update a provider do that in /internal/providers.

internal/deprecated/configs/aihubmix.json πŸ”—

@@ -0,0 +1,153 @@
+{
+  "name": "AIHubMix",
+  "id": "aihubmix",
+  "api_key": "$AIHUBMIX_API_KEY",
+  "api_endpoint": "https://aihubmix.com/v1",
+  "type": "openai",
+  "default_large_model_id": "claude-sonnet-4-5",
+  "default_small_model_id": "claude-3-5-haiku",
+  "default_headers": {
+    "APP-Code": "IUFF7106"
+  },
+  "models": [
+    {
+      "id": "claude-sonnet-4-5",
+      "name": "Claude Sonnet 4.5",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-opus-4-1",
+      "name": "Claude Opus 4.1",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 75,
+      "cost_per_1m_in_cached": 18.75,
+      "cost_per_1m_out_cached": 1.5,
+      "context_window": 200000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-3-5-haiku",
+      "name": "Claude 3.5 Haiku",
+      "cost_per_1m_in": 0.7999999999999999,
+      "cost_per_1m_out": 4,
+      "cost_per_1m_in_cached": 1,
+      "cost_per_1m_out_cached": 0.08,
+      "context_window": 200000,
+      "default_max_tokens": 5000,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "gemini-2.5-pro",
+      "name": "Gemini 2.5 Pro",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 1.625,
+      "cost_per_1m_out_cached": 0.31,
+      "context_window": 1048576,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "gemini-2.5-flash",
+      "name": "Gemini 2.5 Flash",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0.3833,
+      "cost_per_1m_out_cached": 0.075,
+      "context_window": 1048576,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-5",
+      "name": "GPT-5",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0.25,
+      "cost_per_1m_out_cached": 0.25,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "minimal",
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-5-mini",
+      "name": "GPT-5 Mini",
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0.025,
+      "cost_per_1m_out_cached": 0.025,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "low",
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-5-nano",
+      "name": "GPT-5 Nano",
+      "cost_per_1m_in": 0.05,
+      "cost_per_1m_out": 0.4,
+      "cost_per_1m_in_cached": 0.005,
+      "cost_per_1m_out_cached": 0.005,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "low",
+      "supports_attachments": true
+    },
+    {
+      "id": "Kimi-K2-0905",
+      "name": "Kimi K2 0905",
+      "cost_per_1m_in": 0.55,
+      "cost_per_1m_out": 2.19,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 256000,
+      "default_max_tokens": 10000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium"
+    },
+    {
+      "id": "glm-4.6",
+      "name": "GLM-4.6",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 2.2,
+      "cost_per_1m_in_cached": 0.11,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 204800,
+      "default_max_tokens": 131072,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen3-coder-480b-a35b-instruct",
+      "name": "Qwen 3 480B Coder",
+      "cost_per_1m_in": 0.82,
+      "cost_per_1m_out": 3.29,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": false,
+      "supports_attachments": false
+    }
+  ]
+}

internal/deprecated/configs/anthropic.json πŸ”—

@@ -0,0 +1,107 @@
+{
+  "name": "Anthropic",
+  "id": "anthropic",
+  "type": "anthropic",
+  "api_key": "$ANTHROPIC_API_KEY",
+  "api_endpoint": "$ANTHROPIC_API_ENDPOINT",
+  "default_large_model_id": "claude-sonnet-4-5-20250929",
+  "default_small_model_id": "claude-3-5-haiku-20241022",
+  "models": [
+    {
+      "id": "claude-sonnet-4-5-20250929",
+      "name": "Claude Sonnet 4.5",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-opus-4-1-20250805",
+      "name": "Claude Opus 4.1",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 75,
+      "cost_per_1m_in_cached": 18.75,
+      "cost_per_1m_out_cached": 1.5,
+      "context_window": 200000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-opus-4-20250514",
+      "name": "Claude Opus 4",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 75,
+      "cost_per_1m_in_cached": 18.75,
+      "cost_per_1m_out_cached": 1.5,
+      "context_window": 200000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-sonnet-4-20250514",
+      "name": "Claude Sonnet 4",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-3-7-sonnet-20250219",
+      "name": "Claude 3.7 Sonnet",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-3-5-haiku-20241022",
+      "name": "Claude 3.5 Haiku",
+      "cost_per_1m_in": 0.7999999999999999,
+      "cost_per_1m_out": 4,
+      "cost_per_1m_in_cached": 1,
+      "cost_per_1m_out_cached": 0.08,
+      "context_window": 200000,
+      "default_max_tokens": 5000,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-3-5-sonnet-20240620",
+      "name": "Claude 3.5 Sonnet (Old)",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 5000,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-3-5-sonnet-20241022",
+      "name": "Claude 3.5 Sonnet (New)",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 5000,
+      "can_reason": false,
+      "supports_attachments": true
+    }
+  ]
+}

internal/deprecated/configs/azure.json πŸ”—

@@ -0,0 +1,196 @@
+{
+  "name": "Azure OpenAI",
+  "id": "azure",
+  "type": "azure",
+  "api_key": "$AZURE_OPENAI_API_KEY",
+  "api_endpoint": "$AZURE_OPENAI_API_ENDPOINT",
+  "default_large_model_id": "gpt-5",
+  "default_small_model_id": "gpt-5-mini",
+  "models": [
+    {
+      "id": "gpt-5",
+      "name": "GPT-5",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0.25,
+      "cost_per_1m_out_cached": 0.25,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "has_reasoning_efforts": false,
+      "default_reasoning_effort": "minimal",
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-5-mini",
+      "name": "GPT-5 Mini",
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0.025,
+      "cost_per_1m_out_cached": 0.025,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "has_reasoning_efforts": false,
+      "default_reasoning_effort": "low",
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-5-nano",
+      "name": "GPT-5 Nano",
+      "cost_per_1m_in": 0.05,
+      "cost_per_1m_out": 0.4,
+      "cost_per_1m_in_cached": 0.005,
+      "cost_per_1m_out_cached": 0.005,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "has_reasoning_efforts": false,
+      "default_reasoning_effort": "low",
+      "supports_attachments": true
+    },
+    {
+      "id": "codex-mini-latest",
+      "name": "Codex Mini",
+      "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": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "o4-mini",
+      "name": "o4 Mini",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 4.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.275,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "o3",
+      "name": "o3",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.5,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "o3-pro",
+      "name": "o3 Pro",
+      "cost_per_1m_in": 20,
+      "cost_per_1m_out": 80,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-4.1",
+      "name": "GPT-4.1",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.5,
+      "context_window": 1047576,
+      "default_max_tokens": 50000,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-4.1-mini",
+      "name": "GPT-4.1 Mini",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 1.5999999999999999,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.09999999999999999,
+      "context_window": 1047576,
+      "default_max_tokens": 50000,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-4.1-nano",
+      "name": "GPT-4.1 Nano",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.024999999999999998,
+      "context_window": 1047576,
+      "default_max_tokens": 50000,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-4.5-preview",
+      "name": "GPT-4.5 (Preview)",
+      "cost_per_1m_in": 75,
+      "cost_per_1m_out": 150,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 37.5,
+      "context_window": 128000,
+      "default_max_tokens": 50000,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "o3-mini",
+      "name": "o3 Mini",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 4.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.55,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false
+    },
+    {
+      "id": "gpt-4o",
+      "name": "GPT-4o",
+      "cost_per_1m_in": 2.5,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 1.25,
+      "context_window": 128000,
+      "default_max_tokens": 20000,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-4o-mini",
+      "name": "GPT-4o-mini",
+      "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": 128000,
+      "default_max_tokens": 20000,
+      "can_reason": false,
+      "reasoning_effort": "",
+      "supports_attachments": true
+    }
+  ]
+}

internal/deprecated/configs/bedrock.json πŸ”—

@@ -0,0 +1,83 @@
+{
+  "name": "AWS Bedrock",
+  "id": "bedrock",
+  "type": "bedrock",
+  "api_key": "",
+  "api_endpoint": "",
+  "default_large_model_id": "anthropic.claude-sonnet-4-5-20250929-v1:0",
+  "default_small_model_id": "anthropic.claude-3-5-haiku-20241022-v1:0",
+  "models": [
+    {
+      "id": "anthropic.claude-sonnet-4-5-20250929-v1:0",
+      "name": "AWS Claude Sonnet 4.5",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic.claude-opus-4-1-20250805-v1:0",
+      "name": "AWS Claude Opus 4.1",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 75,
+      "cost_per_1m_in_cached": 18.75,
+      "cost_per_1m_out_cached": 1.5,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic.claude-opus-4-20250514-v1:0",
+      "name": "AWS Claude Opus 4",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 75,
+      "cost_per_1m_in_cached": 18.75,
+      "cost_per_1m_out_cached": 1.5,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic.claude-sonnet-4-20250514-v1:0",
+      "name": "AWS Claude Sonnet 4",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic.claude-3-7-sonnet-20250219-v1:0",
+      "name": "AWS Claude 3.7 Sonnet",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic.claude-3-5-haiku-20241022-v1:0",
+      "name": "AWS Claude 3.5 Haiku",
+      "cost_per_1m_in": 0.7999999999999999,
+      "cost_per_1m_out": 4,
+      "cost_per_1m_in_cached": 1,
+      "cost_per_1m_out_cached": 0.08,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": false,
+      "supports_attachments": true
+    }
+  ]
+}

internal/deprecated/configs/cerebras.json πŸ”—

@@ -0,0 +1,103 @@
+{
+    "name": "Cerebras",
+    "id": "cerebras",
+    "type": "openai",
+    "api_key": "$CEREBRAS_API_KEY",
+    "api_endpoint": "https://api.cerebras.ai/v1",
+    "default_large_model_id": "qwen-3-coder-480b",
+    "default_small_model_id": "qwen-3-32b",
+    "models": [
+        {
+            "id": "llama-4-scout-17b-16e-instruct",
+            "name": "Llama 4 Scout",
+            "cost_per_1m_in": 0.65,
+            "cost_per_1m_out": 0.85,
+            "context_window": 32768,
+            "default_max_tokens": 4000,
+            "can_reason": false,
+            "supports_attachments": false
+        },
+        {
+            "id": "llama3.1-8b",
+            "name": "Llama 3.1 8B",
+            "cost_per_1m_in": 0.1,
+            "cost_per_1m_out": 0.1,
+            "context_window": 32768,
+            "default_max_tokens": 4000,
+            "can_reason": false,
+            "supports_attachments": false
+        },
+        {
+            "id": "llama-3.3-70b",
+            "name": "Llama 3.3 70B",
+            "cost_per_1m_in": 0.85,
+            "cost_per_1m_out": 1.2,
+            "context_window": 128000,
+            "default_max_tokens": 4000,
+            "can_reason": false,
+            "supports_attachments": false
+        },
+        {
+            "id": "gpt-oss-120b",
+            "name": "gpt-oss-120b",
+            "cost_per_1m_in": 0.4,
+            "cost_per_1m_out": 0.8,
+            "context_window": 128000,
+            "default_max_tokens": 65536,
+            "can_reason": true,
+            "has_reasoning_efforts": true,
+            "default_reasoning_efforts": "medium",
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-32b",
+            "name": "Qwen 3 32B",
+            "cost_per_1m_in": 0.4,
+            "cost_per_1m_out": 0.8,
+            "context_window": 128000,
+            "default_max_tokens": 32768,
+            "can_reason": false,
+            "supports_attachments": false
+        },
+        {
+            "id": "llama-4-maverick-17b-128e-instruct",
+            "name": "Llama 4 Maverick",
+            "cost_per_1m_in": 0.2,
+            "cost_per_1m_out": 0.6,
+            "context_window": 32768,
+            "default_max_tokens": 4000,
+            "can_reason": false,
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-235b-a22b-instruct-2507",
+            "name": "Qwen 3 235B Instruct",
+            "cost_per_1m_in": 0.6,
+            "cost_per_1m_out": 1.2,
+            "context_window": 131072,
+            "default_max_tokens": 16384,
+            "can_reason": false,
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-235b-a22b-thinking-2507",
+            "name": "Qwen 3 235B Thinking",
+            "cost_per_1m_in": 0.6,
+            "cost_per_1m_out": 1.2,
+            "context_window": 128000,
+            "default_max_tokens": 32768,
+            "can_reason": false,
+            "supports_attachments": false
+        },
+        {
+            "id": "qwen-3-coder-480b",
+            "name": "Qwen 3 480B Coder",
+            "cost_per_1m_in": 2.0,
+            "cost_per_1m_out": 2.0,
+            "context_window": 131072,
+            "default_max_tokens": 65536,
+            "can_reason": false,
+            "supports_attachments": false
+        }
+    ]
+}

internal/deprecated/configs/chutes.json πŸ”—

@@ -0,0 +1,242 @@
+{
+  "name": "Chutes",
+  "id": "chutes",
+  "type": "openai",
+  "api_key": "$CHUTES_API_KEY",
+  "api_endpoint": "https://llm.chutes.ai/v1",
+  "default_large_model_id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
+  "default_small_model_id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
+  "models": [
+    {
+      "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
+      "name": "Qwen3 Coder 480B A35B Instruct (FP8)",
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 0.8,
+      "context_window": 262000,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "zai-org/GLM-4.5-FP8",
+      "name": "GLM 4.5 FP8",
+      "cost_per_1m_in": 0.0,
+      "cost_per_1m_out": 0.0,
+      "context_window": 98000,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "moonshotai/Kimi-K2-Instruct-75k",
+      "name": "Kimi K2 Instruct",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 0.59,
+      "context_window": 75000,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "deepseek-ai/DeepSeek-R1-0528",
+      "name": "DeepSeek R1 0528",
+      "cost_per_1m_in": 0.18,
+      "cost_per_1m_out": 0.72,
+      "context_window": 75000,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "deepseek-ai/DeepSeek-R1-0528-Qwen3-8B",
+      "name": "DeepSeek R1 0528 Qwen3 8B",
+      "cost_per_1m_in": 0.02,
+      "cost_per_1m_out": 0.07,
+      "context_window": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
+      "name": "DeepSeek R1 Distill Llama 70B",
+      "cost_per_1m_in": 0.03,
+      "cost_per_1m_out": 0.14,
+      "context_window": 65536,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "tngtech/DeepSeek-R1T-Chimera",
+      "name": "DeepSeek R1T Chimera",
+      "cost_per_1m_in": 0.18,
+      "cost_per_1m_out": 0.72,
+      "context_window": 131072,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "tngtech/DeepSeek-TNG-R1T2-Chimera",
+      "name": "DeepSeek TNG R1T2 Chimera",
+      "cost_per_1m_in": 0.20,
+      "cost_per_1m_out": 0.80,
+      "context_window": 262144,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "high",
+      "supports_attachments": true
+    },
+    {
+      "id": "deepseek-ai/DeepSeek-V3-0324",
+      "name": "DeepSeek V3 0324",
+      "cost_per_1m_in": 0.18,
+      "cost_per_1m_out": 0.72,
+      "context_window": 75000,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "chutesai/Devstral-Small-2505",
+      "name": "Devstral Small 2505",
+      "cost_per_1m_in": 0.02,
+      "cost_per_1m_out": 0.08,
+      "context_window": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "zai-org/GLM-4.5-Air",
+      "name": "GLM 4.5 Air",
+      "cost_per_1m_in": 0.0,
+      "cost_per_1m_out": 0.0,
+      "context_window": 131072,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-oss-120b",
+      "name": "GPT OSS 120B",
+      "cost_per_1m_in": 0.10,
+      "cost_per_1m_out": 0.41,
+      "context_window": 131072,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "chutesai/Mistral-Small-3.2-24B-Instruct-2506",
+      "name": "Mistral Small 3.2 24B Instruct 2506",
+      "cost_per_1m_in": 0.02,
+      "cost_per_1m_out": 0.08,
+      "context_window": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "Qwen/Qwen3-235B-A22B-Instruct-2507",
+      "name": "Qwen3 235B A22B Instruct 2507",
+      "cost_per_1m_in": 0.08,
+      "cost_per_1m_out": 0.31,
+      "context_window": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "Qwen/Qwen3-30B-A3B",
+      "name": "Qwen3 30B A3B",
+      "cost_per_1m_in": 0.02,
+      "cost_per_1m_out": 0.08,
+      "context_window": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "Qwen/Qwen3-235B-A22B-Thinking-2507",
+      "name": "Qwen3 235B A22B Thinking 2507",
+      "cost_per_1m_in": 0.08,
+      "cost_per_1m_out": 0.31,
+      "context_window": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "high",
+      "supports_attachments": true
+    },
+    {
+      "id": "deepseek-ai/DeepSeek-V3.1",
+      "name": "DeepSeek V3.1",
+      "cost_per_1m_in": 0.20,
+      "cost_per_1m_out": 0.80,
+      "context_window": 163840,
+      "default_max_tokens": 32768,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "deepseek-ai/DeepSeek-V3.1:THINKING",
+      "name": "DeepSeek V3.1 Reasoning",
+      "cost_per_1m_in": 0.20,
+      "cost_per_1m_out": 0.80,
+      "context_window": 163840,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "Qwen/Qwen3-30B-A3B-Instruct-2507",
+      "name": "Qwen3 30B A3B Instruct 2507",
+      "cost_per_1m_in": 0.05,
+      "cost_per_1m_out": 0.20,
+      "context_window": 262144,
+      "default_max_tokens": 32768,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "Qwen/Qwen3-Coder-30B-A3B-Instruct",
+      "name": "Qwen3 Coder 30B A3B Instruct",
+      "cost_per_1m_in": 0.00,
+      "cost_per_1m_out": 0.00,
+      "context_window": 262144,
+      "default_max_tokens": 32768,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    }
+  ]
+}

internal/deprecated/configs/deepseek.json πŸ”—

@@ -0,0 +1,36 @@
+{
+  "name": "DeepSeek",
+  "id": "deepseek",
+  "type": "openai",
+  "api_key": "$DEEPSEEK_API_KEY",
+  "api_endpoint": "https://api.deepseek.com/v1",
+  "default_large_model_id": "deepseek-reasoner",
+  "default_small_model_id": "deepseek-chat",
+  "models": [
+    {
+      "id": "deepseek-chat",
+      "name": "DeepSeek-V3.1 (Non-thinking Mode)",
+      "cost_per_1m_in": 0.56,
+      "cost_per_1m_out": 1.68,
+      "cost_per_1m_in_cached": 0.07,
+      "cost_per_1m_out_cached": 1.68,
+      "context_window": 128000,
+      "default_max_tokens": 4000,
+      "can_reason": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek-reasoner",
+      "name": "DeepSeek-V3.1 (Thinking Mode)",
+      "cost_per_1m_in": 0.56,
+      "cost_per_1m_out": 1.68,
+      "cost_per_1m_in_cached": 0.07,
+      "cost_per_1m_out_cached": 1.68,
+      "context_window": 128000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "supports_attachments": false
+    }
+  ]
+}
+

internal/deprecated/configs/gemini.json πŸ”—

@@ -0,0 +1,35 @@
+{
+  "name": "Google Gemini",
+  "id": "gemini",
+  "type": "gemini",
+  "api_key": "$GEMINI_API_KEY",
+  "api_endpoint": "$GEMINI_API_ENDPOINT",
+  "default_large_model_id": "gemini-2.5-pro",
+  "default_small_model_id": "gemini-2.5-flash",
+  "models": [
+    {
+      "id": "gemini-2.5-pro",
+      "name": "Gemini 2.5 Pro",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 1.625,
+      "cost_per_1m_out_cached": 0.31,
+      "context_window": 1048576,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "gemini-2.5-flash",
+      "name": "Gemini 2.5 Flash",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0.3833,
+      "cost_per_1m_out_cached": 0.075,
+      "context_window": 1048576,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    }
+  ]
+}

internal/deprecated/configs/groq.json πŸ”—

@@ -0,0 +1,29 @@
+{
+  "name": "Groq",
+  "id": "groq",
+  "api_key": "$GROQ_API_KEY",
+  "api_endpoint": "https://api.groq.com/openai/v1",
+  "type": "openai",
+  "default_large_model_id": "moonshotai/kimi-k2-instruct-0905",
+  "default_small_model_id": "qwen/qwen3-32b",
+  "models": [
+    {
+      "id": "moonshotai/kimi-k2-instruct-0905",
+      "name": "Kimi K2 0905",
+      "cost_per_1m_in": 1,
+      "cost_per_1m_out": 3,
+      "cost_per_1m_in_cached": 0.5,
+      "cost_per_1m_out_cached": 0.5,
+      "context_window": 131072,
+      "default_max_tokens": 10000
+    },
+    {
+      "id": "qwen/qwen3-32b",
+      "name": "Qwen3 32B",
+      "cost_per_1m_in": 0.29,
+      "cost_per_1m_out": 0.59,
+      "context_window": 131072,
+      "default_max_tokens": 10000
+    }
+  ]
+}

internal/deprecated/configs/huggingface.json πŸ”—

@@ -0,0 +1,314 @@
+{
+  "name": "Hugging Face",
+  "id": "huggingface",
+  "api_key": "$HF_TOKEN",
+  "api_endpoint": "https://router.huggingface.co/v1",
+  "type": "openai",
+  "default_large_model_id": "moonshotai/Kimi-K2-Instruct-0905:groq",
+  "default_small_model_id": "openai/gpt-oss-20b",
+  "models": [
+    {
+      "id": "Qwen/Qwen3-235B-A22B:fireworks-ai",
+      "name": "Qwen/Qwen3-235B-A22B (fireworks-ai)",
+      "cost_per_1m_in": 0.22,
+      "cost_per_1m_out": 0.88,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "Qwen/Qwen3-235B-A22B-Instruct-2507:fireworks-ai",
+      "name": "Qwen/Qwen3-235B-A22B-Instruct-2507 (fireworks-ai)",
+      "cost_per_1m_in": 0.22,
+      "cost_per_1m_out": 0.88,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "Qwen/Qwen3-235B-A22B-Thinking-2507:fireworks-ai",
+      "name": "Qwen/Qwen3-235B-A22B-Thinking-2507 (fireworks-ai)",
+      "cost_per_1m_in": 0.22,
+      "cost_per_1m_out": 0.88,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "Qwen/Qwen3-30B-A3B:fireworks-ai",
+      "name": "Qwen/Qwen3-30B-A3B (fireworks-ai)",
+      "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": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct:cerebras",
+      "name": "Qwen/Qwen3-Coder-480B-A35B-Instruct (cerebras)",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct:fireworks-ai",
+      "name": "Qwen/Qwen3-Coder-480B-A35B-Instruct (fireworks-ai)",
+      "cost_per_1m_in": 0.45,
+      "cost_per_1m_out": 1.8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek-ai/DeepSeek-V3-0324:fireworks-ai",
+      "name": "deepseek-ai/DeepSeek-V3-0324 (fireworks-ai)",
+      "cost_per_1m_in": 0.9,
+      "cost_per_1m_out": 0.9,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 163840,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek-ai/DeepSeek-V3.1:fireworks-ai",
+      "name": "deepseek-ai/DeepSeek-V3.1 (fireworks-ai)",
+      "cost_per_1m_in": 0,
+      "cost_per_1m_out": 0,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 163840,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/Llama-3.1-70B-Instruct:fireworks-ai",
+      "name": "meta-llama/Llama-3.1-70B-Instruct (fireworks-ai)",
+      "cost_per_1m_in": 0.9,
+      "cost_per_1m_out": 0.9,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/Llama-3.3-70B-Instruct:cerebras",
+      "name": "meta-llama/Llama-3.3-70B-Instruct (cerebras)",
+      "cost_per_1m_in": 0.85,
+      "cost_per_1m_out": 1.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/Llama-3.3-70B-Instruct:groq",
+      "name": "meta-llama/Llama-3.3-70B-Instruct (groq)",
+      "cost_per_1m_in": 0.59,
+      "cost_per_1m_out": 0.79,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/Llama-4-Maverick-17B-128E-Instruct:fireworks-ai",
+      "name": "meta-llama/Llama-4-Maverick-17B-128E-Instruct (fireworks-ai)",
+      "cost_per_1m_in": 0.22,
+      "cost_per_1m_out": 0.88,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 1048576,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/Llama-4-Maverick-17B-128E-Instruct:groq",
+      "name": "meta-llama/Llama-4-Maverick-17B-128E-Instruct (groq)",
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/Llama-4-Scout-17B-16E-Instruct:groq",
+      "name": "meta-llama/Llama-4-Scout-17B-16E-Instruct (groq)",
+      "cost_per_1m_in": 0.11,
+      "cost_per_1m_out": 0.34,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "moonshotai/Kimi-K2-Instruct:fireworks-ai",
+      "name": "moonshotai/Kimi-K2-Instruct (fireworks-ai)",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "moonshotai/Kimi-K2-Instruct-0905:groq",
+      "name": "moonshotai/Kimi-K2-Instruct-0905 (groq)",
+      "cost_per_1m_in": 0,
+      "cost_per_1m_out": 0,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-oss-120b:cerebras",
+      "name": "openai/gpt-oss-120b (cerebras)",
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 0.69,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-oss-120b:fireworks-ai",
+      "name": "openai/gpt-oss-120b (fireworks-ai)",
+      "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": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-oss-120b:groq",
+      "name": "openai/gpt-oss-120b (groq)",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 0.75,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-oss-20b:fireworks-ai",
+      "name": "openai/gpt-oss-20b (fireworks-ai)",
+      "cost_per_1m_in": 0.05,
+      "cost_per_1m_out": 0.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-oss-20b:groq",
+      "name": "openai/gpt-oss-20b (groq)",
+      "cost_per_1m_in": 0.1,
+      "cost_per_1m_out": 0.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "zai-org/GLM-4.5:fireworks-ai",
+      "name": "zai-org/GLM-4.5 (fireworks-ai)",
+      "cost_per_1m_in": 0.55,
+      "cost_per_1m_out": 2.19,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "zai-org/GLM-4.5-Air:fireworks-ai",
+      "name": "zai-org/GLM-4.5-Air (fireworks-ai)",
+      "cost_per_1m_in": 0.22,
+      "cost_per_1m_out": 0.88,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    }
+  ],
+  "default_headers": {
+    "HTTP-Referer": "https://charm.land",
+    "X-Title": "Crush"
+  }
+}

internal/deprecated/configs/openai.json πŸ”—

@@ -0,0 +1,156 @@
+{
+  "name": "OpenAI",
+  "id": "openai",
+  "type": "openai",
+  "api_key": "$OPENAI_API_KEY",
+  "api_endpoint": "$OPENAI_API_ENDPOINT",
+  "default_large_model_id": "gpt-5",
+  "default_small_model_id": "gpt-4o",
+  "models": [
+    {
+      "id": "gpt-5",
+      "name": "GPT-5",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0.25,
+      "cost_per_1m_out_cached": 0.25,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "minimal",
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-5-mini",
+      "name": "GPT-5 Mini",
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0.025,
+      "cost_per_1m_out_cached": 0.025,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "low",
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-5-nano",
+      "name": "GPT-5 Nano",
+      "cost_per_1m_in": 0.05,
+      "cost_per_1m_out": 0.4,
+      "cost_per_1m_in_cached": 0.005,
+      "cost_per_1m_out_cached": 0.005,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "low",
+      "supports_attachments": true
+    },
+    {
+      "id": "o4-mini",
+      "name": "o4 Mini",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 4.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.275,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "low",
+      "supports_attachments": true
+    },
+    {
+      "id": "o3",
+      "name": "o3",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.5,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-4.1",
+      "name": "GPT-4.1",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.5,
+      "context_window": 1047576,
+      "default_max_tokens": 16384,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-4.1-mini",
+      "name": "GPT-4.1 Mini",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 1.5999999999999999,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.09999999999999999,
+      "context_window": 1047576,
+      "default_max_tokens": 16384,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-4.1-nano",
+      "name": "GPT-4.1 Nano",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.024999999999999998,
+      "context_window": 1047576,
+      "default_max_tokens": 16384,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "o3-mini",
+      "name": "o3 Mini",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 4.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.55,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false
+    },
+    {
+      "id": "gpt-4o",
+      "name": "GPT-4o",
+      "cost_per_1m_in": 2.5,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 1.25,
+      "context_window": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "gpt-4o-mini",
+      "name": "GPT-4o-mini",
+      "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": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "reasoning_effort": "",
+      "supports_attachments": true
+    }
+  ]
+}

internal/deprecated/configs/openrouter.json πŸ”—

@@ -0,0 +1,2615 @@
+{
+  "name": "OpenRouter",
+  "id": "openrouter",
+  "api_key": "$OPENROUTER_API_KEY",
+  "api_endpoint": "https://openrouter.ai/api/v1",
+  "type": "openai",
+  "default_large_model_id": "anthropic/claude-sonnet-4",
+  "default_small_model_id": "anthropic/claude-3.5-haiku",
+  "models": [
+    {
+      "id": "ai21/jamba-large-1.7",
+      "name": "AI21: Jamba Large 1.7",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 256000,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "ai21/jamba-mini-1.7",
+      "name": "AI21: Jamba Mini 1.7",
+      "cost_per_1m_in": 0.19999999999999998,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 256000,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "amazon/nova-lite-v1",
+      "name": "Amazon: Nova Lite 1.0",
+      "cost_per_1m_in": 0.06,
+      "cost_per_1m_out": 0.24,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 300000,
+      "default_max_tokens": 2560,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "amazon/nova-micro-v1",
+      "name": "Amazon: Nova Micro 1.0",
+      "cost_per_1m_in": 0.035,
+      "cost_per_1m_out": 0.14,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 2560,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "amazon/nova-pro-v1",
+      "name": "Amazon: Nova Pro 1.0",
+      "cost_per_1m_in": 0.7999999999999999,
+      "cost_per_1m_out": 3.1999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 300000,
+      "default_max_tokens": 2560,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openrouter/andromeda-alpha",
+      "name": "Andromeda Alpha",
+      "cost_per_1m_in": 0,
+      "cost_per_1m_out": 0,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 64000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-3-haiku",
+      "name": "Anthropic: Claude 3 Haiku",
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 1.25,
+      "cost_per_1m_in_cached": 0.3,
+      "cost_per_1m_out_cached": 0.03,
+      "context_window": 200000,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-3-opus",
+      "name": "Anthropic: Claude 3 Opus",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 75,
+      "cost_per_1m_in_cached": 18.75,
+      "cost_per_1m_out_cached": 1.5,
+      "context_window": 200000,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-3.5-haiku",
+      "name": "Anthropic: Claude 3.5 Haiku",
+      "cost_per_1m_in": 0.7999999999999999,
+      "cost_per_1m_out": 4,
+      "cost_per_1m_in_cached": 1,
+      "cost_per_1m_out_cached": 0.08,
+      "context_window": 200000,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-3.5-haiku-20241022",
+      "name": "Anthropic: Claude 3.5 Haiku (2024-10-22)",
+      "cost_per_1m_in": 0.7999999999999999,
+      "cost_per_1m_out": 4,
+      "cost_per_1m_in_cached": 1,
+      "cost_per_1m_out_cached": 0.08,
+      "context_window": 200000,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-3.5-sonnet",
+      "name": "Anthropic: Claude 3.5 Sonnet",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-3.5-sonnet-20240620",
+      "name": "Anthropic: Claude 3.5 Sonnet (2024-06-20)",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-3.7-sonnet",
+      "name": "Anthropic: Claude 3.7 Sonnet",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-3.7-sonnet:thinking",
+      "name": "Anthropic: Claude 3.7 Sonnet (thinking)",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-haiku-4.5",
+      "name": "Anthropic: Claude Haiku 4.5",
+      "cost_per_1m_in": 1,
+      "cost_per_1m_out": 5,
+      "cost_per_1m_in_cached": 1.25,
+      "cost_per_1m_out_cached": 0.09999999999999999,
+      "context_window": 200000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-opus-4",
+      "name": "Anthropic: Claude Opus 4",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 75,
+      "cost_per_1m_in_cached": 18.75,
+      "cost_per_1m_out_cached": 1.5,
+      "context_window": 200000,
+      "default_max_tokens": 16000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-opus-4.1",
+      "name": "Anthropic: Claude Opus 4.1",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 75,
+      "cost_per_1m_in_cached": 18.75,
+      "cost_per_1m_out_cached": 1.5,
+      "context_window": 200000,
+      "default_max_tokens": 16000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-sonnet-4",
+      "name": "Anthropic: Claude Sonnet 4",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 1000000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "anthropic/claude-sonnet-4.5",
+      "name": "Anthropic: Claude Sonnet 4.5",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 1000000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "arcee-ai/virtuoso-large",
+      "name": "Arcee AI: Virtuoso Large",
+      "cost_per_1m_in": 0.75,
+      "cost_per_1m_out": 1.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 32000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "baidu/ernie-4.5-21b-a3b",
+      "name": "Baidu: ERNIE 4.5 21B A3B",
+      "cost_per_1m_in": 0.07,
+      "cost_per_1m_out": 0.28,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 120000,
+      "default_max_tokens": 4000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "baidu/ernie-4.5-vl-28b-a3b",
+      "name": "Baidu: ERNIE 4.5 VL 28B A3B",
+      "cost_per_1m_in": 0.14,
+      "cost_per_1m_out": 0.56,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 30000,
+      "default_max_tokens": 4000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "deepcogito/cogito-v2-preview-llama-109b-moe",
+      "name": "Cogito V2 Preview Llama 109B",
+      "cost_per_1m_in": 0.18,
+      "cost_per_1m_out": 0.59,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32767,
+      "default_max_tokens": 3276,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "cohere/command-r-08-2024",
+      "name": "Cohere: Command R (08-2024)",
+      "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": 128000,
+      "default_max_tokens": 2000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "cohere/command-r-plus-08-2024",
+      "name": "Cohere: Command R+ (08-2024)",
+      "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": 128000,
+      "default_max_tokens": 2000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepcogito/cogito-v2-preview-llama-405b",
+      "name": "Deep Cogito: Cogito V2 Preview Llama 405B",
+      "cost_per_1m_in": 3.5,
+      "cost_per_1m_out": 3.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 3276,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepcogito/cogito-v2-preview-llama-70b",
+      "name": "Deep Cogito: Cogito V2 Preview Llama 70B",
+      "cost_per_1m_in": 0.88,
+      "cost_per_1m_out": 0.88,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 3276,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek/deepseek-chat",
+      "name": "DeepSeek: DeepSeek V3",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 1.3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 64000,
+      "default_max_tokens": 8000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek/deepseek-chat-v3-0324",
+      "name": "DeepSeek: DeepSeek V3 0324",
+      "cost_per_1m_in": 0.27,
+      "cost_per_1m_out": 1.12,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.135,
+      "context_window": 163840,
+      "default_max_tokens": 81920,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek/deepseek-chat-v3-0324:free",
+      "name": "DeepSeek: DeepSeek V3 0324 (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": 163840,
+      "default_max_tokens": 16384,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek/deepseek-chat-v3.1",
+      "name": "DeepSeek: 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": 163840,
+      "default_max_tokens": 10240,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek/deepseek-v3.1-terminus",
+      "name": "DeepSeek: DeepSeek V3.1 Terminus",
+      "cost_per_1m_in": 0.27,
+      "cost_per_1m_out": 1,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 163840,
+      "default_max_tokens": 16384,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek/deepseek-v3.1-terminus:exacto",
+      "name": "DeepSeek: DeepSeek V3.1 Terminus (exacto)",
+      "cost_per_1m_in": 0.27,
+      "cost_per_1m_out": 1,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 163840,
+      "default_max_tokens": 16384,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek/deepseek-v3.2-exp",
+      "name": "DeepSeek: DeepSeek V3.2 Exp",
+      "cost_per_1m_in": 0.27,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 163840,
+      "default_max_tokens": 16384,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek/deepseek-r1",
+      "name": "DeepSeek: R1",
+      "cost_per_1m_in": 0.7,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 64000,
+      "default_max_tokens": 8000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "deepseek/deepseek-r1-0528",
+      "name": "DeepSeek: R1 0528",
+      "cost_per_1m_in": 0.7999999999999999,
+      "cost_per_1m_out": 2.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 163840,
+      "default_max_tokens": 16384,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "google/gemini-2.0-flash-001",
+      "name": "Google: Gemini 2.0 Flash",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0.18330000000000002,
+      "cost_per_1m_out_cached": 0.024999999999999998,
+      "context_window": 1048576,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.0-flash-exp:free",
+      "name": "Google: Gemini 2.0 Flash Experimental (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": 1048576,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.0-flash-lite-001",
+      "name": "Google: Gemini 2.0 Flash Lite",
+      "cost_per_1m_in": 0.075,
+      "cost_per_1m_out": 0.3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 1048576,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.5-flash",
+      "name": "Google: Gemini 2.5 Flash",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0.3833,
+      "cost_per_1m_out_cached": 0.03,
+      "context_window": 1048576,
+      "default_max_tokens": 32767,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.5-flash-lite",
+      "name": "Google: Gemini 2.5 Flash Lite",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0.18330000000000002,
+      "cost_per_1m_out_cached": 0.01,
+      "context_window": 1048576,
+      "default_max_tokens": 32767,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.5-flash-lite-preview-06-17",
+      "name": "Google: Gemini 2.5 Flash Lite Preview 06-17",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0.18330000000000002,
+      "cost_per_1m_out_cached": 0.024999999999999998,
+      "context_window": 1048576,
+      "default_max_tokens": 32767,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.5-flash-lite-preview-09-2025",
+      "name": "Google: Gemini 2.5 Flash Lite Preview 09-2025",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 1048576,
+      "default_max_tokens": 32767,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.5-flash-preview-09-2025",
+      "name": "Google: Gemini 2.5 Flash Preview 09-2025",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0.3833,
+      "cost_per_1m_out_cached": 0.075,
+      "context_window": 1048576,
+      "default_max_tokens": 32767,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.5-pro",
+      "name": "Google: Gemini 2.5 Pro",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 1.625,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 1048576,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.5-pro-preview-05-06",
+      "name": "Google: Gemini 2.5 Pro Preview 05-06",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 1.625,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 1048576,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "google/gemini-2.5-pro-preview",
+      "name": "Google: Gemini 2.5 Pro Preview 06-05",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 1.625,
+      "cost_per_1m_out_cached": 0.125,
+      "context_window": 1048576,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "inception/mercury",
+      "name": "Inception: Mercury",
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 1,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "inception/mercury-coder",
+      "name": "Inception: Mercury Coder",
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 1,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meituan/longcat-flash-chat:free",
+      "name": "Meituan: LongCat Flash Chat (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": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-3-70b-instruct",
+      "name": "Meta: Llama 3 70B Instruct",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 8192,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-3-8b-instruct",
+      "name": "Meta: Llama 3 8B Instruct",
+      "cost_per_1m_in": 0.03,
+      "cost_per_1m_out": 0.06,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 8192,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-3.1-405b-instruct",
+      "name": "Meta: Llama 3.1 405B Instruct",
+      "cost_per_1m_in": 1,
+      "cost_per_1m_out": 3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-3.1-70b-instruct",
+      "name": "Meta: Llama 3.1 70B Instruct",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-3.1-8b-instruct",
+      "name": "Meta: Llama 3.1 8B Instruct",
+      "cost_per_1m_in": 0.02,
+      "cost_per_1m_out": 0.03,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-3.2-3b-instruct",
+      "name": "Meta: Llama 3.2 3B Instruct",
+      "cost_per_1m_in": 0.03,
+      "cost_per_1m_out": 0.049999999999999996,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 16000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-3.3-70b-instruct",
+      "name": "Meta: Llama 3.3 70B Instruct",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-3.3-70b-instruct:free",
+      "name": "Meta: Llama 3.3 70B Instruct (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": 128000,
+      "default_max_tokens": 2014,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-3.3-8b-instruct:free",
+      "name": "Meta: Llama 3.3 8B Instruct (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": 128000,
+      "default_max_tokens": 2014,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "meta-llama/llama-4-maverick",
+      "name": "Meta: Llama 4 Maverick",
+      "cost_per_1m_in": 0.22,
+      "cost_per_1m_out": 0.88,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 1048576,
+      "default_max_tokens": 65536,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "meta-llama/llama-4-maverick:free",
+      "name": "Meta: Llama 4 Maverick (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": 128000,
+      "default_max_tokens": 2014,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "meta-llama/llama-4-scout",
+      "name": "Meta: Llama 4 Scout",
+      "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": 1048576,
+      "default_max_tokens": 104857,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "meta-llama/llama-4-scout:free",
+      "name": "Meta: Llama 4 Scout (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": 128000,
+      "default_max_tokens": 2014,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "microsoft/phi-3-medium-128k-instruct",
+      "name": "Microsoft: Phi-3 Medium 128K Instruct",
+      "cost_per_1m_in": 1,
+      "cost_per_1m_out": 1,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 12800,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "microsoft/phi-3-mini-128k-instruct",
+      "name": "Microsoft: Phi-3 Mini 128K Instruct",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.09999999999999999,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 12800,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "microsoft/phi-3.5-mini-128k-instruct",
+      "name": "Microsoft: Phi-3.5 Mini 128K Instruct",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.09999999999999999,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 12800,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "minimax/minimax-m2:free",
+      "name": "MiniMax: MiniMax M2 (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": 204800,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-large",
+      "name": "Mistral Large",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 12800,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-large-2407",
+      "name": "Mistral Large 2407",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-large-2411",
+      "name": "Mistral Large 2411",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-small",
+      "name": "Mistral Small",
+      "cost_per_1m_in": 0.19999999999999998,
+      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 3276,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-tiny",
+      "name": "Mistral Tiny",
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 0.25,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 3276,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/codestral-2501",
+      "name": "Mistral: Codestral 2501",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 0.8999999999999999,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 26214,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/codestral-2508",
+      "name": "Mistral: Codestral 2508",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 0.8999999999999999,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 256000,
+      "default_max_tokens": 25600,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/devstral-medium",
+      "name": "Mistral: Devstral Medium",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/devstral-small-2505",
+      "name": "Mistral: Devstral Small 2505",
+      "cost_per_1m_in": 0.049999999999999996,
+      "cost_per_1m_out": 0.22,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/devstral-small-2505:free",
+      "name": "Mistral: Devstral Small 2505 (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": 32768,
+      "default_max_tokens": 3276,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/magistral-medium-2506",
+      "name": "Mistral: Magistral Medium 2506",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 40960,
+      "default_max_tokens": 20000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/magistral-medium-2506:thinking",
+      "name": "Mistral: Magistral Medium 2506 (thinking)",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 40960,
+      "default_max_tokens": 20000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/magistral-small-2506",
+      "name": "Mistral: Magistral Small 2506",
+      "cost_per_1m_in": 0.5,
+      "cost_per_1m_out": 1.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 40000,
+      "default_max_tokens": 20000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/ministral-8b",
+      "name": "Mistral: Ministral 8B",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.09999999999999999,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-7b-instruct",
+      "name": "Mistral: Mistral 7B Instruct",
+      "cost_per_1m_in": 0.028,
+      "cost_per_1m_out": 0.054,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-7b-instruct:free",
+      "name": "Mistral: Mistral 7B Instruct (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": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-7b-instruct-v0.3",
+      "name": "Mistral: Mistral 7B Instruct v0.3",
+      "cost_per_1m_in": 0.028,
+      "cost_per_1m_out": 0.054,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-medium-3",
+      "name": "Mistral: Mistral Medium 3",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "mistralai/mistral-medium-3.1",
+      "name": "Mistral: Mistral Medium 3.1",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "mistralai/mistral-nemo",
+      "name": "Mistral: Mistral Nemo",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 0.15,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-small-24b-instruct-2501",
+      "name": "Mistral: Mistral Small 3",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 3276,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mistral-small-3.1-24b-instruct",
+      "name": "Mistral: Mistral Small 3.1 24B",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "mistralai/mistral-small-3.1-24b-instruct:free",
+      "name": "Mistral: Mistral Small 3.1 24B (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": 96000,
+      "default_max_tokens": 48000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "mistralai/mistral-small-3.2-24b-instruct",
+      "name": "Mistral: Mistral Small 3.2 24B",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "mistralai/mistral-small-3.2-24b-instruct:free",
+      "name": "Mistral: Mistral Small 3.2 24B (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": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "mistralai/mixtral-8x22b-instruct",
+      "name": "Mistral: Mixtral 8x22B Instruct",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 65536,
+      "default_max_tokens": 6553,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/mixtral-8x7b-instruct",
+      "name": "Mistral: Mixtral 8x7B Instruct",
+      "cost_per_1m_in": 0.54,
+      "cost_per_1m_out": 0.54,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistralai/pixtral-12b",
+      "name": "Mistral: Pixtral 12B",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 0.15,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "mistralai/pixtral-large-2411",
+      "name": "Mistral: Pixtral Large 2411",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "mistralai/mistral-saba",
+      "name": "Mistral: Saba",
+      "cost_per_1m_in": 0.19999999999999998,
+      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 3276,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "moonshotai/kimi-k2",
+      "name": "MoonshotAI: Kimi K2 0711",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "moonshotai/kimi-k2-0905",
+      "name": "MoonshotAI: Kimi K2 0905",
+      "cost_per_1m_in": 0.5,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 26214,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "moonshotai/kimi-k2-0905:exacto",
+      "name": "MoonshotAI: Kimi K2 0905 (exacto)",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 26214,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "nvidia/llama-3.1-nemotron-70b-instruct",
+      "name": "NVIDIA: Llama 3.1 Nemotron 70B Instruct",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "nvidia/llama-3.3-nemotron-super-49b-v1.5",
+      "name": "NVIDIA: Llama 3.3 Nemotron Super 49B V1.5",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "nvidia/nemotron-nano-9b-v2",
+      "name": "NVIDIA: Nemotron Nano 9B V2",
+      "cost_per_1m_in": 0.04,
+      "cost_per_1m_out": 0.16,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "nvidia/nemotron-nano-9b-v2:free",
+      "name": "NVIDIA: Nemotron Nano 9B V2 (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": 128000,
+      "default_max_tokens": 12800,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "nousresearch/deephermes-3-llama-3-8b-preview",
+      "name": "Nous: DeepHermes 3 Llama 3 8B Preview",
+      "cost_per_1m_in": 0.03,
+      "cost_per_1m_out": 0.11,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "nousresearch/deephermes-3-mistral-24b-preview",
+      "name": "Nous: DeepHermes 3 Mistral 24B Preview",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 0.59,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 16384,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "nousresearch/hermes-3-llama-3.1-70b",
+      "name": "Nous: Hermes 3 70B Instruct",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 12288,
+      "default_max_tokens": 1228,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/codex-mini",
+      "name": "OpenAI: Codex Mini",
+      "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": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-3.5-turbo",
+      "name": "OpenAI: GPT-3.5 Turbo",
+      "cost_per_1m_in": 0.5,
+      "cost_per_1m_out": 1.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 16385,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-3.5-turbo-0613",
+      "name": "OpenAI: GPT-3.5 Turbo (older v0613)",
+      "cost_per_1m_in": 1,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 4095,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-3.5-turbo-16k",
+      "name": "OpenAI: GPT-3.5 Turbo 16k",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 16385,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-4",
+      "name": "OpenAI: GPT-4",
+      "cost_per_1m_in": 30,
+      "cost_per_1m_out": 60,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 8191,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-4-0314",
+      "name": "OpenAI: GPT-4 (older v0314)",
+      "cost_per_1m_in": 30,
+      "cost_per_1m_out": 60,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 8191,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-4-turbo",
+      "name": "OpenAI: GPT-4 Turbo",
+      "cost_per_1m_in": 10,
+      "cost_per_1m_out": 30,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4-1106-preview",
+      "name": "OpenAI: GPT-4 Turbo (older v1106)",
+      "cost_per_1m_in": 10,
+      "cost_per_1m_out": 30,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-4-turbo-preview",
+      "name": "OpenAI: GPT-4 Turbo Preview",
+      "cost_per_1m_in": 10,
+      "cost_per_1m_out": 30,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-4.1",
+      "name": "OpenAI: GPT-4.1",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.5,
+      "context_window": 1047576,
+      "default_max_tokens": 16384,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4.1-mini",
+      "name": "OpenAI: GPT-4.1 Mini",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 1.5999999999999999,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.09999999999999999,
+      "context_window": 1047576,
+      "default_max_tokens": 104757,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4.1-nano",
+      "name": "OpenAI: GPT-4.1 Nano",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.024999999999999998,
+      "context_window": 1047576,
+      "default_max_tokens": 16384,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4o",
+      "name": "OpenAI: GPT-4o",
+      "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": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4o-2024-05-13",
+      "name": "OpenAI: GPT-4o (2024-05-13)",
+      "cost_per_1m_in": 5,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 2048,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4o-2024-08-06",
+      "name": "OpenAI: GPT-4o (2024-08-06)",
+      "cost_per_1m_in": 2.5,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 1.25,
+      "context_window": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4o-2024-11-20",
+      "name": "OpenAI: GPT-4o (2024-11-20)",
+      "cost_per_1m_in": 2.5,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 1.25,
+      "context_window": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4o:extended",
+      "name": "OpenAI: GPT-4o (extended)",
+      "cost_per_1m_in": 6,
+      "cost_per_1m_out": 18,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 32000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4o-audio-preview",
+      "name": "OpenAI: GPT-4o Audio",
+      "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": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-4o-mini",
+      "name": "OpenAI: GPT-4o-mini",
+      "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": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-4o-mini-2024-07-18",
+      "name": "OpenAI: 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": 128000,
+      "default_max_tokens": 8192,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-5",
+      "name": "OpenAI: GPT-5",
+      "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": 400000,
+      "default_max_tokens": 64000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-5-codex",
+      "name": "OpenAI: GPT-5 Codex",
+      "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": 400000,
+      "default_max_tokens": 64000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-5-image",
+      "name": "OpenAI: GPT-5 Image",
+      "cost_per_1m_in": 10,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 1.25,
+      "context_window": 400000,
+      "default_max_tokens": 64000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-5-image-mini",
+      "name": "OpenAI: GPT-5 Image Mini",
+      "cost_per_1m_in": 2.5,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.25,
+      "context_window": 400000,
+      "default_max_tokens": 64000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-5-mini",
+      "name": "OpenAI: GPT-5 Mini",
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.024999999999999998,
+      "context_window": 400000,
+      "default_max_tokens": 64000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-5-nano",
+      "name": "OpenAI: GPT-5 Nano",
+      "cost_per_1m_in": 0.049999999999999996,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.01,
+      "context_window": 400000,
+      "default_max_tokens": 40000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-5-pro",
+      "name": "OpenAI: GPT-5 Pro",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 120,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 400000,
+      "default_max_tokens": 64000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/gpt-oss-120b",
+      "name": "OpenAI: gpt-oss-120b",
+      "cost_per_1m_in": 0.04,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-oss-120b:exacto",
+      "name": "OpenAI: gpt-oss-120b (exacto)",
+      "cost_per_1m_in": 0.049999999999999996,
+      "cost_per_1m_out": 0.24,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-oss-20b",
+      "name": "OpenAI: gpt-oss-20b",
+      "cost_per_1m_in": 0.04,
+      "cost_per_1m_out": 0.15,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/gpt-oss-20b:free",
+      "name": "OpenAI: gpt-oss-20b (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": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/o1",
+      "name": "OpenAI: o1",
+      "cost_per_1m_in": 15,
+      "cost_per_1m_out": 60,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 7.5,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/o3",
+      "name": "OpenAI: o3",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.5,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/o3-deep-research",
+      "name": "OpenAI: o3 Deep Research",
+      "cost_per_1m_in": 10,
+      "cost_per_1m_out": 40,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 2.5,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/o3-mini",
+      "name": "OpenAI: o3 Mini",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 4.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.55,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/o3-mini-high",
+      "name": "OpenAI: o3 Mini High",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 4.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.55,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "openai/o3-pro",
+      "name": "OpenAI: o3 Pro",
+      "cost_per_1m_in": 20,
+      "cost_per_1m_out": 80,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/o4-mini",
+      "name": "OpenAI: o4 Mini",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 4.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.275,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/o4-mini-deep-research",
+      "name": "OpenAI: o4 Mini Deep Research",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.5,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "openai/o4-mini-high",
+      "name": "OpenAI: o4 Mini High",
+      "cost_per_1m_in": 1.1,
+      "cost_per_1m_out": 4.4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.275,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "qwen/qwen-2.5-72b-instruct",
+      "name": "Qwen2.5 72B Instruct",
+      "cost_per_1m_in": 0.13,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwq-32b",
+      "name": "Qwen: QwQ 32B",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 0.58,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen-plus-2025-07-28",
+      "name": "Qwen: Qwen Plus 0728",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 1.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 1000000,
+      "default_max_tokens": 16384,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen-plus-2025-07-28:thinking",
+      "name": "Qwen: Qwen Plus 0728 (thinking)",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 4,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 1000000,
+      "default_max_tokens": 16384,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen-vl-max",
+      "name": "Qwen: Qwen VL Max",
+      "cost_per_1m_in": 0.7999999999999999,
+      "cost_per_1m_out": 3.1999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "qwen/qwen-max",
+      "name": "Qwen: Qwen-Max ",
+      "cost_per_1m_in": 1.5999999999999999,
+      "cost_per_1m_out": 6.3999999999999995,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.64,
+      "context_window": 32768,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen-plus",
+      "name": "Qwen: Qwen-Plus",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 1.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.16,
+      "context_window": 131072,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen-turbo",
+      "name": "Qwen: Qwen-Turbo",
+      "cost_per_1m_in": 0.049999999999999996,
+      "cost_per_1m_out": 0.19999999999999998,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.02,
+      "context_window": 1000000,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-14b",
+      "name": "Qwen: Qwen3 14B",
+      "cost_per_1m_in": 0.06,
+      "cost_per_1m_out": 0.24,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 40960,
+      "default_max_tokens": 20480,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-235b-a22b",
+      "name": "Qwen: Qwen3 235B A22B",
+      "cost_per_1m_in": 0.22,
+      "cost_per_1m_out": 0.88,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 8192,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-235b-a22b-2507",
+      "name": "Qwen: Qwen3 235B A22B Instruct 2507",
+      "cost_per_1m_in": 0.35,
+      "cost_per_1m_out": 1.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 131072,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-235b-a22b-thinking-2507",
+      "name": "Qwen: Qwen3 235B A22B Thinking 2507",
+      "cost_per_1m_in": 0.11,
+      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 131072,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-30b-a3b",
+      "name": "Qwen: Qwen3 30B A3B",
+      "cost_per_1m_in": 0.09,
+      "cost_per_1m_out": 0.44999999999999996,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-30b-a3b-instruct-2507",
+      "name": "Qwen: Qwen3 30B A3B Instruct 2507",
+      "cost_per_1m_in": 0.08,
+      "cost_per_1m_out": 0.33,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 131072,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-30b-a3b-thinking-2507",
+      "name": "Qwen: Qwen3 30B A3B Thinking 2507",
+      "cost_per_1m_in": 0.08,
+      "cost_per_1m_out": 0.29,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 131072,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-32b",
+      "name": "Qwen: Qwen3 32B",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 0.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 4000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-4b:free",
+      "name": "Qwen: Qwen3 4B (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": 40960,
+      "default_max_tokens": 4096,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-coder-30b-a3b-instruct",
+      "name": "Qwen: Qwen3 Coder 30B A3B Instruct",
+      "cost_per_1m_in": 0.07,
+      "cost_per_1m_out": 0.26,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 26214,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-coder",
+      "name": "Qwen: Qwen3 Coder 480B A35B",
+      "cost_per_1m_in": 0.38,
+      "cost_per_1m_out": 1.53,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 131072,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-coder:exacto",
+      "name": "Qwen: Qwen3 Coder 480B A35B (exacto)",
+      "cost_per_1m_in": 0.38,
+      "cost_per_1m_out": 1.53,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 131072,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-coder:free",
+      "name": "Qwen: Qwen3 Coder 480B A35B (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": 262144,
+      "default_max_tokens": 26214,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-coder-flash",
+      "name": "Qwen: Qwen3 Coder Flash",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 1.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.08,
+      "context_window": 128000,
+      "default_max_tokens": 32768,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-coder-plus",
+      "name": "Qwen: Qwen3 Coder Plus",
+      "cost_per_1m_in": 1,
+      "cost_per_1m_out": 5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.09999999999999999,
+      "context_window": 128000,
+      "default_max_tokens": 32768,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-max",
+      "name": "Qwen: Qwen3 Max",
+      "cost_per_1m_in": 1.2,
+      "cost_per_1m_out": 6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.24,
+      "context_window": 256000,
+      "default_max_tokens": 16384,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-next-80b-a3b-instruct",
+      "name": "Qwen: Qwen3 Next 80B A3B Instruct",
+      "cost_per_1m_in": 0.15,
+      "cost_per_1m_out": 1.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 26214,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-next-80b-a3b-thinking",
+      "name": "Qwen: Qwen3 Next 80B A3B Thinking",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 0.3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 262144,
+      "default_max_tokens": 131072,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen/qwen3-vl-235b-a22b-instruct",
+      "name": "Qwen: Qwen3 VL 235B A22B Instruct",
+      "cost_per_1m_in": 0.5,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "qwen/qwen3-vl-30b-a3b-thinking",
+      "name": "Qwen: Qwen3 VL 30B A3B Thinking",
+      "cost_per_1m_in": 0.19999999999999998,
+      "cost_per_1m_out": 1,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 16384,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "qwen/qwen3-vl-8b-instruct",
+      "name": "Qwen: Qwen3 VL 8B Instruct",
+      "cost_per_1m_in": 0.08,
+      "cost_per_1m_out": 0.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 16384,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "qwen/qwen3-vl-8b-thinking",
+      "name": "Qwen: Qwen3 VL 8B Thinking",
+      "cost_per_1m_in": 0.18,
+      "cost_per_1m_out": 2.0999999999999996,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 256000,
+      "default_max_tokens": 16384,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "sao10k/l3-euryale-70b",
+      "name": "Sao10k: Llama 3 Euryale 70B v2.1",
+      "cost_per_1m_in": 1.48,
+      "cost_per_1m_out": 1.48,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 8192,
+      "default_max_tokens": 4096,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "stepfun-ai/step3",
+      "name": "StepFun: Step3",
+      "cost_per_1m_in": 0.5700000000000001,
+      "cost_per_1m_out": 1.42,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 65536,
+      "default_max_tokens": 32768,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "tngtech/deepseek-r1t2-chimera",
+      "name": "TNG: DeepSeek R1T2 Chimera",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 1.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 163840,
+      "default_max_tokens": 81920,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "thedrummer/rocinante-12b",
+      "name": "TheDrummer: Rocinante 12B",
+      "cost_per_1m_in": 0.16999999999999998,
+      "cost_per_1m_out": 0.43,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 3276,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "thedrummer/unslopnemo-12b",
+      "name": "TheDrummer: UnslopNemo 12B",
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 32768,
+      "default_max_tokens": 3276,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "alibaba/tongyi-deepresearch-30b-a3b",
+      "name": "Tongyi DeepResearch 30B A3B",
+      "cost_per_1m_in": 0.09,
+      "cost_per_1m_out": 0.39999999999999997,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "alibaba/tongyi-deepresearch-30b-a3b:free",
+      "name": "Tongyi DeepResearch 30B A3B (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": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "z-ai/glm-4-32b",
+      "name": "Z.AI: GLM 4 32B ",
+      "cost_per_1m_in": 0.09999999999999999,
+      "cost_per_1m_out": 0.09999999999999999,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 128000,
+      "default_max_tokens": 12800,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "z-ai/glm-4.5",
+      "name": "Z.AI: GLM 4.5",
+      "cost_per_1m_in": 0.35,
+      "cost_per_1m_out": 1.55,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "z-ai/glm-4.5-air",
+      "name": "Z.AI: GLM 4.5 Air",
+      "cost_per_1m_in": 0.19999999999999998,
+      "cost_per_1m_out": 1.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "z-ai/glm-4.5-air:free",
+      "name": "Z.AI: GLM 4.5 Air (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": 131072,
+      "default_max_tokens": 48000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "z-ai/glm-4.5v",
+      "name": "Z.AI: GLM 4.5V",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 1.7999999999999998,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.11,
+      "context_window": 65536,
+      "default_max_tokens": 8192,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "z-ai/glm-4.6",
+      "name": "Z.AI: GLM 4.6",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 2.2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.11,
+      "context_window": 204800,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "z-ai/glm-4.6:exacto",
+      "name": "Z.AI: GLM 4.6 (exacto)",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 1.9,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 202752,
+      "default_max_tokens": 20275,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "inclusionai/ling-1t",
+      "name": "inclusionAI: Ling-1T",
+      "cost_per_1m_in": 0.5700000000000001,
+      "cost_per_1m_out": 2.2800000000000002,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "inclusionai/ring-1t",
+      "name": "inclusionAI: Ring 1T",
+      "cost_per_1m_in": 0.5700000000000001,
+      "cost_per_1m_out": 2.2800000000000002,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "x-ai/grok-3",
+      "name": "xAI: Grok 3",
+      "cost_per_1m_in": 5,
+      "cost_per_1m_out": 25,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 1.25,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "x-ai/grok-3-beta",
+      "name": "xAI: Grok 3 Beta",
+      "cost_per_1m_in": 5,
+      "cost_per_1m_out": 25,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 1.25,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": false,
+      "has_reasoning_efforts": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "x-ai/grok-3-mini",
+      "name": "xAI: Grok 3 Mini",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 0.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.075,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "x-ai/grok-3-mini-beta",
+      "name": "xAI: Grok 3 Mini Beta",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 0.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.075,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "x-ai/grok-4",
+      "name": "xAI: Grok 4",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.75,
+      "context_window": 256000,
+      "default_max_tokens": 25600,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "x-ai/grok-4-fast",
+      "name": "xAI: Grok 4 Fast",
+      "cost_per_1m_in": 0.19999999999999998,
+      "cost_per_1m_out": 0.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.049999999999999996,
+      "context_window": 2000000,
+      "default_max_tokens": 15000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "x-ai/grok-code-fast-1",
+      "name": "xAI: Grok Code Fast 1",
+      "cost_per_1m_in": 0.19999999999999998,
+      "cost_per_1m_out": 1.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.02,
+      "context_window": 256000,
+      "default_max_tokens": 5000,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "supports_attachments": false
+    }
+  ],
+  "default_headers": {
+    "HTTP-Referer": "https://charm.land",
+    "X-Title": "Crush"
+  }
+}

internal/deprecated/configs/venice.json πŸ”—

@@ -0,0 +1,71 @@
+{
+  "name": "Venice AI",
+  "id": "venice",
+  "type": "openai",
+  "api_key": "$VENICE_API_KEY",
+  "api_endpoint": "https://api.venice.ai/api/v1",
+  "default_large_model_id": "qwen3-235b:strip_thinking_response=true",
+  "default_small_model_id": "mistral-31-24b",
+  "models": [
+    {
+      "id": "qwen3-235b:strip_thinking_response=true",
+      "name": "Venice Large (qwen3-235b)",
+      "cost_per_1m_in": 1.5,
+      "cost_per_1m_out": 6,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "qwen3-4b:strip_thinking_response=true",
+      "name": "Venice Small (qwen3-4b)",
+      "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": 32768,
+      "default_max_tokens": 25000,
+      "can_reason": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "mistral-31-24b",
+      "name": "Venice Medium (mistral-31-24b)",
+      "cost_per_1m_in": 0.5,
+      "cost_per_1m_out": 2,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 50000,
+      "can_reason": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "llama-3.2-3b",
+      "name": "Llama 3.2 3B",
+      "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": 131072,
+      "default_max_tokens": 25000,
+      "can_reason": false,
+      "supports_attachments": false
+    },
+    {
+      "id": "llama-3.3-70b",
+      "name": "Llama 3.3 70B",
+      "cost_per_1m_in": 0.7,
+      "cost_per_1m_out": 2.8,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 65536,
+      "default_max_tokens": 32000,
+      "can_reason": false,
+      "supports_attachments": false
+    }
+  ]
+}

internal/deprecated/configs/vertexai.json πŸ”—

@@ -0,0 +1,35 @@
+{
+  "name": "Google Vertex AI",
+  "id": "vertexai",
+  "type": "vertexai",
+  "api_key": "",
+  "api_endpoint": "",
+  "default_large_model_id": "gemini-2.5-pro",
+  "default_small_model_id": "gemini-2.5-flash",
+  "models": [
+    {
+      "id": "gemini-2.5-pro",
+      "name": "Gemini 2.5 Pro",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 1.625,
+      "cost_per_1m_out_cached": 0.31,
+      "context_window": 1048576,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "gemini-2.5-flash",
+      "name": "Gemini 2.5 Flash",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 2.5,
+      "cost_per_1m_in_cached": 0.3833,
+      "cost_per_1m_out_cached": 0.075,
+      "context_window": 1048576,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    }
+  ]
+}

internal/deprecated/configs/xai.json πŸ”—

@@ -0,0 +1,71 @@
+{
+  "name": "xAI",
+  "id": "xai",
+  "api_key": "$XAI_API_KEY",
+  "api_endpoint": "https://api.x.ai/v1",
+  "type": "openai",
+  "default_large_model_id": "grok-code-fast",
+  "default_small_model_id": "grok-3-mini",
+  "models": [
+    {
+      "id": "grok-code-fast",
+      "name": "Grok Code Fast",
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 1.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.02,
+      "context_window": 256000,
+      "default_max_tokens": 20000,
+      "can_reason": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "grok-4",
+      "name": "Grok 4",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.75,
+      "context_window": 256000,
+      "default_max_tokens": 20000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "grok-4-fast",
+      "name": "Grok 4 Fast",
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 0.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.05,
+      "context_window": 2000000,
+      "default_max_tokens": 200000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "grok-3-mini",
+      "name": "Grok 3 Mini",
+      "cost_per_1m_in": 0.3,
+      "cost_per_1m_out": 0.5,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.075,
+      "context_window": 131072,
+      "default_max_tokens": 20000,
+      "can_reason": true,
+      "supports_attachments": false
+    },
+    {
+      "id": "grok-3",
+      "name": "Grok 3",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.75,
+      "context_window": 131072,
+      "default_max_tokens": 20000,
+      "can_reason": false,
+      "supports_attachments": false
+    }
+  ]
+}

internal/deprecated/configs/zai.json πŸ”—

@@ -0,0 +1,52 @@
+{
+  "name": "Z.AI",
+  "id": "zai",
+  "api_key": "$ZAI_API_KEY",
+  "api_endpoint": "https://api.z.ai/api/coding/paas/v4",
+  "type": "openai",
+  "default_large_model_id": "glm-4.6",
+  "default_small_model_id": "glm-4.5-air",
+  "models": [
+    {
+      "id": "glm-4.6",
+      "name": "GLM-4.6",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 2.2,
+      "cost_per_1m_in_cached": 0.11,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 204800,
+      "default_max_tokens": 131072,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false
+    },
+    {
+      "id": "glm-4.5",
+      "name": "GLM-4.5",
+      "cost_per_1m_in": 0.6,
+      "cost_per_1m_out": 2.2,
+      "cost_per_1m_in_cached": 0.11,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 98304,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false
+    },
+    {
+      "id": "glm-4.5-air",
+      "name": "GLM-4.5-Air",
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 1.1,
+      "cost_per_1m_in_cached": 0.03,
+      "context_window": 131072,
+      "default_max_tokens": 98304,
+      "can_reason": true,
+      "has_reasoning_efforts": true,
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false
+    }
+  ]
+}

internal/deprecated/old.go πŸ”—

@@ -0,0 +1,33 @@
+// Package deprecated is used to serve the old verion of the provider config
+package deprecated
+
+import "github.com/charmbracelet/catwalk/pkg/catwalk"
+
+// Provider represents an AI provider configuration.
+type Provider struct {
+	Name                string                    `json:"name"`
+	ID                  catwalk.InferenceProvider `json:"id"`
+	APIKey              string                    `json:"api_key,omitempty"`
+	APIEndpoint         string                    `json:"api_endpoint,omitempty"`
+	Type                catwalk.Type              `json:"type,omitempty"`
+	DefaultLargeModelID string                    `json:"default_large_model_id,omitempty"`
+	DefaultSmallModelID string                    `json:"default_small_model_id,omitempty"`
+	Models              []Model                   `json:"models,omitempty"`
+	DefaultHeaders      map[string]string         `json:"default_headers,omitempty"`
+}
+
+// Model represents an AI model configuration.
+type Model struct {
+	ID                     string  `json:"id"`
+	Name                   string  `json:"name"`
+	CostPer1MIn            float64 `json:"cost_per_1m_in"`
+	CostPer1MOut           float64 `json:"cost_per_1m_out"`
+	CostPer1MInCached      float64 `json:"cost_per_1m_in_cached"`
+	CostPer1MOutCached     float64 `json:"cost_per_1m_out_cached"`
+	ContextWindow          int64   `json:"context_window"`
+	DefaultMaxTokens       int64   `json:"default_max_tokens"`
+	CanReason              bool    `json:"can_reason"`
+	HasReasoningEffort     bool    `json:"has_reasoning_efforts"`
+	DefaultReasoningEffort string  `json:"default_reasoning_effort,omitempty"`
+	SupportsImages         bool    `json:"supports_attachments"`
+}

internal/deprecated/providers.go πŸ”—

@@ -0,0 +1,159 @@
+package deprecated
+
+import (
+	_ "embed"
+	"encoding/json"
+	"log"
+)
+
+//go:embed configs/openai.json
+var openAIConfig []byte
+
+//go:embed configs/anthropic.json
+var anthropicConfig []byte
+
+//go:embed configs/gemini.json
+var geminiConfig []byte
+
+//go:embed configs/openrouter.json
+var openRouterConfig []byte
+
+//go:embed configs/azure.json
+var azureConfig []byte
+
+//go:embed configs/vertexai.json
+var vertexAIConfig []byte
+
+//go:embed configs/xai.json
+var xAIConfig []byte
+
+//go:embed configs/zai.json
+var zAIConfig []byte
+
+//go:embed configs/bedrock.json
+var bedrockConfig []byte
+
+//go:embed configs/groq.json
+var groqConfig []byte
+
+//go:embed configs/cerebras.json
+var cerebrasConfig []byte
+
+//go:embed configs/venice.json
+var veniceConfig []byte
+
+//go:embed configs/chutes.json
+var chutesConfig []byte
+
+//go:embed configs/deepseek.json
+var deepSeekConfig []byte
+
+//go:embed configs/huggingface.json
+var huggingFaceConfig []byte
+
+//go:embed configs/aihubmix.json
+var aiHubMixConfig []byte
+
+// ProviderFunc is a function that returns a Provider.
+type ProviderFunc func() Provider
+
+var providerRegistry = []ProviderFunc{
+	anthropicProvider,
+	openAIProvider,
+	geminiProvider,
+	azureProvider,
+	bedrockProvider,
+	vertexAIProvider,
+	xAIProvider,
+	zAIProvider,
+	groqProvider,
+	openRouterProvider,
+	cerebrasProvider,
+	veniceProvider,
+	chutesProvider,
+	deepSeekProvider,
+	huggingFaceProvider,
+	aiHubMixProvider,
+}
+
+// GetAll returns all registered providers.
+func GetAll() []Provider {
+	providers := make([]Provider, 0, len(providerRegistry))
+	for _, providerFunc := range providerRegistry {
+		providers = append(providers, providerFunc())
+	}
+	return providers
+}
+
+func loadProviderFromConfig(configData []byte) Provider {
+	var p Provider
+	if err := json.Unmarshal(configData, &p); err != nil {
+		log.Printf("Error loading provider config: %v", err)
+		return Provider{}
+	}
+	return p
+}
+
+func openAIProvider() Provider {
+	return loadProviderFromConfig(openAIConfig)
+}
+
+func anthropicProvider() Provider {
+	return loadProviderFromConfig(anthropicConfig)
+}
+
+func geminiProvider() Provider {
+	return loadProviderFromConfig(geminiConfig)
+}
+
+func azureProvider() Provider {
+	return loadProviderFromConfig(azureConfig)
+}
+
+func bedrockProvider() Provider {
+	return loadProviderFromConfig(bedrockConfig)
+}
+
+func vertexAIProvider() Provider {
+	return loadProviderFromConfig(vertexAIConfig)
+}
+
+func xAIProvider() Provider {
+	return loadProviderFromConfig(xAIConfig)
+}
+
+func zAIProvider() Provider {
+	return loadProviderFromConfig(zAIConfig)
+}
+
+func openRouterProvider() Provider {
+	return loadProviderFromConfig(openRouterConfig)
+}
+
+func groqProvider() Provider {
+	return loadProviderFromConfig(groqConfig)
+}
+
+func cerebrasProvider() Provider {
+	return loadProviderFromConfig(cerebrasConfig)
+}
+
+func veniceProvider() Provider {
+	return loadProviderFromConfig(veniceConfig)
+}
+
+func chutesProvider() Provider {
+	return loadProviderFromConfig(chutesConfig)
+}
+
+func deepSeekProvider() Provider {
+	return loadProviderFromConfig(deepSeekConfig)
+}
+
+func huggingFaceProvider() Provider {
+	return loadProviderFromConfig(huggingFaceConfig)
+}
+
+func aiHubMixProvider() Provider {
+	return loadProviderFromConfig(aiHubMixConfig)
+}

internal/providers/configs/aihubmix.json πŸ”—

@@ -3,7 +3,7 @@
   "id": "aihubmix",
   "api_key": "$AIHUBMIX_API_KEY",
   "api_endpoint": "https://aihubmix.com/v1",
-  "type": "openai",
+  "type": "openai-compat",
   "default_large_model_id": "claude-sonnet-4-5",
   "default_small_model_id": "claude-3-5-haiku",
   "default_headers": {

internal/providers/configs/azure.json πŸ”—

@@ -17,7 +17,12 @@
       "context_window": 400000,
       "default_max_tokens": 128000,
       "can_reason": true,
-      "has_reasoning_efforts": false,
+      "reasoning_levels": [
+        "minimal",
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_effort": "minimal",
       "supports_attachments": true
     },
@@ -31,7 +36,11 @@
       "context_window": 400000,
       "default_max_tokens": 128000,
       "can_reason": true,
-      "has_reasoning_efforts": false,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_effort": "low",
       "supports_attachments": true
     },
@@ -45,7 +54,11 @@
       "context_window": 400000,
       "default_max_tokens": 128000,
       "can_reason": true,
-      "has_reasoning_efforts": false,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_effort": "low",
       "supports_attachments": true
     },
@@ -59,7 +72,11 @@
       "context_window": 200000,
       "default_max_tokens": 50000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_effort": "medium",
       "supports_attachments": true
     },
@@ -87,7 +104,11 @@
       "context_window": 200000,
       "default_max_tokens": 50000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_effort": "medium",
       "supports_attachments": true
     },
@@ -101,7 +122,11 @@
       "context_window": 200000,
       "default_max_tokens": 50000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_effort": "medium",
       "supports_attachments": true
     },
@@ -163,7 +188,11 @@
       "context_window": 200000,
       "default_max_tokens": 50000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_effort": "medium",
       "supports_attachments": false
     },
@@ -193,4 +222,4 @@
       "supports_attachments": true
     }
   ]
-}
+}

internal/providers/configs/cerebras.json πŸ”—

@@ -1,7 +1,7 @@
 {
     "name": "Cerebras",
     "id": "cerebras",
-    "type": "openai",
+    "type": "openai-compat",
     "api_key": "$CEREBRAS_API_KEY",
     "api_endpoint": "https://api.cerebras.ai/v1",
     "default_large_model_id": "qwen-3-coder-480b",
@@ -45,7 +45,11 @@
             "context_window": 128000,
             "default_max_tokens": 65536,
             "can_reason": true,
-            "has_reasoning_efforts": true,
+            "reasoning_levels": [
+                "low",
+                "medium",
+                "high"
+            ],
             "default_reasoning_efforts": "medium",
             "supports_attachments": false
         },
@@ -76,7 +80,13 @@
             "cost_per_1m_out": 1.2,
             "context_window": 131072,
             "default_max_tokens": 16384,
-            "can_reason": false,
+            "can_reason": true,
+            "reasoning_levels": [
+                "low",
+                "medium",
+                "high"
+            ],
+            "default_reasoning_efforts": "medium",
             "supports_attachments": false
         },
         {
@@ -86,7 +96,13 @@
             "cost_per_1m_out": 1.2,
             "context_window": 128000,
             "default_max_tokens": 32768,
-            "can_reason": false,
+            "can_reason": true,
+            "reasoning_levels": [
+                "low",
+                "medium",
+                "high"
+            ],
+            "default_reasoning_efforts": "medium",
             "supports_attachments": false
         },
         {
@@ -96,7 +112,13 @@
             "cost_per_1m_out": 2.0,
             "context_window": 131072,
             "default_max_tokens": 65536,
-            "can_reason": false,
+            "can_reason": true,
+            "reasoning_levels": [
+                "low",
+                "medium",
+                "high"
+            ],
+            "default_reasoning_efforts": "medium",
             "supports_attachments": false
         }
     ]

internal/providers/configs/chutes.json πŸ”—

@@ -1,7 +1,7 @@
 {
   "name": "Chutes",
   "id": "chutes",
-  "type": "openai",
+  "type": "openai-compat",
   "api_key": "$CHUTES_API_KEY",
   "api_endpoint": "https://llm.chutes.ai/v1",
   "default_large_model_id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",
@@ -15,7 +15,11 @@
       "context_window": 262000,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
@@ -27,7 +31,11 @@
       "context_window": 98000,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
@@ -39,7 +47,11 @@
       "context_window": 75000,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
@@ -51,7 +63,11 @@
       "context_window": 75000,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
@@ -85,20 +101,28 @@
       "context_window": 131072,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
     {
       "id": "tngtech/DeepSeek-TNG-R1T2-Chimera",
       "name": "DeepSeek TNG R1T2 Chimera",
-      "cost_per_1m_in": 0.20,
-      "cost_per_1m_out": 0.80,
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 0.8,
       "context_window": 262144,
       "default_max_tokens": 65536,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "default_reasoning_efforts": "high",
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
     {
@@ -109,7 +133,11 @@
       "context_window": 75000,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
@@ -132,19 +160,27 @@
       "context_window": 131072,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
     {
       "id": "openai/gpt-oss-120b",
       "name": "GPT OSS 120B",
-      "cost_per_1m_in": 0.10,
+      "cost_per_1m_in": 0.1,
       "cost_per_1m_out": 0.41,
       "context_window": 131072,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
@@ -189,15 +225,19 @@
       "context_window": 32768,
       "default_max_tokens": 8192,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "default_reasoning_efforts": "high",
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
     {
       "id": "deepseek-ai/DeepSeek-V3.1",
       "name": "DeepSeek V3.1",
-      "cost_per_1m_in": 0.20,
-      "cost_per_1m_out": 0.80,
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 0.8,
       "context_window": 163840,
       "default_max_tokens": 32768,
       "can_reason": false,
@@ -207,12 +247,16 @@
     {
       "id": "deepseek-ai/DeepSeek-V3.1:THINKING",
       "name": "DeepSeek V3.1 Reasoning",
-      "cost_per_1m_in": 0.20,
-      "cost_per_1m_out": 0.80,
+      "cost_per_1m_in": 0.2,
+      "cost_per_1m_out": 0.8,
       "context_window": 163840,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_efforts": "medium",
       "supports_attachments": true
     },
@@ -220,7 +264,7 @@
       "id": "Qwen/Qwen3-30B-A3B-Instruct-2507",
       "name": "Qwen3 30B A3B Instruct 2507",
       "cost_per_1m_in": 0.05,
-      "cost_per_1m_out": 0.20,
+      "cost_per_1m_out": 0.2,
       "context_window": 262144,
       "default_max_tokens": 32768,
       "can_reason": false,
@@ -230,8 +274,8 @@
     {
       "id": "Qwen/Qwen3-Coder-30B-A3B-Instruct",
       "name": "Qwen3 Coder 30B A3B Instruct",
-      "cost_per_1m_in": 0.00,
-      "cost_per_1m_out": 0.00,
+      "cost_per_1m_in": 0.0,
+      "cost_per_1m_out": 0.0,
       "context_window": 262144,
       "default_max_tokens": 32768,
       "can_reason": false,
@@ -239,4 +283,4 @@
       "supports_attachments": true
     }
   ]
-}
+}

internal/providers/configs/deepseek.json πŸ”—

@@ -1,7 +1,7 @@
 {
   "name": "DeepSeek",
   "id": "deepseek",
-  "type": "openai",
+  "type": "openai-compat",
   "api_key": "$DEEPSEEK_API_KEY",
   "api_endpoint": "https://api.deepseek.com/v1",
   "default_large_model_id": "deepseek-reasoner",
@@ -29,8 +29,13 @@
       "context_window": 128000,
       "default_max_tokens": 32000,
       "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_efforts": "medium",
       "supports_attachments": false
     }
   ]
 }
-

internal/providers/configs/gemini.json πŸ”—

@@ -1,7 +1,7 @@
 {
   "name": "Google Gemini",
   "id": "gemini",
-  "type": "gemini",
+  "type": "google",
   "api_key": "$GEMINI_API_KEY",
   "api_endpoint": "$GEMINI_API_ENDPOINT",
   "default_large_model_id": "gemini-2.5-pro",

internal/providers/configs/groq.json πŸ”—

@@ -3,7 +3,7 @@
   "id": "groq",
   "api_key": "$GROQ_API_KEY",
   "api_endpoint": "https://api.groq.com/openai/v1",
-  "type": "openai",
+  "type": "openai-compat",
   "default_large_model_id": "moonshotai/kimi-k2-instruct-0905",
   "default_small_model_id": "qwen/qwen3-32b",
   "models": [
@@ -15,6 +15,13 @@
       "cost_per_1m_in_cached": 0.5,
       "cost_per_1m_out_cached": 0.5,
       "context_window": 131072,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_efforts": "medium",
       "default_max_tokens": 10000
     },
     {

internal/providers/configs/huggingface.json πŸ”—

@@ -3,7 +3,7 @@
   "id": "huggingface",
   "api_key": "$HF_TOKEN",
   "api_endpoint": "https://router.huggingface.co/v1",
-  "type": "openai",
+  "type": "openai-compat",
   "default_large_model_id": "moonshotai/Kimi-K2-Instruct-0905:groq",
   "default_small_model_id": "openai/gpt-oss-20b",
   "models": [

internal/providers/configs/openai.json πŸ”—

@@ -4,9 +4,28 @@
   "type": "openai",
   "api_key": "$OPENAI_API_KEY",
   "api_endpoint": "$OPENAI_API_ENDPOINT",
-  "default_large_model_id": "gpt-5",
+  "default_large_model_id": "gpt-5-codex",
   "default_small_model_id": "gpt-4o",
   "models": [
+    {
+      "id": "gpt-5-codex",
+      "name": "GPT-5 Codex",
+      "cost_per_1m_in": 1.25,
+      "cost_per_1m_out": 10,
+      "cost_per_1m_in_cached": 0.25,
+      "cost_per_1m_out_cached": 0.25,
+      "context_window": 400000,
+      "default_max_tokens": 128000,
+      "can_reason": true,
+      "reasoning_levels": [
+        "minimal",
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true
+    },
     {
       "id": "gpt-5",
       "name": "GPT-5",
@@ -17,8 +36,13 @@
       "context_window": 400000,
       "default_max_tokens": 128000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "default_reasoning_effort": "minimal",
+      "reasoning_levels": [
+        "minimal",
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
       "supports_attachments": true
     },
     {
@@ -31,8 +55,12 @@
       "context_window": 400000,
       "default_max_tokens": 128000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "default_reasoning_effort": "low",
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
       "supports_attachments": true
     },
     {
@@ -45,8 +73,12 @@
       "context_window": 400000,
       "default_max_tokens": 128000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "default_reasoning_effort": "low",
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
       "supports_attachments": true
     },
     {
@@ -59,8 +91,12 @@
       "context_window": 200000,
       "default_max_tokens": 50000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "default_reasoning_effort": "low",
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
       "supports_attachments": true
     },
     {
@@ -73,7 +109,11 @@
       "context_window": 200000,
       "default_max_tokens": 50000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_effort": "medium",
       "supports_attachments": true
     },
@@ -123,7 +163,11 @@
       "context_window": 200000,
       "default_max_tokens": 50000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
       "default_reasoning_effort": "medium",
       "supports_attachments": false
     },

internal/providers/configs/openrouter.json πŸ”—

@@ -3,7 +3,7 @@
   "id": "openrouter",
   "api_key": "$OPENROUTER_API_KEY",
   "api_endpoint": "https://openrouter.ai/api/v1",
-  "type": "openai",
+  "type": "openrouter",
   "default_large_model_id": "anthropic/claude-sonnet-4",
   "default_small_model_id": "anthropic/claude-3.5-haiku",
   "models": [
@@ -17,8 +17,8 @@
       "context_window": 256000,
       "default_max_tokens": 2048,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "ai21/jamba-mini-1.7",
@@ -30,8 +30,8 @@
       "context_window": 256000,
       "default_max_tokens": 2048,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "amazon/nova-lite-v1",
@@ -43,8 +43,8 @@
       "context_window": 300000,
       "default_max_tokens": 2560,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "amazon/nova-micro-v1",
@@ -56,8 +56,8 @@
       "context_window": 128000,
       "default_max_tokens": 2560,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "amazon/nova-pro-v1",
@@ -69,8 +69,8 @@
       "context_window": 300000,
       "default_max_tokens": 2560,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "openrouter/andromeda-alpha",
@@ -82,8 +82,14 @@
       "context_window": 128000,
       "default_max_tokens": 64000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-3-haiku",
@@ -95,8 +101,8 @@
       "context_window": 200000,
       "default_max_tokens": 2048,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-3-opus",
@@ -108,8 +114,8 @@
       "context_window": 200000,
       "default_max_tokens": 2048,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-3.5-haiku",
@@ -121,8 +127,8 @@
       "context_window": 200000,
       "default_max_tokens": 4096,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-3.5-haiku-20241022",
@@ -134,8 +140,8 @@
       "context_window": 200000,
       "default_max_tokens": 4096,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-3.5-sonnet",
@@ -147,8 +153,8 @@
       "context_window": 200000,
       "default_max_tokens": 4096,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-3.5-sonnet-20240620",
@@ -160,8 +166,8 @@
       "context_window": 200000,
       "default_max_tokens": 4096,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-3.7-sonnet",
@@ -173,8 +179,14 @@
       "context_window": 200000,
       "default_max_tokens": 32000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-3.7-sonnet:thinking",
@@ -186,8 +198,14 @@
       "context_window": 200000,
       "default_max_tokens": 32000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-haiku-4.5",
@@ -199,8 +217,14 @@
       "context_window": 200000,
       "default_max_tokens": 32000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-opus-4",
@@ -212,8 +236,14 @@
       "context_window": 200000,
       "default_max_tokens": 16000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-opus-4.1",
@@ -225,8 +255,14 @@
       "context_window": 200000,
       "default_max_tokens": 16000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-sonnet-4",
@@ -238,21 +274,33 @@
       "context_window": 1000000,
       "default_max_tokens": 32000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "anthropic/claude-sonnet-4.5",
       "name": "Anthropic: Claude Sonnet 4.5",
       "cost_per_1m_in": 3,
       "cost_per_1m_out": 15,
-      "cost_per_1m_in_cached": 3.75,
-      "cost_per_1m_out_cached": 0.3,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
       "context_window": 1000000,
       "default_max_tokens": 32000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "arcee-ai/virtuoso-large",
@@ -264,8 +312,8 @@
       "context_window": 131072,
       "default_max_tokens": 32000,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "baidu/ernie-4.5-21b-a3b",
@@ -277,8 +325,8 @@
       "context_window": 120000,
       "default_max_tokens": 4000,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "baidu/ernie-4.5-vl-28b-a3b",
@@ -290,8 +338,14 @@
       "context_window": 30000,
       "default_max_tokens": 4000,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "deepcogito/cogito-v2-preview-llama-109b-moe",
@@ -303,8 +357,14 @@
       "context_window": 32767,
       "default_max_tokens": 3276,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "cohere/command-r-08-2024",
@@ -316,8 +376,8 @@
       "context_window": 128000,
       "default_max_tokens": 2000,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "cohere/command-r-plus-08-2024",
@@ -329,8 +389,8 @@
       "context_window": 128000,
       "default_max_tokens": 2000,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepcogito/cogito-v2-preview-llama-405b",
@@ -342,8 +402,14 @@
       "context_window": 32768,
       "default_max_tokens": 3276,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": false
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepcogito/cogito-v2-preview-llama-70b",
@@ -355,8 +421,14 @@
       "context_window": 32768,
       "default_max_tokens": 3276,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": false
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepseek/deepseek-chat",
@@ -368,21 +440,21 @@
       "context_window": 64000,
       "default_max_tokens": 8000,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepseek/deepseek-chat-v3-0324",
       "name": "DeepSeek: DeepSeek V3 0324",
-      "cost_per_1m_in": 0.27,
-      "cost_per_1m_out": 1.12,
+      "cost_per_1m_in": 0.5,
+      "cost_per_1m_out": 1.5,
       "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0.135,
+      "cost_per_1m_out_cached": 0,
       "context_window": 163840,
-      "default_max_tokens": 81920,
+      "default_max_tokens": 16384,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepseek/deepseek-chat-v3-0324:free",
@@ -394,21 +466,27 @@
       "context_window": 163840,
       "default_max_tokens": 16384,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepseek/deepseek-chat-v3.1",
       "name": "DeepSeek: DeepSeek V3.1",
-      "cost_per_1m_in": 0.56,
-      "cost_per_1m_out": 1.68,
+      "cost_per_1m_in": 0.27,
+      "cost_per_1m_out": 1,
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0,
       "context_window": 163840,
-      "default_max_tokens": 10240,
+      "default_max_tokens": 16384,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": false
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepseek/deepseek-v3.1-terminus",
@@ -420,8 +498,14 @@
       "context_window": 163840,
       "default_max_tokens": 16384,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": false
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepseek/deepseek-v3.1-terminus:exacto",
@@ -433,8 +517,14 @@
       "context_window": 163840,
       "default_max_tokens": 16384,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": false
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepseek/deepseek-v3.2-exp",
@@ -446,34 +536,71 @@
       "context_window": 163840,
       "default_max_tokens": 16384,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": false
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepseek/deepseek-r1",
       "name": "DeepSeek: R1",
       "cost_per_1m_in": 0.7,
-      "cost_per_1m_out": 2.5,
+      "cost_per_1m_out": 2.4,
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0,
-      "context_window": 64000,
-      "default_max_tokens": 8000,
+      "context_window": 163840,
+      "default_max_tokens": 81920,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": false
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "deepseek/deepseek-r1-0528",
       "name": "DeepSeek: R1 0528",
-      "cost_per_1m_in": 0.7999999999999999,
-      "cost_per_1m_out": 2.4,
+      "cost_per_1m_in": 0.39999999999999997,
+      "cost_per_1m_out": 1.75,
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0,
       "context_window": 163840,
-      "default_max_tokens": 16384,
+      "default_max_tokens": 81920,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": false
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
+    },
+    {
+      "id": "deepseek/deepseek-r1-distill-llama-70b",
+      "name": "DeepSeek: R1 Distill Llama 70B",
+      "cost_per_1m_in": 0.03,
+      "cost_per_1m_out": 0.13,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 131072,
+      "default_max_tokens": 65536,
+      "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "google/gemini-2.0-flash-001",
@@ -485,8 +612,8 @@
       "context_window": 1048576,
       "default_max_tokens": 4096,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.0-flash-exp:free",
@@ -498,8 +625,8 @@
       "context_window": 1048576,
       "default_max_tokens": 4096,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.0-flash-lite-001",
@@ -511,8 +638,8 @@
       "context_window": 1048576,
       "default_max_tokens": 4096,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.5-flash",
@@ -524,8 +651,14 @@
       "context_window": 1048576,
       "default_max_tokens": 32767,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.5-flash-lite",
@@ -537,8 +670,14 @@
       "context_window": 1048576,
       "default_max_tokens": 32767,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.5-flash-lite-preview-06-17",
@@ -550,8 +689,14 @@
       "context_window": 1048576,
       "default_max_tokens": 32767,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.5-flash-lite-preview-09-2025",
@@ -561,10 +706,16 @@
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0,
       "context_window": 1048576,
-      "default_max_tokens": 32767,
+      "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.5-flash-preview-09-2025",
@@ -576,8 +727,14 @@
       "context_window": 1048576,
       "default_max_tokens": 32767,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.5-pro",
@@ -589,8 +746,14 @@
       "context_window": 1048576,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.5-pro-preview-05-06",
@@ -602,8 +765,14 @@
       "context_window": 1048576,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "google/gemini-2.5-pro-preview",
@@ -615,8 +784,27 @@
       "context_window": 1048576,
       "default_max_tokens": 32768,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": true
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": true,
+      "options": {}
+    },
+    {
+      "id": "google/gemma-3-27b-it",
+      "name": "Google: Gemma 3 27B",
+      "cost_per_1m_in": 0.13,
+      "cost_per_1m_out": 0.52,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0,
+      "context_window": 96000,
+      "default_max_tokens": 48000,
+      "can_reason": false,
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "inception/mercury",
@@ -628,8 +816,8 @@
       "context_window": 128000,
       "default_max_tokens": 8192,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "inception/mercury-coder",
@@ -641,8 +829,8 @@
       "context_window": 128000,
       "default_max_tokens": 8192,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "meituan/longcat-flash-chat:free",
@@ -654,34 +842,8 @@
       "context_window": 131072,
       "default_max_tokens": 65536,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
-    },
-    {
-      "id": "meta-llama/llama-3-70b-instruct",
-      "name": "Meta: Llama 3 70B Instruct",
-      "cost_per_1m_in": 0.3,
-      "cost_per_1m_out": 0.39999999999999997,
-      "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0,
-      "context_window": 8192,
-      "default_max_tokens": 8192,
-      "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
-    },
-    {
-      "id": "meta-llama/llama-3-8b-instruct",
-      "name": "Meta: Llama 3 8B Instruct",
-      "cost_per_1m_in": 0.03,
-      "cost_per_1m_out": 0.06,
-      "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0,
-      "context_window": 8192,
-      "default_max_tokens": 8192,
-      "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "meta-llama/llama-3.1-405b-instruct",
@@ -693,8 +855,8 @@
       "context_window": 131072,
       "default_max_tokens": 13107,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "meta-llama/llama-3.1-70b-instruct",
@@ -706,47 +868,21 @@
       "context_window": 131072,
       "default_max_tokens": 8192,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
-    },
-    {
-      "id": "meta-llama/llama-3.1-8b-instruct",
-      "name": "Meta: Llama 3.1 8B Instruct",
-      "cost_per_1m_in": 0.02,
-      "cost_per_1m_out": 0.03,
-      "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0,
-      "context_window": 131072,
-      "default_max_tokens": 8192,
-      "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
-    },
-    {
-      "id": "meta-llama/llama-3.2-3b-instruct",
-      "name": "Meta: Llama 3.2 3B Instruct",
-      "cost_per_1m_in": 0.03,
-      "cost_per_1m_out": 0.049999999999999996,
-      "cost_per_1m_in_cached": 0,
-      "cost_per_1m_out_cached": 0,
-      "context_window": 32768,
-      "default_max_tokens": 16000,
-      "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "meta-llama/llama-3.3-70b-instruct",
       "name": "Meta: Llama 3.3 70B Instruct",
-      "cost_per_1m_in": 0.6,
-      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in": 0.59,
+      "cost_per_1m_out": 0.7899999999999999,
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0,
       "context_window": 131072,
-      "default_max_tokens": 65536,
+      "default_max_tokens": 16384,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "meta-llama/llama-3.3-70b-instruct:free",
@@ -755,11 +891,11 @@
       "cost_per_1m_out": 0,
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0,
-      "context_window": 128000,
-      "default_max_tokens": 2014,
+      "context_window": 131072,
+      "default_max_tokens": 13107,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "meta-llama/llama-3.3-8b-instruct:free",
@@ -771,21 +907,21 @@
       "context_window": 128000,
       "default_max_tokens": 2014,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "meta-llama/llama-4-maverick",
       "name": "Meta: Llama 4 Maverick",
-      "cost_per_1m_in": 0.22,
-      "cost_per_1m_out": 0.88,
+      "cost_per_1m_in": 0.16999999999999998,
+      "cost_per_1m_out": 0.85,
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0,
       "context_window": 1048576,
-      "default_max_tokens": 65536,
+      "default_max_tokens": 4096,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "meta-llama/llama-4-maverick:free",
@@ -797,21 +933,21 @@
       "context_window": 128000,
       "default_max_tokens": 2014,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "meta-llama/llama-4-scout",
       "name": "Meta: Llama 4 Scout",
-      "cost_per_1m_in": 0.15,
-      "cost_per_1m_out": 0.6,
+      "cost_per_1m_in": 0.25,
+      "cost_per_1m_out": 0.7,
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0,
-      "context_window": 1048576,
-      "default_max_tokens": 104857,
+      "context_window": 1310720,
+      "default_max_tokens": 4096,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "meta-llama/llama-4-scout:free",
@@ -823,8 +959,8 @@
       "context_window": 128000,
       "default_max_tokens": 2014,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": true
+      "supports_attachments": true,
+      "options": {}
     },
     {
       "id": "microsoft/phi-3-medium-128k-instruct",
@@ -836,8 +972,8 @@
       "context_window": 128000,
       "default_max_tokens": 12800,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "microsoft/phi-3-mini-128k-instruct",
@@ -849,8 +985,8 @@
       "context_window": 128000,
       "default_max_tokens": 12800,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "microsoft/phi-3.5-mini-128k-instruct",
@@ -862,8 +998,8 @@
       "context_window": 128000,
       "default_max_tokens": 12800,
       "can_reason": false,
-      "has_reasoning_efforts": false,
-      "supports_attachments": false
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "minimax/minimax-m2:free",
@@ -875,8 +1011,14 @@
       "context_window": 204800,
       "default_max_tokens": 65536,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "supports_attachments": false
+      "reasoning_levels": [
+        "low",
+        "medium",
+        "high"
+      ],
+      "default_reasoning_effort": "medium",
+      "supports_attachments": false,
+      "options": {}
     },
     {
       "id": "mistralai/mistral-large",

internal/providers/configs/venice.json πŸ”—

@@ -1,7 +1,7 @@
 {
   "name": "Venice AI",
   "id": "venice",
-  "type": "openai",
+  "type": "openai-compat",
   "api_key": "$VENICE_API_KEY",
   "api_endpoint": "https://api.venice.ai/api/v1",
   "default_large_model_id": "qwen3-235b:strip_thinking_response=true",

internal/providers/configs/vertexai.json πŸ”—

@@ -1,7 +1,7 @@
 {
   "name": "Google Vertex AI",
   "id": "vertexai",
-  "type": "vertexai",
+  "type": "google-vertex",
   "api_key": "",
   "api_endpoint": "",
   "default_large_model_id": "gemini-2.5-pro",
@@ -30,6 +30,31 @@
       "default_max_tokens": 50000,
       "can_reason": true,
       "supports_attachments": true
+    },
+    {
+      "id": "claude-haiku-4-5@20251001",
+      "name": "Claude 4.5 Haiku",
+      "cost_per_1m_in": 1,
+      "cost_per_1m_out": 5,
+      "cost_per_1m_in_cached": 1.25,
+      "cost_per_1m_out_cached": 0.09999999999999999,
+      "context_window": 200000,
+      "default_max_tokens": 32000,
+      "can_reason": true,
+      "has_reasoning_efforts": false,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-sonnet-4-5@20250929",
+      "name": "Claude Sonnet 4.5",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
     }
   ]
 }

internal/providers/configs/xai.json πŸ”—

@@ -3,7 +3,7 @@
   "id": "xai",
   "api_key": "$XAI_API_KEY",
   "api_endpoint": "https://api.x.ai/v1",
-  "type": "openai",
+  "type": "openai-compat",
   "default_large_model_id": "grok-code-fast",
   "default_small_model_id": "grok-3-mini",
   "models": [
@@ -29,6 +29,11 @@
       "context_window": 256000,
       "default_max_tokens": 20000,
       "can_reason": true,
+      "reasoning_levels": [
+        "low",
+        "high"
+      ],
+      "default_reasoning_effort": "low",
       "supports_attachments": true
     },
     {

internal/providers/configs/zai.json πŸ”—

@@ -3,7 +3,7 @@
   "id": "zai",
   "api_key": "$ZAI_API_KEY",
   "api_endpoint": "https://api.z.ai/api/coding/paas/v4",
-  "type": "openai",
+  "type": "openai-compat",
   "default_large_model_id": "glm-4.6",
   "default_small_model_id": "glm-4.5-air",
   "models": [
@@ -17,8 +17,6 @@
       "context_window": 204800,
       "default_max_tokens": 131072,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "default_reasoning_effort": "medium",
       "supports_attachments": false
     },
     {
@@ -31,8 +29,6 @@
       "context_window": 131072,
       "default_max_tokens": 98304,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "default_reasoning_effort": "medium",
       "supports_attachments": false
     },
     {
@@ -44,8 +40,6 @@
       "context_window": 131072,
       "default_max_tokens": 98304,
       "can_reason": true,
-      "has_reasoning_efforts": true,
-      "default_reasoning_effort": "medium",
       "supports_attachments": false
     }
   ]

main.go πŸ”—

@@ -8,6 +8,7 @@ import (
 	"net/http"
 	"time"
 
+	"github.com/charmbracelet/catwalk/internal/deprecated"
 	"github.com/charmbracelet/catwalk/internal/providers"
 	"github.com/prometheus/client_golang/prometheus"
 	"github.com/prometheus/client_golang/prometheus/promauto"
@@ -40,9 +41,29 @@ func providersHandler(w http.ResponseWriter, r *http.Request) {
 	}
 }
 
+func providersHandlerDeprecated(w http.ResponseWriter, r *http.Request) {
+	w.Header().Set("Content-Type", "application/json")
+	if r.Method == http.MethodHead {
+		return
+	}
+
+	if r.Method != http.MethodGet {
+		http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
+		return
+	}
+
+	counter.Inc()
+	allProviders := deprecated.GetAll()
+	if err := json.NewEncoder(w).Encode(allProviders); err != nil {
+		http.Error(w, "Internal server error", http.StatusInternalServerError)
+		return
+	}
+}
+
 func main() {
 	mux := http.NewServeMux()
-	mux.HandleFunc("/providers", providersHandler)
+	mux.HandleFunc("/v2/providers", providersHandler)
+	mux.HandleFunc("/providers", providersHandlerDeprecated)
 	mux.HandleFunc("/healthz", func(w http.ResponseWriter, _ *http.Request) {
 		w.WriteHeader(http.StatusOK)
 		_, _ = w.Write([]byte("OK"))

pkg/catwalk/client.go πŸ”—

@@ -39,7 +39,7 @@ func NewWithURL(url string) *Client {
 
 // GetProviders retrieves all available providers from the service.
 func (c *Client) GetProviders() ([]Provider, error) {
-	url := fmt.Sprintf("%s/providers", c.baseURL)
+	url := fmt.Sprintf("%s/v2/providers", c.baseURL)
 
 	resp, err := c.httpClient.Get(url) //nolint:noctx
 	if err != nil {

pkg/catwalk/provider.go πŸ”—

@@ -5,12 +5,14 @@ type Type string
 
 // All the supported AI provider types.
 const (
-	TypeOpenAI    Type = "openai"
-	TypeAnthropic Type = "anthropic"
-	TypeGemini    Type = "gemini"
-	TypeAzure     Type = "azure"
-	TypeBedrock   Type = "bedrock"
-	TypeVertexAI  Type = "vertexai"
+	TypeOpenAI       Type = "openai"
+	TypeOpenAICompat Type = "openai-compat"
+	TypeOpenRouter   Type = "openrouter"
+	TypeAnthropic    Type = "anthropic"
+	TypeGoogle       Type = "google"
+	TypeAzure        Type = "azure"
+	TypeBedrock      Type = "bedrock"
+	TypeVertexAI     Type = "google-vertex"
 )
 
 // InferenceProvider represents the inference provider identifier.
@@ -48,20 +50,31 @@ type Provider struct {
 	DefaultHeaders      map[string]string `json:"default_headers,omitempty"`
 }
 
+// ModelOptions stores extra options for models.
+type ModelOptions struct {
+	Temperature      *float64       `json:"temperature,omitempty"`
+	TopP             *float64       `json:"top_p,omitempty"`
+	TopK             *int64         `json:"top_k,omitempty"`
+	FrequencyPenalty *float64       `json:"frequency_penalty,omitempty"`
+	PresencePenalty  *float64       `json:"presence_penalty,omitempty"`
+	ProviderOptions  map[string]any `json:"provider_options,omitempty"`
+}
+
 // Model represents an AI model configuration.
 type Model struct {
-	ID                     string  `json:"id"`
-	Name                   string  `json:"name"`
-	CostPer1MIn            float64 `json:"cost_per_1m_in"`
-	CostPer1MOut           float64 `json:"cost_per_1m_out"`
-	CostPer1MInCached      float64 `json:"cost_per_1m_in_cached"`
-	CostPer1MOutCached     float64 `json:"cost_per_1m_out_cached"`
-	ContextWindow          int64   `json:"context_window"`
-	DefaultMaxTokens       int64   `json:"default_max_tokens"`
-	CanReason              bool    `json:"can_reason"`
-	HasReasoningEffort     bool    `json:"has_reasoning_efforts"`
-	DefaultReasoningEffort string  `json:"default_reasoning_effort,omitempty"`
-	SupportsImages         bool    `json:"supports_attachments"`
+	ID                     string       `json:"id"`
+	Name                   string       `json:"name"`
+	CostPer1MIn            float64      `json:"cost_per_1m_in"`
+	CostPer1MOut           float64      `json:"cost_per_1m_out"`
+	CostPer1MInCached      float64      `json:"cost_per_1m_in_cached"`
+	CostPer1MOutCached     float64      `json:"cost_per_1m_out_cached"`
+	ContextWindow          int64        `json:"context_window"`
+	DefaultMaxTokens       int64        `json:"default_max_tokens"`
+	CanReason              bool         `json:"can_reason"`
+	ReasoningLevels        []string     `json:"reasoning_levels,omitempty"`
+	DefaultReasoningEffort string       `json:"default_reasoning_effort,omitempty"`
+	SupportsImages         bool         `json:"supports_attachments"`
+	Options                ModelOptions `json:"options"`
 }
 
 // KnownProviders returns all the known inference providers.
@@ -84,3 +97,17 @@ func KnownProviders() []InferenceProvider {
 		InferenceAIHubMix,
 	}
 }
+
+// KnownProviderTypes returns all the known inference providers types.
+func KnownProviderTypes() []Type {
+	return []Type{
+		TypeOpenAI,
+		TypeOpenAICompat,
+		TypeOpenRouter,
+		TypeAnthropic,
+		TypeGoogle,
+		TypeAzure,
+		TypeBedrock,
+		TypeVertexAI,
+	}
+}