diff --git a/.gitignore b/.gitignore index 11bbf384b3ceeb76016096c858f821fbba1d335e..c6efbc0c68645c097aa6d5bfb235b4d3236a1da2 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ go.work.sum # crush .crush dist/ + +# temp dir +/tmp diff --git a/cmd/copilot/main.go b/cmd/copilot/main.go index e6aa1942e0c59afeeec6edc1e978e980049572f9..21cd4cb56fe88f065d0f2d8c17b125c11688ff5f 100644 --- a/cmd/copilot/main.go +++ b/cmd/copilot/main.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + "io" "net/http" "os" "path/filepath" @@ -130,8 +131,17 @@ func fetchCopilotModels() ([]Model, error) { return nil, fmt.Errorf("unexpected status code: %d", resp.StatusCode) } + bts, err := io.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("unable to read response body: %w", err) + } + + // for debugging + _ = os.MkdirAll("tmp", 0o700) + _ = os.WriteFile("tmp/copilot-response.json", bts, 0o600) + var data Response - if err := json.NewDecoder(resp.Body).Decode(&data); err != nil { + if err := json.Unmarshal(bts, &data); err != nil { return nil, fmt.Errorf("unable to unmarshal json: %w", err) } return data.Data, nil diff --git a/internal/providers/configs/cerebras.json b/internal/providers/configs/cerebras.json index e81057846766d36596beb97ee19bdb4b1a5c2137..09b5cca46bc948f1e7464690f2fb737f5d1ae67b 100644 --- a/internal/providers/configs/cerebras.json +++ b/internal/providers/configs/cerebras.json @@ -57,8 +57,8 @@ "supports_attachments": false }, { - "id": "zai-glm-4.6", - "name": "Z.ai GLM 4.6", + "id": "zai-glm-4.7", + "name": "Z.ai GLM 4.7", "cost_per_1m_in": 2.25, "cost_per_1m_out": 2.75, "context_window": 131072, diff --git a/internal/providers/configs/copilot.json b/internal/providers/configs/copilot.json index 56c8508e12dff2415ad02b4eb378e353918b5a0b..a239a907a431bbef71f7c39fdb7f399285db3c7f 100644 --- a/internal/providers/configs/copilot.json +++ b/internal/providers/configs/copilot.json @@ -26,7 +26,7 @@ "cost_per_1m_out": 0, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, - "context_window": 144000, + "context_window": 160000, "default_max_tokens": 16000, "can_reason": true, "supports_attachments": false, @@ -211,6 +211,19 @@ "supports_attachments": false, "options": {} }, + { + "id": "gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 400000, + "default_max_tokens": 128000, + "can_reason": false, + "supports_attachments": false, + "options": {} + }, { "id": "grok-code-fast-1", "name": "Grok Code Fast 1", @@ -225,4 +238,4 @@ "options": {} } ] -} \ No newline at end of file +} diff --git a/internal/providers/configs/openai.json b/internal/providers/configs/openai.json index 05086a9ff160030d1969cb1ce3769abb3b7ef1e3..e66e79a5e99fc94e4d7cac97244ef87b02cbd4e3 100644 --- a/internal/providers/configs/openai.json +++ b/internal/providers/configs/openai.json @@ -21,6 +21,20 @@ "default_reasoning_effort": "medium", "supports_attachments": true }, + { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "cost_per_1m_in": 1.75, + "cost_per_1m_out": 14, + "cost_per_1m_in_cached": 0.175, + "cost_per_1m_out_cached": 0.175, + "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.1", "name": "GPT-5.1", diff --git a/internal/providers/configs/openrouter.json b/internal/providers/configs/openrouter.json index 208634ff3c424868281db4fc8e3b830b79cab2e0..a8f6de2e653ce1367f3e2e450a0cb3b02fc133e7 100644 --- a/internal/providers/configs/openrouter.json +++ b/internal/providers/configs/openrouter.json @@ -33,19 +33,6 @@ "supports_attachments": false, "options": {} }, - { - "id": "allenai/olmo-3-7b-instruct", - "name": "AllenAI: Olmo 3 7B Instruct", - "cost_per_1m_in": 0.09999999999999999, - "cost_per_1m_out": 0.19999999999999998, - "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0, - "context_window": 65536, - "default_max_tokens": 32768, - "can_reason": false, - "supports_attachments": false, - "options": {} - }, { "id": "allenai/olmo-3.1-32b-instruct", "name": "AllenAI: Olmo 3.1 32B Instruct", @@ -156,19 +143,6 @@ "supports_attachments": true, "options": {} }, - { - "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, - "supports_attachments": true, - "options": {} - }, { "id": "anthropic/claude-3.5-sonnet", "name": "Anthropic: Claude 3.5 Sonnet", @@ -573,12 +547,12 @@ { "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.19999999999999998, + "cost_per_1m_out": 0.7999999999999999, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 163840, - "default_max_tokens": 16384, + "default_max_tokens": 32768, "can_reason": true, "reasoning_levels": [ "low", @@ -592,12 +566,12 @@ { "id": "deepseek/deepseek-v3.1-terminus", "name": "DeepSeek: DeepSeek V3.1 Terminus", - "cost_per_1m_in": 0.21, - "cost_per_1m_out": 0.7899999999999999, + "cost_per_1m_in": 0.27, + "cost_per_1m_out": 1, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0.16799999999999998, + "cost_per_1m_out_cached": 0, "context_window": 163840, - "default_max_tokens": 16384, + "default_max_tokens": 81920, "can_reason": true, "reasoning_levels": [ "low", @@ -612,10 +586,10 @@ "id": "deepseek/deepseek-v3.1-terminus:exacto", "name": "DeepSeek: DeepSeek V3.1 Terminus (exacto)", "cost_per_1m_in": 0.21, - "cost_per_1m_out": 0.7999999999999999, + "cost_per_1m_out": 0.7899999999999999, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0, - "context_window": 131072, + "cost_per_1m_out_cached": 0.16799999999999998, + "context_window": 163840, "default_max_tokens": 16384, "can_reason": true, "reasoning_levels": [ @@ -630,12 +604,12 @@ { "id": "deepseek/deepseek-v3.2", "name": "DeepSeek: DeepSeek V3.2", - "cost_per_1m_in": 0.26, - "cost_per_1m_out": 0.39, + "cost_per_1m_in": 0.56, + "cost_per_1m_out": 1.68, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0.13, + "cost_per_1m_out_cached": 0, "context_window": 163840, - "default_max_tokens": 16384, + "default_max_tokens": 32768, "can_reason": true, "reasoning_levels": [ "low", @@ -649,12 +623,12 @@ { "id": "deepseek/deepseek-v3.2-exp", "name": "DeepSeek: DeepSeek V3.2 Exp", - "cost_per_1m_in": 0.21, - "cost_per_1m_out": 0.32, + "cost_per_1m_in": 0.27, + "cost_per_1m_out": 0.41, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0.16799999999999998, + "cost_per_1m_out_cached": 0, "context_window": 163840, - "default_max_tokens": 16384, + "default_max_tokens": 32768, "can_reason": true, "reasoning_levels": [ "low", @@ -669,11 +643,11 @@ "id": "deepseek/deepseek-r1", "name": "DeepSeek: R1", "cost_per_1m_in": 0.7, - "cost_per_1m_out": 2.4, + "cost_per_1m_out": 2.5, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, - "context_window": 163840, - "default_max_tokens": 81920, + "context_window": 64000, + "default_max_tokens": 8000, "can_reason": true, "reasoning_levels": [ "low", @@ -687,10 +661,10 @@ { "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.7, + "cost_per_1m_out": 2.5, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0, + "cost_per_1m_out_cached": 0.35, "context_window": 163840, "default_max_tokens": 16384, "can_reason": true, @@ -703,12 +677,31 @@ "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.11, + "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", "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_in_cached": 0.0833, "cost_per_1m_out_cached": 0.024999999999999998, "context_window": 1048576, "default_max_tokens": 4096, @@ -747,7 +740,7 @@ "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_in_cached": 0.08333333333333334, "cost_per_1m_out_cached": 0.03, "context_window": 1048576, "default_max_tokens": 32767, @@ -766,7 +759,7 @@ "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_in_cached": 0.0833, "cost_per_1m_out_cached": 0.01, "context_window": 1048576, "default_max_tokens": 32767, @@ -785,10 +778,10 @@ "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, + "cost_per_1m_in_cached": 0.0833, + "cost_per_1m_out_cached": 0.01, "context_window": 1048576, - "default_max_tokens": 32768, + "default_max_tokens": 32767, "can_reason": true, "reasoning_levels": [ "low", @@ -804,7 +797,7 @@ "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_in_cached": 0.0833, "cost_per_1m_out_cached": 0.075, "context_window": 1048576, "default_max_tokens": 32767, @@ -823,7 +816,7 @@ "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_in_cached": 0.375, "cost_per_1m_out_cached": 0.125, "context_window": 1048576, "default_max_tokens": 32768, @@ -842,7 +835,7 @@ "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_in_cached": 0.375, "cost_per_1m_out_cached": 0.125, "context_window": 1048576, "default_max_tokens": 32768, @@ -861,7 +854,7 @@ "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_in_cached": 0.375, "cost_per_1m_out_cached": 0.125, "context_window": 1048576, "default_max_tokens": 32768, @@ -899,7 +892,7 @@ "name": "Google: Gemini 3 Pro Preview", "cost_per_1m_in": 2, "cost_per_1m_out": 12, - "cost_per_1m_in_cached": 2.375, + "cost_per_1m_in_cached": 0.375, "cost_per_1m_out_cached": 0.19999999999999998, "context_window": 1048576, "default_max_tokens": 32768, @@ -913,6 +906,32 @@ "supports_attachments": true, "options": {} }, + { + "id": "google/gemma-3-27b-it", + "name": "Google: Gemma 3 27B", + "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": 96000, + "default_max_tokens": 48000, + "can_reason": false, + "supports_attachments": true, + "options": {} + }, + { + "id": "google/gemma-3-27b-it:free", + "name": "Google: Gemma 3 27B (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": false, + "supports_attachments": true, + "options": {} + }, { "id": "inception/mercury", "name": "Inception: Mercury", @@ -955,25 +974,12 @@ { "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": 0.88, + "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, - "supports_attachments": false, - "options": {} - }, - { - "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, + "default_max_tokens": 13107, "can_reason": false, "supports_attachments": false, "options": {} @@ -1007,12 +1013,12 @@ { "id": "meta-llama/llama-4-maverick", "name": "Meta: Llama 4 Maverick", - "cost_per_1m_in": 0.27, - "cost_per_1m_out": 0.85, + "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": 1048576, - "default_max_tokens": 104857, + "context_window": 131072, + "default_max_tokens": 4096, "can_reason": false, "supports_attachments": true, "options": {} @@ -1054,10 +1060,10 @@ "name": "MiniMax: MiniMax M2.1", "cost_per_1m_in": 0.3, "cost_per_1m_out": 1.2, - "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0, + "cost_per_1m_in_cached": 0.375, + "cost_per_1m_out_cached": 0.03, "context_window": 204800, - "default_max_tokens": 20480, + "default_max_tokens": 65536, "can_reason": true, "reasoning_levels": [ "low", @@ -1250,19 +1256,6 @@ "supports_attachments": false, "options": {} }, - { - "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, - "supports_attachments": false, - "options": {} - }, { "id": "mistralai/mistral-large-2512", "name": "Mistral: Mistral Large 3 2512", @@ -1344,12 +1337,12 @@ { "id": "mistralai/mistral-small-3.2-24b-instruct", "name": "Mistral: Mistral Small 3.2 24B", - "cost_per_1m_in": 0.06, - "cost_per_1m_out": 0.18, + "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": 65536, + "default_max_tokens": 13107, "can_reason": false, "supports_attachments": true, "options": {} @@ -1461,12 +1454,12 @@ { "id": "moonshotai/kimi-k2-0905:exacto", "name": "MoonshotAI: Kimi K2 0905 (exacto)", - "cost_per_1m_in": 1, - "cost_per_1m_out": 3, + "cost_per_1m_in": 1.15, + "cost_per_1m_out": 8, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0, + "cost_per_1m_out_cached": 0.15, "context_window": 262144, - "default_max_tokens": 8192, + "default_max_tokens": 26214, "can_reason": false, "supports_attachments": false, "options": {} @@ -1477,7 +1470,7 @@ "cost_per_1m_in": 0.6, "cost_per_1m_out": 2.5, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0, + "cost_per_1m_out_cached": 0.15, "context_window": 262144, "default_max_tokens": 131072, "can_reason": true, @@ -1649,25 +1642,6 @@ "supports_attachments": false, "options": {} }, - { - "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, - "reasoning_levels": [ - "low", - "medium", - "high" - ], - "default_reasoning_effort": "medium", - "supports_attachments": true, - "options": {} - }, { "id": "openai/gpt-4-turbo", "name": "OpenAI: GPT-4 Turbo", @@ -2123,6 +2097,25 @@ "supports_attachments": true, "options": {} }, + { + "id": "openai/gpt-5.2-codex", + "name": "OpenAI: GPT-5.2-Codex", + "cost_per_1m_in": 1.75, + "cost_per_1m_out": 14, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0.175, + "context_window": 400000, + "default_max_tokens": 64000, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true, + "options": {} + }, { "id": "openai/gpt-oss-120b", "name": "OpenAI: gpt-oss-120b", @@ -2145,12 +2138,12 @@ { "id": "openai/gpt-oss-120b:exacto", "name": "OpenAI: gpt-oss-120b (exacto)", - "cost_per_1m_in": 0.15, - "cost_per_1m_out": 0.6, + "cost_per_1m_in": 0.039, + "cost_per_1m_out": 0.19, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 131072, - "default_max_tokens": 32768, + "default_max_tokens": 13107, "can_reason": true, "reasoning_levels": [ "low", @@ -2579,12 +2572,12 @@ { "id": "qwen/qwen3-235b-a22b-2507", "name": "Qwen: Qwen3 235B A22B Instruct 2507", - "cost_per_1m_in": 0.08, - "cost_per_1m_out": 0.55, + "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": 262144, - "default_max_tokens": 32768, + "default_max_tokens": 131072, "can_reason": false, "supports_attachments": false, "options": {} @@ -2611,8 +2604,8 @@ { "id": "qwen/qwen3-30b-a3b", "name": "Qwen: Qwen3 30B A3B", - "cost_per_1m_in": 0.08, - "cost_per_1m_out": 0.28, + "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, @@ -2643,12 +2636,12 @@ { "id": "qwen/qwen3-32b", "name": "Qwen: Qwen3 32B", - "cost_per_1m_in": 0.15, - "cost_per_1m_out": 0.5, + "cost_per_1m_in": 0.39999999999999997, + "cost_per_1m_out": 0.7999999999999999, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 131072, - "default_max_tokens": 4000, + "default_max_tokens": 16384, "can_reason": true, "reasoning_levels": [ "low", @@ -2700,12 +2693,12 @@ { "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.28, + "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, "supports_attachments": false, "options": {} @@ -2714,11 +2707,11 @@ "id": "qwen/qwen3-coder", "name": "Qwen: Qwen3 Coder 480B A35B", "cost_per_1m_in": 0.22, - "cost_per_1m_out": 1.7999999999999998, + "cost_per_1m_out": 0.95, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 262144, - "default_max_tokens": 32768, + "default_max_tokens": 131072, "can_reason": false, "supports_attachments": false, "options": {} @@ -2791,8 +2784,8 @@ { "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.2, + "cost_per_1m_in": 0.09999999999999999, + "cost_per_1m_out": 0.7999999999999999, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 262144, @@ -2801,6 +2794,19 @@ "supports_attachments": false, "options": {} }, + { + "id": "qwen/qwen3-next-80b-a3b-instruct:free", + "name": "Qwen: Qwen3 Next 80B A3B 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": 262144, + "default_max_tokens": 26214, + "can_reason": false, + "supports_attachments": false, + "options": {} + }, { "id": "qwen/qwen3-next-80b-a3b-thinking", "name": "Qwen: Qwen3 Next 80B A3B Thinking", @@ -2836,12 +2842,12 @@ { "id": "qwen/qwen3-vl-30b-a3b-instruct", "name": "Qwen: Qwen3 VL 30B A3B Instruct", - "cost_per_1m_in": 0.29, - "cost_per_1m_out": 1, + "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": 262144, - "default_max_tokens": 131072, + "default_max_tokens": 26214, "can_reason": false, "supports_attachments": true, "options": {} @@ -2849,12 +2855,12 @@ { "id": "qwen/qwen3-vl-30b-a3b-thinking", "name": "Qwen: Qwen3 VL 30B A3B Thinking", - "cost_per_1m_in": 0.29, + "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": 262144, - "default_max_tokens": 131072, + "context_window": 131072, + "default_max_tokens": 16384, "can_reason": true, "reasoning_levels": [ "low", @@ -2868,12 +2874,12 @@ { "id": "qwen/qwen3-vl-8b-instruct", "name": "Qwen: Qwen3 VL 8B Instruct", - "cost_per_1m_in": 0.18, - "cost_per_1m_out": 0.7, + "cost_per_1m_in": 0.25, + "cost_per_1m_out": 0.75, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, - "context_window": 256000, - "default_max_tokens": 16384, + "context_window": 262144, + "default_max_tokens": 131072, "can_reason": false, "supports_attachments": true, "options": {} @@ -3031,6 +3037,25 @@ "supports_attachments": false, "options": {} }, + { + "id": "xiaomi/mimo-v2-flash", + "name": "Xiaomi: MiMo-V2-Flash", + "cost_per_1m_in": 0.09, + "cost_per_1m_out": 0.29, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 262144, + "default_max_tokens": 26214, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": false, + "options": {} + }, { "id": "xiaomi/mimo-v2-flash:free", "name": "Xiaomi: MiMo-V2-Flash (free)", @@ -3085,12 +3110,12 @@ { "id": "z-ai/glm-4.5-air", "name": "Z.AI: GLM 4.5 Air", - "cost_per_1m_in": 0.13, - "cost_per_1m_out": 0.85, + "cost_per_1m_in": 0.14, + "cost_per_1m_out": 0.86, "cost_per_1m_in_cached": 0, "cost_per_1m_out_cached": 0, "context_window": 131072, - "default_max_tokens": 49152, + "default_max_tokens": 65536, "can_reason": true, "reasoning_levels": [ "low", @@ -3183,9 +3208,9 @@ "cost_per_1m_in": 0.3, "cost_per_1m_out": 0.8999999999999999, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0.055, + "cost_per_1m_out_cached": 0, "context_window": 131072, - "default_max_tokens": 16384, + "default_max_tokens": 65536, "can_reason": true, "reasoning_levels": [ "low", @@ -3215,13 +3240,32 @@ "supports_attachments": false, "options": {} }, + { + "id": "z-ai/glm-4.7-flash", + "name": "Z.AI: GLM 4.7 Flash", + "cost_per_1m_in": 0.07, + "cost_per_1m_out": 0.43, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0.006, + "context_window": 200000, + "default_max_tokens": 64000, + "can_reason": true, + "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": 3, - "cost_per_1m_out": 15, + "cost_per_1m_in": 5, + "cost_per_1m_out": 25, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0.75, + "cost_per_1m_out_cached": 1.25, "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, @@ -3231,10 +3275,10 @@ { "id": "x-ai/grok-3-beta", "name": "xAI: Grok 3 Beta", - "cost_per_1m_in": 3, - "cost_per_1m_out": 15, + "cost_per_1m_in": 5, + "cost_per_1m_out": 25, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0.75, + "cost_per_1m_out_cached": 1.25, "context_window": 131072, "default_max_tokens": 13107, "can_reason": false, @@ -3244,10 +3288,10 @@ { "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": 0.6, + "cost_per_1m_out": 4, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0.075, + "cost_per_1m_out_cached": 0.15, "context_window": 131072, "default_max_tokens": 13107, "can_reason": true, @@ -3263,10 +3307,10 @@ { "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": 0.6, + "cost_per_1m_out": 4, "cost_per_1m_in_cached": 0, - "cost_per_1m_out_cached": 0.075, + "cost_per_1m_out_cached": 0.15, "context_window": 131072, "default_max_tokens": 13107, "can_reason": true,