diff --git a/cmd/huggingface/main.go b/cmd/huggingface/main.go index 583081afd0348fdceb2298f97ab132218e021dae..ef114956eb13cb94ab872e23836af0e9fe636688 100644 --- a/cmd/huggingface/main.go +++ b/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{}, diff --git a/cmd/openrouter/main.go b/cmd/openrouter/main.go index df73ad0d092b79339cd0e087cab1fbad77be3af1..2be305944466ef3d6841df929e69a23a03cfe9bc 100644 --- a/cmd/openrouter/main.go +++ b/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 diff --git a/internal/deprecated/README.md b/internal/deprecated/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6dad8f6aa64053d6cedf2b50595afe2de3d76c98 --- /dev/null +++ b/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. diff --git a/internal/deprecated/configs/aihubmix.json b/internal/deprecated/configs/aihubmix.json new file mode 100644 index 0000000000000000000000000000000000000000..b919df30d36de0f8a687c213486bffbf1c385947 --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/anthropic.json b/internal/deprecated/configs/anthropic.json new file mode 100644 index 0000000000000000000000000000000000000000..8140ad01fc6d1715b9e1cec0b9b7e3f281cb254a --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/azure.json b/internal/deprecated/configs/azure.json new file mode 100644 index 0000000000000000000000000000000000000000..e046b1509916fb2f80ef1487703ea51084a6eacd --- /dev/null +++ b/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 + } + ] +} \ No newline at end of file diff --git a/internal/deprecated/configs/bedrock.json b/internal/deprecated/configs/bedrock.json new file mode 100644 index 0000000000000000000000000000000000000000..67f55e89ae159da652fdecc2076082309b896bc1 --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/cerebras.json b/internal/deprecated/configs/cerebras.json new file mode 100644 index 0000000000000000000000000000000000000000..618e5761f0b84a6ba2ab7966d738f1dd47a2c30b --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/chutes.json b/internal/deprecated/configs/chutes.json new file mode 100644 index 0000000000000000000000000000000000000000..e5c146dd981551c238f23b8ae30872856f5f3a76 --- /dev/null +++ b/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 + } + ] +} \ No newline at end of file diff --git a/internal/deprecated/configs/deepseek.json b/internal/deprecated/configs/deepseek.json new file mode 100644 index 0000000000000000000000000000000000000000..0d732e981bcd9ef0c5f902b78081028dc50e38f1 --- /dev/null +++ b/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 + } + ] +} + diff --git a/internal/deprecated/configs/gemini.json b/internal/deprecated/configs/gemini.json new file mode 100644 index 0000000000000000000000000000000000000000..a2301fcd8a25205ba84a46890d7cad782c91d0d3 --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/groq.json b/internal/deprecated/configs/groq.json new file mode 100644 index 0000000000000000000000000000000000000000..63294d38c7c9988eac99be3a29e8cdd8138fc81a --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/huggingface.json b/internal/deprecated/configs/huggingface.json new file mode 100644 index 0000000000000000000000000000000000000000..b65c5bce228c6cf89d5923ca2787de4c52d97cde --- /dev/null +++ b/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" + } +} diff --git a/internal/deprecated/configs/openai.json b/internal/deprecated/configs/openai.json new file mode 100644 index 0000000000000000000000000000000000000000..d5e44344aaad7a2f5194cee10afa63ea04a87756 --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/openrouter.json b/internal/deprecated/configs/openrouter.json new file mode 100644 index 0000000000000000000000000000000000000000..349b6b60b458bd09eb6efb7547aaed4a2da1b557 --- /dev/null +++ b/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" + } +} diff --git a/internal/deprecated/configs/venice.json b/internal/deprecated/configs/venice.json new file mode 100644 index 0000000000000000000000000000000000000000..0e7d4ac4c7daa34319928e8ed0410a834254fa6f --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/vertexai.json b/internal/deprecated/configs/vertexai.json new file mode 100644 index 0000000000000000000000000000000000000000..b4deeb75425c4d0c00ea16683c1dca00ee7d569e --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/xai.json b/internal/deprecated/configs/xai.json new file mode 100644 index 0000000000000000000000000000000000000000..70b5f88f268fd1eb7484d09034b41d1e7d9eb379 --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/configs/zai.json b/internal/deprecated/configs/zai.json new file mode 100644 index 0000000000000000000000000000000000000000..e5baaa8db83c12e7a277ca6d3cb462e319564a7a --- /dev/null +++ b/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 + } + ] +} diff --git a/internal/deprecated/old.go b/internal/deprecated/old.go new file mode 100644 index 0000000000000000000000000000000000000000..fe4b8ea499212b2c4387bd78b46991e658965db2 --- /dev/null +++ b/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"` +} diff --git a/internal/deprecated/providers.go b/internal/deprecated/providers.go new file mode 100644 index 0000000000000000000000000000000000000000..300216a0ec60e48028560f49c8621c03e1d65aa8 --- /dev/null +++ b/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) +} diff --git a/internal/providers/configs/aihubmix.json b/internal/providers/configs/aihubmix.json index b919df30d36de0f8a687c213486bffbf1c385947..9b833c0ab7304632bdc40d9a42828bcf77f55e11 100644 --- a/internal/providers/configs/aihubmix.json +++ b/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": { diff --git a/internal/providers/configs/azure.json b/internal/providers/configs/azure.json index e046b1509916fb2f80ef1487703ea51084a6eacd..b8002c5c25fea5ac259175c37bb127c5076a7aac 100644 --- a/internal/providers/configs/azure.json +++ b/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 } ] -} \ No newline at end of file +} diff --git a/internal/providers/configs/cerebras.json b/internal/providers/configs/cerebras.json index 618e5761f0b84a6ba2ab7966d738f1dd47a2c30b..52c832ac5679d461e32b79033d969dc60186a6e4 100644 --- a/internal/providers/configs/cerebras.json +++ b/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 } ] diff --git a/internal/providers/configs/chutes.json b/internal/providers/configs/chutes.json index e5c146dd981551c238f23b8ae30872856f5f3a76..d729aa4aed3813c1f7a77e4f013aab4cb43c5b1d 100644 --- a/internal/providers/configs/chutes.json +++ b/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 } ] -} \ No newline at end of file +} diff --git a/internal/providers/configs/deepseek.json b/internal/providers/configs/deepseek.json index 0d732e981bcd9ef0c5f902b78081028dc50e38f1..bb54cc2abf9d314fb26cd12df04271f6496dabbe 100644 --- a/internal/providers/configs/deepseek.json +++ b/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 } ] } - diff --git a/internal/providers/configs/gemini.json b/internal/providers/configs/gemini.json index a2301fcd8a25205ba84a46890d7cad782c91d0d3..84cb21ca07c131f4a856fa12beb0de89f9c8a23d 100644 --- a/internal/providers/configs/gemini.json +++ b/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", diff --git a/internal/providers/configs/groq.json b/internal/providers/configs/groq.json index 63294d38c7c9988eac99be3a29e8cdd8138fc81a..526ac9937ae9dc606ff31660e90522e7a1e7cd01 100644 --- a/internal/providers/configs/groq.json +++ b/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 }, { diff --git a/internal/providers/configs/huggingface.json b/internal/providers/configs/huggingface.json index b65c5bce228c6cf89d5923ca2787de4c52d97cde..ee06c5ca3a8afb361db4f788261f37248bd714b5 100644 --- a/internal/providers/configs/huggingface.json +++ b/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": [ diff --git a/internal/providers/configs/openai.json b/internal/providers/configs/openai.json index d5e44344aaad7a2f5194cee10afa63ea04a87756..7128634e43b0759df03168d476863166fb11332b 100644 --- a/internal/providers/configs/openai.json +++ b/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 }, diff --git a/internal/providers/configs/openrouter.json b/internal/providers/configs/openrouter.json index 7c528281c7019869317817692808f5f13362fe97..8f101ee350d70b2ad3388777d51f1b34b585721b 100644 --- a/internal/providers/configs/openrouter.json +++ b/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", @@ -888,8 +1030,8 @@ "context_window": 128000, "default_max_tokens": 12800, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-large-2407", @@ -901,8 +1043,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-large-2411", @@ -914,8 +1056,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-small", @@ -927,8 +1069,8 @@ "context_window": 32768, "default_max_tokens": 3276, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-tiny", @@ -940,8 +1082,8 @@ "context_window": 32768, "default_max_tokens": 3276, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/codestral-2501", @@ -953,8 +1095,8 @@ "context_window": 262144, "default_max_tokens": 26214, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/codestral-2508", @@ -966,8 +1108,8 @@ "context_window": 256000, "default_max_tokens": 25600, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/devstral-medium", @@ -979,8 +1121,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/devstral-small-2505", @@ -992,8 +1134,8 @@ "context_window": 131072, "default_max_tokens": 65536, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/devstral-small-2505:free", @@ -1005,8 +1147,8 @@ "context_window": 32768, "default_max_tokens": 3276, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/magistral-medium-2506", @@ -1018,8 +1160,14 @@ "context_window": 40960, "default_max_tokens": 20000, "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/magistral-medium-2506:thinking", @@ -1031,8 +1179,14 @@ "context_window": 40960, "default_max_tokens": 20000, "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/magistral-small-2506", @@ -1044,8 +1198,14 @@ "context_window": 40000, "default_max_tokens": 20000, "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/ministral-8b", @@ -1057,8 +1217,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-7b-instruct", @@ -1070,8 +1230,8 @@ "context_window": 32768, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-7b-instruct:free", @@ -1083,8 +1243,8 @@ "context_window": 32768, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-7b-instruct-v0.3", @@ -1096,8 +1256,8 @@ "context_window": 32768, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-medium-3", @@ -1109,8 +1269,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "mistralai/mistral-medium-3.1", @@ -1122,8 +1282,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "mistralai/mistral-nemo", @@ -1135,8 +1295,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-small-24b-instruct-2501", @@ -1148,8 +1308,8 @@ "context_window": 32768, "default_max_tokens": 3276, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mistral-small-3.1-24b-instruct", @@ -1161,8 +1321,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "mistralai/mistral-small-3.1-24b-instruct:free", @@ -1174,21 +1334,21 @@ "context_window": 96000, "default_max_tokens": 48000, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "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": 0.06, + "cost_per_1m_out": 0.18, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 131072, - "default_max_tokens": 13107, + "default_max_tokens": 65536, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "mistralai/mistral-small-3.2-24b-instruct:free", @@ -1200,8 +1360,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "mistralai/mixtral-8x22b-instruct", @@ -1213,8 +1373,8 @@ "context_window": 65536, "default_max_tokens": 6553, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/mixtral-8x7b-instruct", @@ -1226,8 +1386,8 @@ "context_window": 32768, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "mistralai/pixtral-12b", @@ -1239,8 +1399,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "mistralai/pixtral-large-2411", @@ -1252,8 +1412,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "mistralai/mistral-saba", @@ -1265,21 +1425,21 @@ "context_window": 32768, "default_max_tokens": 3276, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "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": 0.5, + "cost_per_1m_out": 2.4, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 131072, - "default_max_tokens": 8192, + "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "moonshotai/kimi-k2-0905", @@ -1291,21 +1451,21 @@ "context_window": 262144, "default_max_tokens": 26214, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "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": 1, + "cost_per_1m_out": 3, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 262144, - "default_max_tokens": 26214, + "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "nvidia/llama-3.1-nemotron-70b-instruct", @@ -1317,8 +1477,8 @@ "context_window": 131072, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "nvidia/llama-3.3-nemotron-super-49b-v1.5", @@ -1330,8 +1490,14 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "nvidia/nemotron-nano-9b-v2", @@ -1343,8 +1509,14 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "nvidia/nemotron-nano-9b-v2:free", @@ -1356,8 +1528,14 @@ "context_window": 128000, "default_max_tokens": 12800, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "nousresearch/deephermes-3-llama-3-8b-preview", @@ -1369,8 +1547,8 @@ "context_window": 131072, "default_max_tokens": 65536, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "nousresearch/deephermes-3-mistral-24b-preview", @@ -1382,8 +1560,14 @@ "context_window": 32768, "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": "nousresearch/hermes-3-llama-3.1-70b", @@ -1395,86 +1579,65 @@ "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 + "supports_attachments": false, + "options": {} }, { - "id": "openai/gpt-3.5-turbo-16k", - "name": "OpenAI: GPT-3.5 Turbo 16k", - "cost_per_1m_in": 3, - "cost_per_1m_out": 4, + "id": "nousresearch/hermes-4-405b", + "name": "Nous: Hermes 4 405B", + "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": 16385, - "default_max_tokens": 2048, - "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "context_window": 131072, + "default_max_tokens": 65536, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { - "id": "openai/gpt-4", - "name": "OpenAI: GPT-4", - "cost_per_1m_in": 30, - "cost_per_1m_out": 60, + "id": "nousresearch/hermes-4-70b", + "name": "Nous: Hermes 4 70B", + "cost_per_1m_in": 0.11, + "cost_per_1m_out": 0.38, "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 + "context_window": 131072, + "default_max_tokens": 65536, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { - "id": "openai/gpt-4-0314", - "name": "OpenAI: GPT-4 (older v0314)", - "cost_per_1m_in": 30, - "cost_per_1m_out": 60, + "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, - "context_window": 8191, - "default_max_tokens": 2048, - "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "cost_per_1m_out_cached": 0.375, + "context_window": 200000, + "default_max_tokens": 50000, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4-turbo", @@ -1486,8 +1649,8 @@ "context_window": 128000, "default_max_tokens": 2048, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4-1106-preview", @@ -1499,8 +1662,8 @@ "context_window": 128000, "default_max_tokens": 2048, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "openai/gpt-4-turbo-preview", @@ -1512,8 +1675,8 @@ "context_window": 128000, "default_max_tokens": 2048, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "openai/gpt-4.1", @@ -1523,10 +1686,10 @@ "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0.5, "context_window": 1047576, - "default_max_tokens": 16384, + "default_max_tokens": 104757, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4.1-mini", @@ -1538,8 +1701,8 @@ "context_window": 1047576, "default_max_tokens": 104757, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4.1-nano", @@ -1547,12 +1710,12 @@ "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, + "cost_per_1m_out_cached": 0.03, "context_window": 1047576, - "default_max_tokens": 16384, + "default_max_tokens": 104757, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4o", @@ -1564,8 +1727,8 @@ "context_window": 128000, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4o-2024-05-13", @@ -1577,8 +1740,8 @@ "context_window": 128000, "default_max_tokens": 2048, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4o-2024-08-06", @@ -1590,8 +1753,8 @@ "context_window": 128000, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4o-2024-11-20", @@ -1603,8 +1766,8 @@ "context_window": 128000, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4o:extended", @@ -1616,8 +1779,8 @@ "context_window": 128000, "default_max_tokens": 32000, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4o-audio-preview", @@ -1629,8 +1792,8 @@ "context_window": 128000, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "openai/gpt-4o-mini", @@ -1642,8 +1805,8 @@ "context_window": 128000, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-4o-mini-2024-07-18", @@ -1655,8 +1818,8 @@ "context_window": 128000, "default_max_tokens": 8192, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-5", @@ -1668,8 +1831,14 @@ "context_window": 400000, "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": "openai/gpt-5-codex", @@ -1681,8 +1850,14 @@ "context_window": 400000, "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": "openai/gpt-5-image", @@ -1694,8 +1869,14 @@ "context_window": 400000, "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": "openai/gpt-5-image-mini", @@ -1707,8 +1888,14 @@ "context_window": 400000, "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": "openai/gpt-5-mini", @@ -1716,12 +1903,18 @@ "cost_per_1m_in": 0.25, "cost_per_1m_out": 2, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0.024999999999999998, + "cost_per_1m_out_cached": 0.03, "context_window": 400000, - "default_max_tokens": 64000, + "default_max_tokens": 40000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "openai/gpt-5-nano", @@ -1729,12 +1922,18 @@ "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, + "cost_per_1m_out_cached": 0.005, "context_window": 400000, - "default_max_tokens": 40000, + "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": "openai/gpt-5-pro", @@ -1746,21 +1945,33 @@ "context_window": 400000, "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": "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": 0.14, + "cost_per_1m_out": 0.95, "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 + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "openai/gpt-oss-120b:exacto", @@ -1772,8 +1983,14 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "openai/gpt-oss-20b", @@ -1785,8 +2002,14 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "openai/gpt-oss-20b:free", @@ -1798,8 +2021,14 @@ "context_window": 131072, "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": "openai/o1", @@ -1811,8 +2040,8 @@ "context_window": 200000, "default_max_tokens": 50000, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "openai/o3", @@ -1824,8 +2053,14 @@ "context_window": 200000, "default_max_tokens": 50000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "openai/o3-deep-research", @@ -1837,8 +2072,14 @@ "context_window": 200000, "default_max_tokens": 50000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "openai/o3-mini", @@ -1850,8 +2091,8 @@ "context_window": 200000, "default_max_tokens": 50000, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "openai/o3-mini-high", @@ -1863,8 +2104,8 @@ "context_window": 200000, "default_max_tokens": 50000, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "openai/o3-pro", @@ -1876,8 +2117,14 @@ "context_window": 200000, "default_max_tokens": 50000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "openai/o4-mini", @@ -1889,8 +2136,14 @@ "context_window": 200000, "default_max_tokens": 50000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "openai/o4-mini-deep-research", @@ -1902,8 +2155,14 @@ "context_window": 200000, "default_max_tokens": 50000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "openai/o4-mini-high", @@ -1915,8 +2174,14 @@ "context_window": 200000, "default_max_tokens": 50000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "qwen/qwen-2.5-72b-instruct", @@ -1928,8 +2193,8 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwq-32b", @@ -1941,8 +2206,14 @@ "context_window": 131072, "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": "qwen/qwen-plus-2025-07-28", @@ -1954,8 +2225,8 @@ "context_window": 1000000, "default_max_tokens": 16384, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen-plus-2025-07-28:thinking", @@ -1967,8 +2238,14 @@ "context_window": 1000000, "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": "qwen/qwen-vl-max", @@ -1980,8 +2257,8 @@ "context_window": 131072, "default_max_tokens": 4096, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "qwen/qwen-max", @@ -1993,8 +2270,8 @@ "context_window": 32768, "default_max_tokens": 4096, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen-plus", @@ -2006,8 +2283,8 @@ "context_window": 131072, "default_max_tokens": 4096, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen-turbo", @@ -2019,8 +2296,8 @@ "context_window": 1000000, "default_max_tokens": 4096, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-14b", @@ -2032,8 +2309,14 @@ "context_window": 40960, "default_max_tokens": 20480, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-235b-a22b", @@ -2045,8 +2328,14 @@ "context_window": 131072, "default_max_tokens": 8192, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-235b-a22b-2507", @@ -2058,8 +2347,8 @@ "context_window": 262144, "default_max_tokens": 131072, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-235b-a22b-thinking-2507", @@ -2071,47 +2360,65 @@ "context_window": 262144, "default_max_tokens": 131072, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "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": 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": 65536, + "default_max_tokens": 4000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "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": 0.09999999999999999, + "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, + "default_max_tokens": 26214, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "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": 0.09999999999999999, + "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, + "default_max_tokens": 26214, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-32b", @@ -2123,8 +2430,14 @@ "context_window": 131072, "default_max_tokens": 4000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-4b:free", @@ -2136,34 +2449,40 @@ "context_window": 40960, "default_max_tokens": 4096, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "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": 0.06, + "cost_per_1m_out": 0.25, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 262144, - "default_max_tokens": 26214, + "default_max_tokens": 131072, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "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": 0.22, + "cost_per_1m_out": 0.95, "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 + "can_reason": false, + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-coder:exacto", @@ -2175,8 +2494,14 @@ "context_window": 262144, "default_max_tokens": 131072, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-coder:free", @@ -2188,8 +2513,8 @@ "context_window": 262144, "default_max_tokens": 26214, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-coder-flash", @@ -2201,8 +2526,8 @@ "context_window": 128000, "default_max_tokens": 32768, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-coder-plus", @@ -2214,8 +2539,8 @@ "context_window": 128000, "default_max_tokens": 32768, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-max", @@ -2227,8 +2552,8 @@ "context_window": 256000, "default_max_tokens": 16384, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "qwen/qwen3-next-80b-a3b-instruct", @@ -2240,34 +2565,46 @@ "context_window": 262144, "default_max_tokens": 26214, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "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": 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": 131072, + "context_window": 131072, + "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": "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, + "id": "qwen/qwen3-vl-235b-a22b-thinking", + "name": "Qwen: Qwen3 VL 235B A22B Thinking", + "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": 131072, - "default_max_tokens": 65536, - "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "context_window": 262144, + "default_max_tokens": 131072, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "qwen/qwen3-vl-30b-a3b-thinking", @@ -2279,8 +2616,14 @@ "context_window": 131072, "default_max_tokens": 16384, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "qwen/qwen3-vl-8b-instruct", @@ -2292,8 +2635,8 @@ "context_window": 131072, "default_max_tokens": 16384, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": true + "supports_attachments": true, + "options": {} }, { "id": "qwen/qwen3-vl-8b-thinking", @@ -2305,21 +2648,14 @@ "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 + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "stepfun-ai/step3", @@ -2331,8 +2667,14 @@ "context_window": 65536, "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": "tngtech/deepseek-r1t2-chimera", @@ -2344,8 +2686,14 @@ "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": "thedrummer/rocinante-12b", @@ -2357,8 +2705,8 @@ "context_window": 32768, "default_max_tokens": 3276, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "thedrummer/unslopnemo-12b", @@ -2370,21 +2718,27 @@ "context_window": 32768, "default_max_tokens": 3276, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "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_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 + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "alibaba/tongyi-deepresearch-30b-a3b:free", @@ -2396,8 +2750,14 @@ "context_window": 131072, "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": "z-ai/glm-4-32b", @@ -2409,8 +2769,8 @@ "context_window": 128000, "default_max_tokens": 12800, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "z-ai/glm-4.5", @@ -2422,21 +2782,33 @@ "context_window": 131072, "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": "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": 0.13, + "cost_per_1m_out": 0.85, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 131072, - "default_max_tokens": 13107, + "default_max_tokens": 49152, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "z-ai/glm-4.5-air:free", @@ -2448,8 +2820,14 @@ "context_window": 131072, "default_max_tokens": 48000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "z-ai/glm-4.5v", @@ -2461,8 +2839,14 @@ "context_window": 65536, "default_max_tokens": 8192, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "z-ai/glm-4.6", @@ -2474,8 +2858,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": "z-ai/glm-4.6:exacto", @@ -2487,8 +2877,14 @@ "context_window": 202752, "default_max_tokens": 20275, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "inclusionai/ling-1t", @@ -2500,8 +2896,8 @@ "context_window": 131072, "default_max_tokens": 65536, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "inclusionai/ring-1t", @@ -2513,34 +2909,40 @@ "context_window": 131072, "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": "x-ai/grok-3", "name": "xAI: Grok 3", - "cost_per_1m_in": 5, - "cost_per_1m_out": 25, + "cost_per_1m_in": 3, + "cost_per_1m_out": 15, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 1.25, + "cost_per_1m_out_cached": 0.75, "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "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": 3, + "cost_per_1m_out": 15, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 1.25, + "cost_per_1m_out_cached": 0.75, "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, - "has_reasoning_efforts": false, - "supports_attachments": false + "supports_attachments": false, + "options": {} }, { "id": "x-ai/grok-3-mini", @@ -2552,8 +2954,14 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "x-ai/grok-3-mini-beta", @@ -2565,8 +2973,14 @@ "context_window": 131072, "default_max_tokens": 13107, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} }, { "id": "x-ai/grok-4", @@ -2578,8 +2992,14 @@ "context_window": 256000, "default_max_tokens": 25600, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "x-ai/grok-4-fast", @@ -2591,8 +3011,14 @@ "context_window": 2000000, "default_max_tokens": 15000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": true + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} }, { "id": "x-ai/grok-code-fast-1", @@ -2604,8 +3030,14 @@ "context_window": 256000, "default_max_tokens": 5000, "can_reason": true, - "has_reasoning_efforts": true, - "supports_attachments": false + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} } ], "default_headers": { diff --git a/internal/providers/configs/venice.json b/internal/providers/configs/venice.json index 0e7d4ac4c7daa34319928e8ed0410a834254fa6f..145d965d1dab819e4b99663b22fda51865a32fb4 100644 --- a/internal/providers/configs/venice.json +++ b/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", diff --git a/internal/providers/configs/vertexai.json b/internal/providers/configs/vertexai.json index b4deeb75425c4d0c00ea16683c1dca00ee7d569e..e8834ccdf4c44826b4928b2ff5f19f4229a65db3 100644 --- a/internal/providers/configs/vertexai.json +++ b/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 } ] } diff --git a/internal/providers/configs/xai.json b/internal/providers/configs/xai.json index 70b5f88f268fd1eb7484d09034b41d1e7d9eb379..0a9c0d0fbd7c2ae45781093462f75e790d72ba54 100644 --- a/internal/providers/configs/xai.json +++ b/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 }, { diff --git a/internal/providers/configs/zai.json b/internal/providers/configs/zai.json index e5baaa8db83c12e7a277ca6d3cb462e319564a7a..1e4a255f6ebc89c891d577cc6b0bc7bc7921b0a0 100644 --- a/internal/providers/configs/zai.json +++ b/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 } ] diff --git a/main.go b/main.go index 7da125f8c74f215030c16c2df6355baec38d7cc2..90b3eba18453667f1dd991f961d36da5ec395354 100644 --- a/main.go +++ b/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")) diff --git a/pkg/catwalk/client.go b/pkg/catwalk/client.go index 195a46e05738f7bbe2b74ce9b398fc14a4acaa0c..4dc8313488d4a56b8fa458ea4ab4837bc91a82d0 100644 --- a/pkg/catwalk/client.go +++ b/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 { diff --git a/pkg/catwalk/provider.go b/pkg/catwalk/provider.go index 1552cc57419ace46e18ad9ea24a60fc56456c376..01eb4314f5c3c67ca1d89d5d8f2610668201c79b 100644 --- a/pkg/catwalk/provider.go +++ b/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, + } +}