From c5d01cd4422fef384d4d568f5f786426884ac032 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 25 Sep 2026 17:07:44 +0000 Subject: [PATCH] chore: sync public mirror from internal --- .repository-projection.json | 6 +- .../local-host-rs/src/model_catalog_data.json | 132 +++++++--- .../src/model_facts_generated.rs | 32 ++- .../src/model_facts_resolution.generated.json | 242 +++++++++--------- scripts/fetch-model-catalog.mjs | 41 ++- 5 files changed, 258 insertions(+), 195 deletions(-) diff --git a/.repository-projection.json b/.repository-projection.json index 53d92fc77..30170ca7e 100644 --- a/.repository-projection.json +++ b/.repository-projection.json @@ -3,11 +3,11 @@ "projection": "deixic-code", "projectionSchemaVersion": 1, "sourceRepository": "dx-corp/mono", - "sourceSha": "25379a89235f6304d1224860af56660463a1d4d1", + "sourceSha": "db8f2a52f9012c084df1f5b6ff295b9c601bdf82", "destinationRepository": "dx-corp/code", - "priorProjectedBase": "74421d19c2472577c14324051bf7b13343077bf1", + "priorProjectedBase": "92406613ed6ad9642c8cb36d97585cd0bc89c8fd", "definitionDigest": "82936441c776e3e8edb5d215a75007ec9714a233f489d460075d79d5ef5ba32f", "toolDigest": "89cbdbe1d79917bad52655817aab0eb545b89183915380eaedc3217f014e6715", - "contentDigest": "c6790f993bba397f0d933aef5b096727bf3d2508be70cdfbcb44494093f5c98a", + "contentDigest": "098ea18a668ac380aebd7dcd2e73efe4d6862385619d68e5cf905e9c9ccc18c8", "publicationEligible": true } diff --git a/packages/local-host-rs/src/model_catalog_data.json b/packages/local-host-rs/src/model_catalog_data.json index 3153409d4..6ef6b0bcb 100644 --- a/packages/local-host-rs/src/model_catalog_data.json +++ b/packages/local-host-rs/src/model_catalog_data.json @@ -1,5 +1,5 @@ { - "generated_at": 1790235227, + "generated_at": 1790322601, "source": "https://models.dev/api.json+https://openrouter.ai/api/v1/models", "vendor_corrections": [ { @@ -2768,7 +2768,7 @@ }, "cost": { "input": 0.04, - "output": 1, + "output": 0.49, "cache_read": 0.01 }, "verification": { @@ -2791,9 +2791,9 @@ "temperature": true }, "cost": { - "input": 0.39, - "output": 2.9, - "cache_read": 0.25 + "input": 0.09984, + "output": 2.88, + "cache_read": 0.08832 }, "verification": { "state": "catalog", @@ -2892,9 +2892,9 @@ "temperature": true }, "cost": { - "input": 1.4, - "output": 10.75, - "cache_read": 0.3 + "input": 0.8845, + "output": 10.5346, + "cache_read": 0.33 }, "verification": { "state": "catalog", @@ -3095,9 +3095,9 @@ "temperature": true }, "cost": { - "input": 0.5625, - "output": 2.5, - "cache_read": 0.125 + "input": 0.5614, + "output": 1.7644, + "cache_read": 0.10426 }, "verification": { "state": "catalog", @@ -4409,9 +4409,9 @@ "temperature": true }, "cost": { - "input": 0.088606, - "output": 0.177212, - "cache_read": 0.017721 + "input": 0.049, + "output": 0.098, + "cache_read": 0.0098 }, "status": "deprecated", "verification": { @@ -4486,9 +4486,9 @@ "temperature": true }, "cost": { - "input": 0.9396, - "output": 1.8792, - "cache_read": 0.0783 + "input": 0.783, + "output": 1.566, + "cache_read": 0.06525 }, "verification": { "state": "catalog", @@ -4532,13 +4532,13 @@ "reasoning": true, "streaming": true, "context_tokens": 1048576, - "output_tokens": 131072, + "output_tokens": 393216, "temperature": true }, "cost": { - "input": 0.14, - "output": 0.42, - "cache_read": 0.0042 + "input": 0.3, + "output": 1.2, + "cache_read": 0.006 }, "verification": { "state": "catalog", @@ -6354,6 +6354,31 @@ "source": "openrouter" } }, + { + "id": "mistralai/devstral-2512", + "name": "Mistral: Devstral 2 2512", + "provider": "openrouter", + "description": "Devstral 2 is a state-of-the-art open-source model by Mistral AI specializing in agentic coding. It is a…", + "capabilities": { + "protocol": "openai-chat", + "tools": true, + "vision": false, + "reasoning": false, + "streaming": true, + "context_tokens": 262144, + "output_tokens": 209715, + "temperature": true + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.04 + }, + "verification": { + "state": "catalog", + "source": "openrouter" + } + }, { "id": "mistralai/ministral-14b-2512", "name": "Mistral: Ministral 3 14B 2512", @@ -6479,6 +6504,31 @@ "source": "openrouter" } }, + { + "id": "mistralai/mistral-large-2512", + "name": "Mistral: Mistral Large 3 2512", + "provider": "openrouter", + "description": "Mistral Large 3 2512 is Mistral’s most capable model to date, featuring a sparse mixture-of-experts architecture with…", + "capabilities": { + "protocol": "openai-chat", + "tools": true, + "vision": true, + "reasoning": false, + "streaming": true, + "context_tokens": 262144, + "output_tokens": 209715, + "temperature": true + }, + "cost": { + "input": 0.5, + "output": 1.5, + "cache_read": 0.05 + }, + "verification": { + "state": "catalog", + "source": "openrouter" + } + }, { "id": "mistralai/mistral-medium-3", "name": "Mistral: Mistral Medium 3", @@ -6888,7 +6938,7 @@ "temperature": true }, "cost": { - "input": 0.7062, + "input": 0.6562, "output": 3.3, "cache_read": 0.18 }, @@ -9945,12 +9995,12 @@ "reasoning": false, "streaming": true, "context_tokens": 262144, - "output_tokens": 32768, + "output_tokens": 16384, "temperature": true }, "cost": { - "input": 0.13, - "output": 0.52 + "input": 0.15, + "output": 0.6 }, "verification": { "state": "catalog", @@ -11025,7 +11075,7 @@ "vision": false, "reasoning": false, "streaming": true, - "context_tokens": 32768, + "context_tokens": 8192, "output_tokens": 4096, "temperature": true }, @@ -11890,9 +11940,9 @@ "temperature": true }, "cost": { - "input": 0.4, - "output": 1.75, - "cache_read": 0.08 + "input": 0.6, + "output": 2.2, + "cache_read": 0.11 }, "verification": { "state": "catalog", @@ -11985,13 +12035,13 @@ "reasoning": true, "streaming": true, "context_tokens": 204800, - "output_tokens": 128000, + "output_tokens": 131072, "temperature": true }, "cost": { - "input": 0.966, - "output": 3.036, - "cache_read": 0.1794 + "input": 0.9646, + "output": 3.0316, + "cache_read": 0.17914 }, "verification": { "state": "catalog", @@ -12058,13 +12108,13 @@ "reasoning": true, "streaming": true, "context_tokens": 1310720, - "output_tokens": 131072, + "output_tokens": 943717, "temperature": true }, "cost": { - "input": 0.84, - "output": 2.64, - "cache_read": 0.156 + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 }, "verification": { "state": "catalog", @@ -12083,13 +12133,13 @@ "reasoning": true, "streaming": true, "context_tokens": 1310720, - "output_tokens": 943718, + "output_tokens": 128000, "temperature": true }, "cost": { - "input": 0.15, - "output": 0.5, - "cache_read": 0.05 + "input": 0.045, + "output": 0.14, + "cache_read": 0.01 }, "verification": { "state": "catalog", diff --git a/packages/local-host-rs/src/model_facts_generated.rs b/packages/local-host-rs/src/model_facts_generated.rs index 3db1c9ea8..5cf4c5f0f 100644 --- a/packages/local-host-rs/src/model_facts_generated.rs +++ b/packages/local-host-rs/src/model_facts_generated.rs @@ -93,12 +93,12 @@ pub static MODEL_FACTS: &[(&str, ModelFacts)] = &[ ("deepseek/deepseek-v3.1-terminus", ModelFacts { context_window: 163_840, max_output_tokens: Some(32_768), input_per_million: Some(0.27), output_per_million: Some(1.0), cache_read_per_million: Some(0.135), cache_write_per_million: None }), ("deepseek/deepseek-v3.2", ModelFacts { context_window: 163_840, max_output_tokens: Some(65_536), input_per_million: Some(0.269), output_per_million: Some(0.4), cache_read_per_million: Some(0.1345), cache_write_per_million: None }), ("deepseek/deepseek-v3.2-exp", ModelFacts { context_window: 163_840, max_output_tokens: Some(65_536), input_per_million: Some(0.27), output_per_million: Some(0.41), cache_read_per_million: None, cache_write_per_million: None }), - ("deepseek/deepseek-v4-flash", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(384_000), input_per_million: Some(0.088606), output_per_million: Some(0.177212), cache_read_per_million: Some(0.017721), cache_write_per_million: None }), + ("deepseek/deepseek-v4-flash", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(384_000), input_per_million: Some(0.049), output_per_million: Some(0.098), cache_read_per_million: Some(0.0098), cache_write_per_million: None }), ("deepseek/deepseek-v4-flash-0731", ModelFacts { context_window: 1_310_720, max_output_tokens: Some(943_718), input_per_million: Some(0.03), output_per_million: Some(0.32), cache_read_per_million: Some(0.016), cache_write_per_million: None }), ("deepseek/deepseek-v4-flash-vision-exp", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(393_216), input_per_million: Some(0.22), output_per_million: Some(0.66), cache_read_per_million: Some(0.007), cache_write_per_million: None }), - ("deepseek/deepseek-v4-pro", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(384_000), input_per_million: Some(0.9396), output_per_million: Some(1.8792), cache_read_per_million: Some(0.0783), cache_write_per_million: None }), + ("deepseek/deepseek-v4-pro", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(384_000), input_per_million: Some(0.783), output_per_million: Some(1.566), cache_read_per_million: Some(0.06525), cache_write_per_million: None }), ("deepseek/deepseek-v4-pro-0813", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(384_000), input_per_million: Some(0.462), output_per_million: Some(1.386), cache_read_per_million: Some(0.0154), cache_write_per_million: None }), - ("deepseek/deepseek-v4.1-flash", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(131_072), input_per_million: Some(0.14), output_per_million: Some(0.42), cache_read_per_million: Some(0.0042), cache_write_per_million: None }), + ("deepseek/deepseek-v4.1-flash", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(393_216), input_per_million: Some(0.3), output_per_million: Some(1.2), cache_read_per_million: Some(0.006), cache_write_per_million: None }), ("dots-studio/dots-3-note-preview:free", ModelFacts { context_window: 512_000, max_output_tokens: None, input_per_million: Some(0.0), output_per_million: Some(0.0), cache_read_per_million: None, cache_write_per_million: None }), ("fireworks/ember-1", ModelFacts { context_window: 1_048_576, max_output_tokens: None, input_per_million: Some(3.0), output_per_million: Some(15.0), cache_read_per_million: Some(0.3), cache_write_per_million: None }), ("gemini-2.5-computer-use-preview-10-2025", ModelFacts { context_window: 128_000, max_output_tokens: Some(64_000), input_per_million: Some(1.25), output_per_million: Some(10.0), cache_read_per_million: None, cache_write_per_million: None }), @@ -227,11 +227,13 @@ pub static MODEL_FACTS: &[(&str, ModelFacts)] = &[ ("minimax/minimax-m2.7", ModelFacts { context_window: 204_800, max_output_tokens: Some(131_072), input_per_million: Some(0.3), output_per_million: Some(1.2), cache_read_per_million: Some(0.06), cache_write_per_million: None }), ("minimax/minimax-m3", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(512_000), input_per_million: Some(0.3), output_per_million: Some(1.2), cache_read_per_million: Some(0.06), cache_write_per_million: None }), ("mistralai/codestral-2508", ModelFacts { context_window: 256_000, max_output_tokens: Some(204_800), input_per_million: Some(0.3), output_per_million: Some(0.9), cache_read_per_million: Some(0.03), cache_write_per_million: None }), + ("mistralai/devstral-2512", ModelFacts { context_window: 262_144, max_output_tokens: Some(209_715), input_per_million: Some(0.4), output_per_million: Some(2.0), cache_read_per_million: Some(0.04), cache_write_per_million: None }), ("mistralai/ministral-14b-2512", ModelFacts { context_window: 262_144, max_output_tokens: Some(209_715), input_per_million: Some(0.2), output_per_million: Some(0.2), cache_read_per_million: Some(0.02), cache_write_per_million: None }), ("mistralai/ministral-3b-2512", ModelFacts { context_window: 131_072, max_output_tokens: Some(104_857), input_per_million: Some(0.1), output_per_million: Some(0.1), cache_read_per_million: Some(0.01), cache_write_per_million: None }), ("mistralai/ministral-8b-2512", ModelFacts { context_window: 262_144, max_output_tokens: Some(209_715), input_per_million: Some(0.15), output_per_million: Some(0.15), cache_read_per_million: Some(0.015), cache_write_per_million: None }), ("mistralai/mistral-large", ModelFacts { context_window: 128_000, max_output_tokens: Some(102_400), input_per_million: Some(2.0), output_per_million: Some(6.0), cache_read_per_million: Some(0.2), cache_write_per_million: None }), ("mistralai/mistral-large-2407", ModelFacts { context_window: 131_072, max_output_tokens: Some(104_857), input_per_million: Some(2.0), output_per_million: Some(6.0), cache_read_per_million: Some(0.2), cache_write_per_million: None }), + ("mistralai/mistral-large-2512", ModelFacts { context_window: 262_144, max_output_tokens: Some(209_715), input_per_million: Some(0.5), output_per_million: Some(1.5), cache_read_per_million: Some(0.05), cache_write_per_million: None }), ("mistralai/mistral-medium-3", ModelFacts { context_window: 131_072, max_output_tokens: Some(104_857), input_per_million: Some(0.4), output_per_million: Some(2.0), cache_read_per_million: Some(0.04), cache_write_per_million: None }), ("mistralai/mistral-medium-3-5", ModelFacts { context_window: 262_144, max_output_tokens: Some(209_715), input_per_million: Some(1.5), output_per_million: Some(7.5), cache_read_per_million: None, cache_write_per_million: None }), ("mistralai/mistral-medium-3.1", ModelFacts { context_window: 131_072, max_output_tokens: Some(104_857), input_per_million: Some(0.4), output_per_million: Some(2.0), cache_read_per_million: Some(0.04), cache_write_per_million: None }), @@ -248,7 +250,7 @@ pub static MODEL_FACTS: &[(&str, ModelFacts)] = &[ ("moonshotai/kimi-k2-thinking", ModelFacts { context_window: 262_144, max_output_tokens: Some(98_304), input_per_million: Some(0.6), output_per_million: Some(2.5), cache_read_per_million: Some(0.15), cache_write_per_million: None }), ("moonshotai/kimi-k2.5", ModelFacts { context_window: 262_144, max_output_tokens: Some(235_929), input_per_million: Some(0.45), output_per_million: Some(2.25), cache_read_per_million: Some(0.07), cache_write_per_million: None }), ("moonshotai/kimi-k2.6", ModelFacts { context_window: 262_144, max_output_tokens: Some(235_929), input_per_million: Some(0.95), output_per_million: Some(4.0), cache_read_per_million: Some(0.16), cache_write_per_million: None }), - ("moonshotai/kimi-k2.7-code", ModelFacts { context_window: 262_144, max_output_tokens: Some(235_929), input_per_million: Some(0.7062), output_per_million: Some(3.3), cache_read_per_million: Some(0.18), cache_write_per_million: None }), + ("moonshotai/kimi-k2.7-code", ModelFacts { context_window: 262_144, max_output_tokens: Some(235_929), input_per_million: Some(0.6562), output_per_million: Some(3.3), cache_read_per_million: Some(0.18), cache_write_per_million: None }), ("moonshotai/kimi-k3", ModelFacts { context_window: 1_048_576, max_output_tokens: None, input_per_million: Some(3.0), output_per_million: Some(15.0), cache_read_per_million: Some(0.3), cache_write_per_million: None }), ("morph/morph-v3-fast", ModelFacts { context_window: 81_920, max_output_tokens: Some(38_000), input_per_million: Some(0.8), output_per_million: Some(1.2), cache_read_per_million: None, cache_write_per_million: None }), ("morph/morph-v3-large", ModelFacts { context_window: 262_144, max_output_tokens: Some(131_072), input_per_million: Some(0.9), output_per_million: Some(1.9), cache_read_per_million: None, cache_write_per_million: None }), @@ -375,7 +377,7 @@ pub static MODEL_FACTS: &[(&str, ModelFacts)] = &[ ("qwen/qwen3-next-80b-a3b-thinking", ModelFacts { context_window: 262_144, max_output_tokens: Some(235_929), input_per_million: Some(0.15), output_per_million: Some(1.2), cache_read_per_million: None, cache_write_per_million: None }), ("qwen/qwen3-vl-235b-a22b-instruct", ModelFacts { context_window: 262_144, max_output_tokens: Some(32_768), input_per_million: Some(0.21), output_per_million: Some(1.9), cache_read_per_million: Some(0.1), cache_write_per_million: None }), ("qwen/qwen3-vl-235b-a22b-thinking", ModelFacts { context_window: 131_072, max_output_tokens: Some(32_768), input_per_million: Some(0.4), output_per_million: Some(4.0), cache_read_per_million: None, cache_write_per_million: None }), - ("qwen/qwen3-vl-30b-a3b-instruct", ModelFacts { context_window: 262_144, max_output_tokens: Some(32_768), input_per_million: Some(0.13), output_per_million: Some(0.52), cache_read_per_million: None, cache_write_per_million: None }), + ("qwen/qwen3-vl-30b-a3b-instruct", ModelFacts { context_window: 262_144, max_output_tokens: Some(16_384), input_per_million: Some(0.15), output_per_million: Some(0.6), cache_read_per_million: None, cache_write_per_million: None }), ("qwen/qwen3-vl-30b-a3b-thinking", ModelFacts { context_window: 262_144, max_output_tokens: Some(32_768), input_per_million: Some(0.2), output_per_million: Some(2.4), cache_read_per_million: None, cache_write_per_million: None }), ("qwen/qwen3-vl-32b-instruct", ModelFacts { context_window: 131_072, max_output_tokens: Some(32_768), input_per_million: Some(0.104), output_per_million: Some(0.416), cache_read_per_million: None, cache_write_per_million: None }), ("qwen/qwen3-vl-8b-instruct", ModelFacts { context_window: 262_144, max_output_tokens: Some(32_768), input_per_million: Some(0.117), output_per_million: Some(0.455), cache_read_per_million: None, cache_write_per_million: None }), @@ -419,7 +421,7 @@ pub static MODEL_FACTS: &[(&str, ModelFacts)] = &[ ("stepfun/step-3.7-flash", ModelFacts { context_window: 262_144, max_output_tokens: Some(230_400), input_per_million: Some(0.2), output_per_million: Some(1.15), cache_read_per_million: Some(0.04), cache_write_per_million: None }), ("tencent/hunyuan-a13b-instruct", ModelFacts { context_window: 131_072, max_output_tokens: Some(117_964), input_per_million: Some(0.14), output_per_million: Some(0.57), cache_read_per_million: None, cache_write_per_million: None }), ("tencent/hy-mt2-1.8b", ModelFacts { context_window: 8_192, max_output_tokens: Some(4_096), input_per_million: Some(0.044), output_per_million: Some(0.177), cache_read_per_million: None, cache_write_per_million: None }), - ("tencent/hy-mt2-30b-a3b", ModelFacts { context_window: 32_768, max_output_tokens: Some(4_096), input_per_million: Some(0.074), output_per_million: Some(0.295), cache_read_per_million: None, cache_write_per_million: None }), + ("tencent/hy-mt2-30b-a3b", ModelFacts { context_window: 8_192, max_output_tokens: Some(4_096), input_per_million: Some(0.074), output_per_million: Some(0.295), cache_read_per_million: None, cache_write_per_million: None }), ("tencent/hy-mt2-7b", ModelFacts { context_window: 8_192, max_output_tokens: Some(4_096), input_per_million: Some(0.074), output_per_million: Some(0.295), cache_read_per_million: None, cache_write_per_million: None }), ("tencent/hy3", ModelFacts { context_window: 262_144, max_output_tokens: Some(128_000), input_per_million: Some(0.132), output_per_million: Some(0.528), cache_read_per_million: Some(0.033), cache_write_per_million: None }), ("tencent/hy3-preview", ModelFacts { context_window: 262_144, max_output_tokens: Some(235_929), input_per_million: Some(0.18), output_per_million: Some(0.6), cache_read_per_million: Some(0.06), cache_write_per_million: None }), @@ -454,15 +456,15 @@ pub static MODEL_FACTS: &[(&str, ModelFacts)] = &[ ("z-ai/glm-4.5v", ModelFacts { context_window: 65_536, max_output_tokens: Some(16_384), input_per_million: Some(0.6), output_per_million: Some(1.8), cache_read_per_million: Some(0.11), cache_write_per_million: None }), ("z-ai/glm-4.6", ModelFacts { context_window: 204_800, max_output_tokens: Some(16_384), input_per_million: Some(0.43), output_per_million: Some(1.75), cache_read_per_million: Some(0.08), cache_write_per_million: None }), ("z-ai/glm-4.6v", ModelFacts { context_window: 131_072, max_output_tokens: Some(32_768), input_per_million: Some(0.3), output_per_million: Some(0.9), cache_read_per_million: Some(0.055), cache_write_per_million: None }), - ("z-ai/glm-4.7", ModelFacts { context_window: 204_800, max_output_tokens: Some(131_072), input_per_million: Some(0.4), output_per_million: Some(1.75), cache_read_per_million: Some(0.08), cache_write_per_million: None }), + ("z-ai/glm-4.7", ModelFacts { context_window: 204_800, max_output_tokens: Some(131_072), input_per_million: Some(0.6), output_per_million: Some(2.2), cache_read_per_million: Some(0.11), cache_write_per_million: None }), ("z-ai/glm-4.7-flash", ModelFacts { context_window: 200_000, max_output_tokens: Some(117_964), input_per_million: Some(0.0605), output_per_million: Some(0.4), cache_read_per_million: None, cache_write_per_million: None }), ("z-ai/glm-5", ModelFacts { context_window: 204_800, max_output_tokens: Some(128_000), input_per_million: Some(0.6), output_per_million: Some(1.92), cache_read_per_million: Some(0.12), cache_write_per_million: None }), ("z-ai/glm-5-turbo", ModelFacts { context_window: 202_752, max_output_tokens: Some(131_072), input_per_million: Some(1.2), output_per_million: Some(4.0), cache_read_per_million: Some(0.24), cache_write_per_million: None }), - ("z-ai/glm-5.1", ModelFacts { context_window: 204_800, max_output_tokens: Some(128_000), input_per_million: Some(0.966), output_per_million: Some(3.036), cache_read_per_million: Some(0.1794), cache_write_per_million: None }), + ("z-ai/glm-5.1", ModelFacts { context_window: 204_800, max_output_tokens: Some(131_072), input_per_million: Some(0.9646), output_per_million: Some(3.0316), cache_read_per_million: Some(0.17914), cache_write_per_million: None }), ("z-ai/glm-5.2", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(131_072), input_per_million: Some(0.6496), output_per_million: Some(2.0416), cache_read_per_million: Some(0.12064), cache_write_per_million: None }), ("z-ai/glm-5.2:free", ModelFacts { context_window: 32_768, max_output_tokens: None, input_per_million: Some(0.0), output_per_million: Some(0.0), cache_read_per_million: None, cache_write_per_million: None }), - ("z-ai/glm-5.3", ModelFacts { context_window: 1_310_720, max_output_tokens: Some(131_072), input_per_million: Some(0.84), output_per_million: Some(2.64), cache_read_per_million: Some(0.156), cache_write_per_million: None }), - ("z-ai/glm-5.3-flash", ModelFacts { context_window: 1_310_720, max_output_tokens: Some(943_718), input_per_million: Some(0.15), output_per_million: Some(0.5), cache_read_per_million: Some(0.05), cache_write_per_million: None }), + ("z-ai/glm-5.3", ModelFacts { context_window: 1_310_720, max_output_tokens: Some(943_717), input_per_million: Some(1.4), output_per_million: Some(4.4), cache_read_per_million: Some(0.26), cache_write_per_million: None }), + ("z-ai/glm-5.3-flash", ModelFacts { context_window: 1_310_720, max_output_tokens: Some(128_000), input_per_million: Some(0.045), output_per_million: Some(0.14), cache_read_per_million: Some(0.01), cache_write_per_million: None }), ("z-ai/glm-5.3-flashx", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(131_072), input_per_million: Some(0.37), output_per_million: Some(1.25), cache_read_per_million: Some(0.09), cache_write_per_million: None }), ("z-ai/glm-5.3-prime", ModelFacts { context_window: 1_000_000, max_output_tokens: Some(131_072), input_per_million: Some(2.8), output_per_million: Some(8.8), cache_read_per_million: Some(0.56), cache_write_per_million: None }), ("z-ai/glm-5v-turbo", ModelFacts { context_window: 202_752, max_output_tokens: Some(131_072), input_per_million: Some(1.2), output_per_million: Some(4.0), cache_read_per_million: Some(0.24), cache_write_per_million: None }), @@ -470,12 +472,12 @@ pub static MODEL_FACTS: &[(&str, ModelFacts)] = &[ ("~anthropic/claude-haiku-latest", ModelFacts { context_window: 200_000, max_output_tokens: Some(64_000), input_per_million: Some(1.0), output_per_million: Some(5.0), cache_read_per_million: Some(0.1), cache_write_per_million: Some(1.25) }), ("~anthropic/claude-opus-latest", ModelFacts { context_window: 1_000_000, max_output_tokens: Some(128_000), input_per_million: Some(4.0), output_per_million: Some(20.0), cache_read_per_million: Some(0.2), cache_write_per_million: Some(5.0) }), ("~anthropic/claude-sonnet-latest", ModelFacts { context_window: 1_000_000, max_output_tokens: Some(128_000), input_per_million: Some(2.0), output_per_million: Some(10.0), cache_read_per_million: Some(0.2), cache_write_per_million: Some(2.5) }), - ("~deepseek/deepseek-flash-latest", ModelFacts { context_window: 1_048_576, max_output_tokens: None, input_per_million: Some(0.04), output_per_million: Some(1.0), cache_read_per_million: Some(0.01), cache_write_per_million: None }), - ("~deepseek/deepseek-pro-latest", ModelFacts { context_window: 1_048_576, max_output_tokens: None, input_per_million: Some(0.39), output_per_million: Some(2.9), cache_read_per_million: Some(0.25), cache_write_per_million: None }), + ("~deepseek/deepseek-flash-latest", ModelFacts { context_window: 1_048_576, max_output_tokens: None, input_per_million: Some(0.04), output_per_million: Some(0.49), cache_read_per_million: Some(0.01), cache_write_per_million: None }), + ("~deepseek/deepseek-pro-latest", ModelFacts { context_window: 1_048_576, max_output_tokens: None, input_per_million: Some(0.09984), output_per_million: Some(2.88), cache_read_per_million: Some(0.08832), cache_write_per_million: None }), ("~deepseek/deepseek-v4-flash-latest", ModelFacts { context_window: 1_310_720, max_output_tokens: Some(943_718), input_per_million: Some(0.03), output_per_million: Some(0.32), cache_read_per_million: Some(0.016), cache_write_per_million: None }), ("~google/gemini-flash-latest", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(65_536), input_per_million: Some(0.75), output_per_million: Some(3.75), cache_read_per_million: Some(0.075), cache_write_per_million: Some(0.041667) }), ("~google/gemini-pro-latest", ModelFacts { context_window: 1_048_576, max_output_tokens: Some(65_536), input_per_million: Some(2.0), output_per_million: Some(12.0), cache_read_per_million: Some(0.2), cache_write_per_million: Some(0.375) }), - ("~moonshotai/kimi-latest", ModelFacts { context_window: 1_048_576, max_output_tokens: None, input_per_million: Some(1.4), output_per_million: Some(10.75), cache_read_per_million: Some(0.3), cache_write_per_million: None }), + ("~moonshotai/kimi-latest", ModelFacts { context_window: 1_048_576, max_output_tokens: None, input_per_million: Some(0.8845), output_per_million: Some(10.5346), cache_read_per_million: Some(0.33), cache_write_per_million: None }), ("~openai/gpt-astra-latest", ModelFacts { context_window: 1_050_000, max_output_tokens: Some(128_000), input_per_million: Some(10.0), output_per_million: Some(50.0), cache_read_per_million: Some(1.0), cache_write_per_million: Some(12.5) }), ("~openai/gpt-luna-latest", ModelFacts { context_window: 1_050_000, max_output_tokens: Some(128_000), input_per_million: Some(0.1), output_per_million: Some(0.5), cache_read_per_million: Some(0.01), cache_write_per_million: Some(0.125) }), ("~openai/gpt-mini-latest", ModelFacts { context_window: 400_000, max_output_tokens: Some(128_000), input_per_million: Some(0.75), output_per_million: Some(4.5), cache_read_per_million: Some(0.075), cache_write_per_million: None }), @@ -483,7 +485,7 @@ pub static MODEL_FACTS: &[(&str, ModelFacts)] = &[ ("~openai/gpt-terra-latest", ModelFacts { context_window: 1_050_000, max_output_tokens: Some(128_000), input_per_million: Some(2.0), output_per_million: Some(12.0), cache_read_per_million: Some(0.2), cache_write_per_million: Some(2.5) }), ("~x-ai/grok-latest", ModelFacts { context_window: 500_000, max_output_tokens: None, input_per_million: Some(1.6), output_per_million: Some(4.8), cache_read_per_million: Some(0.4), cache_write_per_million: None }), ("~z-ai/glm-flash-latest", ModelFacts { context_window: 1_310_720, max_output_tokens: Some(128_000), input_per_million: Some(0.045), output_per_million: Some(0.14), cache_read_per_million: Some(0.01), cache_write_per_million: None }), - ("~z-ai/glm-latest", ModelFacts { context_window: 1_310_720, max_output_tokens: Some(131_072), input_per_million: Some(0.5625), output_per_million: Some(2.5), cache_read_per_million: Some(0.125), cache_write_per_million: None }), + ("~z-ai/glm-latest", ModelFacts { context_window: 1_310_720, max_output_tokens: Some(131_072), input_per_million: Some(0.5614), output_per_million: Some(1.7644), cache_read_per_million: Some(0.10426), cache_write_per_million: None }), ]; /// Bare name -> the one namespaced id carrying it, for names the catalog has @@ -540,6 +542,7 @@ pub static BARE_ALIASES: &[(&str, &str)] = &[ ("deepseek-v4-pro", "deepseek/deepseek-v4-pro"), ("deepseek-v4-pro-0813", "deepseek/deepseek-v4-pro-0813"), ("deepseek-v4.1-flash", "deepseek/deepseek-v4.1-flash"), + ("devstral-2512", "mistralai/devstral-2512"), ("dolphin-mistral-24b-venice-edition", "cognitivecomputations/dolphin-mistral-24b-venice-edition"), ("dots-3-note-preview:free", "dots-studio/dots-3-note-preview:free"), ("ember-1", "fireworks/ember-1"), @@ -689,6 +692,7 @@ pub static BARE_ALIASES: &[(&str, &str)] = &[ ("ministral-8b-2512", "mistralai/ministral-8b-2512"), ("mistral-large", "mistralai/mistral-large"), ("mistral-large-2407", "mistralai/mistral-large-2407"), + ("mistral-large-2512", "mistralai/mistral-large-2512"), ("mistral-medium-3", "mistralai/mistral-medium-3"), ("mistral-medium-3-5", "mistralai/mistral-medium-3-5"), ("mistral-medium-3.1", "mistralai/mistral-medium-3.1"), diff --git a/packages/local-host-rs/src/model_facts_resolution.generated.json b/packages/local-host-rs/src/model_facts_resolution.generated.json index 3c0905271..ffe105b91 100644 --- a/packages/local-host-rs/src/model_facts_resolution.generated.json +++ b/packages/local-host-rs/src/model_facts_resolution.generated.json @@ -287,17 +287,16 @@ {"probe":"minimax/minimax-m2.7:free","candidates":["minimax/minimax-m2.7:free","minimax-m2.7:free"],"resolved":null}, {"probe":"minimax/minimax-m2-7","candidates":["minimax/minimax-m2-7","minimax-m2-7"],"resolved":null}, {"probe":"minimax/minimax.m2.7","candidates":["minimax/minimax.m2.7","minimax.m2.7"],"resolved":null}, - {"probe":"mistralai/mistral-medium-3.1","candidates":["mistralai/mistral-medium-3.1","mistral-medium-3.1"],"resolved":"mistralai/mistral-medium-3.1"}, - {"probe":"mistral-medium-3.1","candidates":["mistral-medium-3.1","mistralai/mistral-medium-3.1"],"resolved":"mistralai/mistral-medium-3.1"}, - {"probe":"x-provider/mistralai/mistral-medium-3.1","candidates":["x-provider/mistralai/mistral-medium-3.1","mistral-medium-3.1","mistralai/mistral-medium-3.1"],"resolved":"mistralai/mistral-medium-3.1"}, - {"probe":"mistralai/mistral-medium-3.1:free","candidates":["mistralai/mistral-medium-3.1:free","mistral-medium-3.1:free"],"resolved":null}, - {"probe":"mistralai/mistral-medium-3-1","candidates":["mistralai/mistral-medium-3-1","mistral-medium-3-1"],"resolved":null}, - {"probe":"mistralai/mistral.medium.3.1","candidates":["mistralai/mistral.medium.3.1","mistral.medium.3.1"],"resolved":null}, - {"probe":"moonshotai/kimi-k2-0905","candidates":["moonshotai/kimi-k2-0905","kimi-k2-0905"],"resolved":"moonshotai/kimi-k2-0905"}, - {"probe":"kimi-k2-0905","candidates":["kimi-k2-0905","moonshotai/kimi-k2-0905"],"resolved":"moonshotai/kimi-k2-0905"}, - {"probe":"x-provider/moonshotai/kimi-k2-0905","candidates":["x-provider/moonshotai/kimi-k2-0905","kimi-k2-0905","moonshotai/kimi-k2-0905"],"resolved":"moonshotai/kimi-k2-0905"}, - {"probe":"moonshotai/kimi-k2-0905:free","candidates":["moonshotai/kimi-k2-0905:free","kimi-k2-0905:free"],"resolved":null}, - {"probe":"moonshotai/kimi.k2.0905","candidates":["moonshotai/kimi.k2.0905","kimi.k2.0905"],"resolved":null}, + {"probe":"mistralai/mistral-medium-3","candidates":["mistralai/mistral-medium-3","mistral-medium-3"],"resolved":"mistralai/mistral-medium-3"}, + {"probe":"mistral-medium-3","candidates":["mistral-medium-3","mistralai/mistral-medium-3"],"resolved":"mistralai/mistral-medium-3"}, + {"probe":"x-provider/mistralai/mistral-medium-3","candidates":["x-provider/mistralai/mistral-medium-3","mistral-medium-3","mistralai/mistral-medium-3"],"resolved":"mistralai/mistral-medium-3"}, + {"probe":"mistralai/mistral-medium-3:free","candidates":["mistralai/mistral-medium-3:free","mistral-medium-3:free"],"resolved":null}, + {"probe":"mistralai/mistral.medium.3","candidates":["mistralai/mistral.medium.3","mistral.medium.3"],"resolved":null}, + {"probe":"mistralai/voxtral-small-24b-2507","candidates":["mistralai/voxtral-small-24b-2507","voxtral-small-24b-2507"],"resolved":"mistralai/voxtral-small-24b-2507"}, + {"probe":"voxtral-small-24b-2507","candidates":["voxtral-small-24b-2507","mistralai/voxtral-small-24b-2507"],"resolved":"mistralai/voxtral-small-24b-2507"}, + {"probe":"x-provider/mistralai/voxtral-small-24b-2507","candidates":["x-provider/mistralai/voxtral-small-24b-2507","voxtral-small-24b-2507","mistralai/voxtral-small-24b-2507"],"resolved":"mistralai/voxtral-small-24b-2507"}, + {"probe":"mistralai/voxtral-small-24b-2507:free","candidates":["mistralai/voxtral-small-24b-2507:free","voxtral-small-24b-2507:free"],"resolved":null}, + {"probe":"mistralai/voxtral.small.24b.2507","candidates":["mistralai/voxtral.small.24b.2507","voxtral.small.24b.2507"],"resolved":null}, {"probe":"nex-agi/nex-n2.5-mini:free","candidates":["nex-agi/nex-n2.5-mini:free","nex-n2.5-mini:free"],"resolved":"nex-agi/nex-n2.5-mini:free"}, {"probe":"nex-n2.5-mini:free","candidates":["nex-n2.5-mini:free","nex-agi/nex-n2.5-mini:free"],"resolved":"nex-agi/nex-n2.5-mini:free"}, {"probe":"x-provider/nex-agi/nex-n2.5-mini:free","candidates":["x-provider/nex-agi/nex-n2.5-mini:free","nex-n2.5-mini:free","nex-agi/nex-n2.5-mini:free"],"resolved":"nex-agi/nex-n2.5-mini:free"}, @@ -310,12 +309,6 @@ {"probe":"nex-agi/nex-n2.5-pro:free:free","candidates":["nex-agi/nex-n2.5-pro:free:free","nex-n2.5-pro:free:free"],"resolved":null}, {"probe":"nex-agi/nex-n2-5-pro:free","candidates":["nex-agi/nex-n2-5-pro:free","nex-n2-5-pro:free"],"resolved":null}, {"probe":"nex.agi/nex.n2.5.pro:free","candidates":["nex.agi/nex.n2.5.pro:free","nex.n2.5.pro:free"],"resolved":null}, - {"probe":"nousresearch/hermes-3-llama-3.1-405b","candidates":["nousresearch/hermes-3-llama-3.1-405b","hermes-3-llama-3.1-405b"],"resolved":"nousresearch/hermes-3-llama-3.1-405b"}, - {"probe":"hermes-3-llama-3.1-405b","candidates":["hermes-3-llama-3.1-405b","nousresearch/hermes-3-llama-3.1-405b"],"resolved":"nousresearch/hermes-3-llama-3.1-405b"}, - {"probe":"x-provider/nousresearch/hermes-3-llama-3.1-405b","candidates":["x-provider/nousresearch/hermes-3-llama-3.1-405b","hermes-3-llama-3.1-405b","nousresearch/hermes-3-llama-3.1-405b"],"resolved":"nousresearch/hermes-3-llama-3.1-405b"}, - {"probe":"nousresearch/hermes-3-llama-3.1-405b:free","candidates":["nousresearch/hermes-3-llama-3.1-405b:free","hermes-3-llama-3.1-405b:free"],"resolved":null}, - {"probe":"nousresearch/hermes-3-llama-3-1-405b","candidates":["nousresearch/hermes-3-llama-3-1-405b","hermes-3-llama-3-1-405b"],"resolved":null}, - {"probe":"nousresearch/hermes.3.llama.3.1.405b","candidates":["nousresearch/hermes.3.llama.3.1.405b","hermes.3.llama.3.1.405b"],"resolved":null}, {"probe":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free","candidates":["nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free","nemotron-3-nano-omni-30b-a3b-reasoning:free"],"resolved":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free"}, {"probe":"nemotron-3-nano-omni-30b-a3b-reasoning:free","candidates":["nemotron-3-nano-omni-30b-a3b-reasoning:free","nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free"],"resolved":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free"}, {"probe":"x-provider/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free","candidates":["x-provider/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free","nemotron-3-nano-omni-30b-a3b-reasoning:free","nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free"],"resolved":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free"}, @@ -343,47 +336,49 @@ {"probe":"nvidia/nemotron-3.5-lightning:free:free","candidates":["nvidia/nemotron-3.5-lightning:free:free","nemotron-3.5-lightning:free:free"],"resolved":null}, {"probe":"nvidia/nemotron-3-5-lightning:free","candidates":["nvidia/nemotron-3-5-lightning:free","nemotron-3-5-lightning:free"],"resolved":null}, {"probe":"nvidia/nemotron.3.5.lightning:free","candidates":["nvidia/nemotron.3.5.lightning:free","nemotron.3.5.lightning:free"],"resolved":null}, - {"probe":"openai/gpt-4-turbo","candidates":["openai/gpt-4-turbo","gpt-4-turbo"],"resolved":"openai/gpt-4-turbo"}, - {"probe":"gpt-4-turbo","candidates":["gpt-4-turbo","openai/gpt-4-turbo"],"resolved":"openai/gpt-4-turbo"}, - {"probe":"x-provider/openai/gpt-4-turbo","candidates":["x-provider/openai/gpt-4-turbo","gpt-4-turbo","openai/gpt-4-turbo"],"resolved":"openai/gpt-4-turbo"}, - {"probe":"openai/gpt-4-turbo:free","candidates":["openai/gpt-4-turbo:free","gpt-4-turbo:free"],"resolved":null}, - {"probe":"openai/gpt.4.turbo","candidates":["openai/gpt.4.turbo","gpt.4.turbo"],"resolved":null}, - {"probe":"openai/gpt-5","candidates":["openai/gpt-5","gpt-5"],"resolved":"openai/gpt-5"}, - {"probe":"gpt-5","candidates":["gpt-5"],"resolved":"gpt-5"}, - {"probe":"x-provider/openai/gpt-5","candidates":["x-provider/openai/gpt-5","gpt-5"],"resolved":"gpt-5"}, - {"probe":"openai/gpt-5:free","candidates":["openai/gpt-5:free","gpt-5:free"],"resolved":null}, - {"probe":"openai/gpt.5","candidates":["openai/gpt.5","gpt.5"],"resolved":null}, - {"probe":"openai/gpt-5.2","candidates":["openai/gpt-5.2","gpt-5.2"],"resolved":"openai/gpt-5.2"}, - {"probe":"gpt-5.2","candidates":["gpt-5.2"],"resolved":"gpt-5.2"}, - {"probe":"x-provider/openai/gpt-5.2","candidates":["x-provider/openai/gpt-5.2","gpt-5.2"],"resolved":"gpt-5.2"}, - {"probe":"openai/gpt-5.2:free","candidates":["openai/gpt-5.2:free","gpt-5.2:free"],"resolved":null}, - {"probe":"openai/gpt-5-2","candidates":["openai/gpt-5-2","gpt-5-2"],"resolved":null}, - {"probe":"openai/gpt.5.2","candidates":["openai/gpt.5.2","gpt.5.2"],"resolved":null}, - {"probe":"openai/gpt-5.5","candidates":["openai/gpt-5.5","gpt-5.5"],"resolved":"openai/gpt-5.5"}, - {"probe":"gpt-5.5","candidates":["gpt-5.5"],"resolved":"gpt-5.5"}, - {"probe":"x-provider/openai/gpt-5.5","candidates":["x-provider/openai/gpt-5.5","gpt-5.5"],"resolved":"gpt-5.5"}, - {"probe":"openai/gpt-5.5:free","candidates":["openai/gpt-5.5:free","gpt-5.5:free"],"resolved":null}, - {"probe":"openai/gpt-5-5","candidates":["openai/gpt-5-5","gpt-5-5"],"resolved":null}, - {"probe":"openai/gpt.5.5","candidates":["openai/gpt.5.5","gpt.5.5"],"resolved":null}, - {"probe":"openai/gpt-6-luna","candidates":["openai/gpt-6-luna","gpt-6-luna"],"resolved":"openai/gpt-6-luna"}, - {"probe":"gpt-6-luna","candidates":["gpt-6-luna"],"resolved":"gpt-6-luna"}, - {"probe":"x-provider/openai/gpt-6-luna","candidates":["x-provider/openai/gpt-6-luna","gpt-6-luna"],"resolved":"gpt-6-luna"}, - {"probe":"openai/gpt-6-luna:free","candidates":["openai/gpt-6-luna:free","gpt-6-luna:free"],"resolved":null}, - {"probe":"openai/gpt.6.luna","candidates":["openai/gpt.6.luna","gpt.6.luna"],"resolved":null}, - {"probe":"openai/o1","candidates":["openai/o1","o1"],"resolved":"openai/o1"}, - {"probe":"o1","candidates":["o1","openai/o1"],"resolved":"openai/o1"}, - {"probe":"x-provider/openai/o1","candidates":["x-provider/openai/o1","o1","openai/o1"],"resolved":"openai/o1"}, - {"probe":"openai/o1:free","candidates":["openai/o1:free","o1:free"],"resolved":null}, - {"probe":"openrouter/bodybuilder","candidates":["openrouter/bodybuilder","bodybuilder"],"resolved":"openrouter/bodybuilder"}, - {"probe":"bodybuilder","candidates":["bodybuilder","openrouter/bodybuilder"],"resolved":"openrouter/bodybuilder"}, - {"probe":"x-provider/openrouter/bodybuilder","candidates":["x-provider/openrouter/bodybuilder","bodybuilder","openrouter/bodybuilder"],"resolved":"openrouter/bodybuilder"}, - {"probe":"openrouter/bodybuilder:free","candidates":["openrouter/bodybuilder:free","bodybuilder:free"],"resolved":null}, - {"probe":"poolside/laguna-s-2.1","candidates":["poolside/laguna-s-2.1","laguna-s-2.1"],"resolved":"poolside/laguna-s-2.1"}, - {"probe":"laguna-s-2.1","candidates":["laguna-s-2.1","poolside/laguna-s-2.1"],"resolved":"poolside/laguna-s-2.1"}, - {"probe":"x-provider/poolside/laguna-s-2.1","candidates":["x-provider/poolside/laguna-s-2.1","laguna-s-2.1","poolside/laguna-s-2.1"],"resolved":"poolside/laguna-s-2.1"}, + {"probe":"openai/gpt-3.5-turbo-instruct","candidates":["openai/gpt-3.5-turbo-instruct","gpt-3.5-turbo-instruct"],"resolved":"openai/gpt-3.5-turbo-instruct"}, + {"probe":"gpt-3.5-turbo-instruct","candidates":["gpt-3.5-turbo-instruct","openai/gpt-3.5-turbo-instruct"],"resolved":"openai/gpt-3.5-turbo-instruct"}, + {"probe":"x-provider/openai/gpt-3.5-turbo-instruct","candidates":["x-provider/openai/gpt-3.5-turbo-instruct","gpt-3.5-turbo-instruct","openai/gpt-3.5-turbo-instruct"],"resolved":"openai/gpt-3.5-turbo-instruct"}, + {"probe":"openai/gpt-3.5-turbo-instruct:free","candidates":["openai/gpt-3.5-turbo-instruct:free","gpt-3.5-turbo-instruct:free"],"resolved":null}, + {"probe":"openai/gpt-3-5-turbo-instruct","candidates":["openai/gpt-3-5-turbo-instruct","gpt-3-5-turbo-instruct"],"resolved":null}, + {"probe":"openai/gpt.3.5.turbo.instruct","candidates":["openai/gpt.3.5.turbo.instruct","gpt.3.5.turbo.instruct"],"resolved":null}, + {"probe":"openai/gpt-4o-mini","candidates":["openai/gpt-4o-mini","gpt-4o-mini"],"resolved":"openai/gpt-4o-mini"}, + {"probe":"gpt-4o-mini","candidates":["gpt-4o-mini"],"resolved":"gpt-4o-mini"}, + {"probe":"x-provider/openai/gpt-4o-mini","candidates":["x-provider/openai/gpt-4o-mini","gpt-4o-mini"],"resolved":"gpt-4o-mini"}, + {"probe":"openai/gpt-4o-mini:free","candidates":["openai/gpt-4o-mini:free","gpt-4o-mini:free"],"resolved":null}, + {"probe":"openai/gpt.4o.mini","candidates":["openai/gpt.4o.mini","gpt.4o.mini"],"resolved":null}, + {"probe":"openai/gpt-5.1-codex-max","candidates":["openai/gpt-5.1-codex-max","gpt-5.1-codex-max"],"resolved":"openai/gpt-5.1-codex-max"}, + {"probe":"gpt-5.1-codex-max","candidates":["gpt-5.1-codex-max","openai/gpt-5.1-codex-max"],"resolved":"openai/gpt-5.1-codex-max"}, + {"probe":"x-provider/openai/gpt-5.1-codex-max","candidates":["x-provider/openai/gpt-5.1-codex-max","gpt-5.1-codex-max","openai/gpt-5.1-codex-max"],"resolved":"openai/gpt-5.1-codex-max"}, + {"probe":"openai/gpt-5.1-codex-max:free","candidates":["openai/gpt-5.1-codex-max:free","gpt-5.1-codex-max:free"],"resolved":null}, + {"probe":"openai/gpt-5-1-codex-max","candidates":["openai/gpt-5-1-codex-max","gpt-5-1-codex-max"],"resolved":null}, + {"probe":"openai/gpt.5.1.codex.max","candidates":["openai/gpt.5.1.codex.max","gpt.5.1.codex.max"],"resolved":null}, + {"probe":"openai/gpt-5.4-nano","candidates":["openai/gpt-5.4-nano","gpt-5.4-nano"],"resolved":"openai/gpt-5.4-nano"}, + {"probe":"gpt-5.4-nano","candidates":["gpt-5.4-nano"],"resolved":"gpt-5.4-nano"}, + {"probe":"x-provider/openai/gpt-5.4-nano","candidates":["x-provider/openai/gpt-5.4-nano","gpt-5.4-nano"],"resolved":"gpt-5.4-nano"}, + {"probe":"openai/gpt-5.4-nano:free","candidates":["openai/gpt-5.4-nano:free","gpt-5.4-nano:free"],"resolved":null}, + {"probe":"openai/gpt-5-4-nano","candidates":["openai/gpt-5-4-nano","gpt-5-4-nano"],"resolved":null}, + {"probe":"openai/gpt.5.4.nano","candidates":["openai/gpt.5.4.nano","gpt.5.4.nano"],"resolved":null}, + {"probe":"openai/gpt-6-astra","candidates":["openai/gpt-6-astra","gpt-6-astra"],"resolved":"openai/gpt-6-astra"}, + {"probe":"gpt-6-astra","candidates":["gpt-6-astra"],"resolved":"gpt-6-astra"}, + {"probe":"x-provider/openai/gpt-6-astra","candidates":["x-provider/openai/gpt-6-astra","gpt-6-astra"],"resolved":"gpt-6-astra"}, + {"probe":"openai/gpt-6-astra:free","candidates":["openai/gpt-6-astra:free","gpt-6-astra:free"],"resolved":null}, + {"probe":"openai/gpt.6.astra","candidates":["openai/gpt.6.astra","gpt.6.astra"],"resolved":null}, + {"probe":"openai/gpt-oss-20b","candidates":["openai/gpt-oss-20b","gpt-oss-20b"],"resolved":"openai/gpt-oss-20b"}, + {"probe":"gpt-oss-20b","candidates":["gpt-oss-20b","openai/gpt-oss-20b"],"resolved":"openai/gpt-oss-20b"}, + {"probe":"x-provider/openai/gpt-oss-20b","candidates":["x-provider/openai/gpt-oss-20b","gpt-oss-20b","openai/gpt-oss-20b"],"resolved":"openai/gpt-oss-20b"}, + {"probe":"openai/gpt-oss-20b:free","candidates":["openai/gpt-oss-20b:free","gpt-oss-20b:free"],"resolved":null}, + {"probe":"openai/gpt.oss.20b","candidates":["openai/gpt.oss.20b","gpt.oss.20b"],"resolved":null}, + {"probe":"openrouter/auto","candidates":["openrouter/auto","auto"],"resolved":"openrouter/auto"}, + {"probe":"auto","candidates":["auto","openrouter/auto"],"resolved":"openrouter/auto"}, + {"probe":"x-provider/openrouter/auto","candidates":["x-provider/openrouter/auto","auto","openrouter/auto"],"resolved":"openrouter/auto"}, + {"probe":"openrouter/auto:free","candidates":["openrouter/auto:free","auto:free"],"resolved":null}, + {"probe":"perplexity/sonar-pro-search","candidates":["perplexity/sonar-pro-search","sonar-pro-search"],"resolved":"perplexity/sonar-pro-search"}, + {"probe":"sonar-pro-search","candidates":["sonar-pro-search","perplexity/sonar-pro-search"],"resolved":"perplexity/sonar-pro-search"}, + {"probe":"x-provider/perplexity/sonar-pro-search","candidates":["x-provider/perplexity/sonar-pro-search","sonar-pro-search","perplexity/sonar-pro-search"],"resolved":"perplexity/sonar-pro-search"}, + {"probe":"perplexity/sonar-pro-search:free","candidates":["perplexity/sonar-pro-search:free","sonar-pro-search:free"],"resolved":null}, + {"probe":"perplexity/sonar.pro.search","candidates":["perplexity/sonar.pro.search","sonar.pro.search"],"resolved":null}, {"probe":"poolside/laguna-s-2.1:free","candidates":["poolside/laguna-s-2.1:free","laguna-s-2.1:free"],"resolved":"poolside/laguna-s-2.1:free"}, - {"probe":"poolside/laguna-s-2-1","candidates":["poolside/laguna-s-2-1","laguna-s-2-1"],"resolved":null}, - {"probe":"poolside/laguna.s.2.1","candidates":["poolside/laguna.s.2.1","laguna.s.2.1"],"resolved":null}, {"probe":"laguna-s-2.1:free","candidates":["laguna-s-2.1:free","poolside/laguna-s-2.1:free"],"resolved":"poolside/laguna-s-2.1:free"}, {"probe":"x-provider/poolside/laguna-s-2.1:free","candidates":["x-provider/poolside/laguna-s-2.1:free","laguna-s-2.1:free","poolside/laguna-s-2.1:free"],"resolved":"poolside/laguna-s-2.1:free"}, {"probe":"poolside/laguna-s-2.1:free:free","candidates":["poolside/laguna-s-2.1:free:free","laguna-s-2.1:free:free"],"resolved":null}, @@ -395,56 +390,56 @@ {"probe":"poolside/laguna-xs-2.1:free:free","candidates":["poolside/laguna-xs-2.1:free:free","laguna-xs-2.1:free:free"],"resolved":null}, {"probe":"poolside/laguna-xs-2-1:free","candidates":["poolside/laguna-xs-2-1:free","laguna-xs-2-1:free"],"resolved":null}, {"probe":"poolside/laguna.xs.2.1:free","candidates":["poolside/laguna.xs.2.1:free","laguna.xs.2.1:free"],"resolved":null}, - {"probe":"qwen/qwen2.5-vl-72b-instruct","candidates":["qwen/qwen2.5-vl-72b-instruct","qwen2.5-vl-72b-instruct"],"resolved":"qwen/qwen2.5-vl-72b-instruct"}, - {"probe":"qwen2.5-vl-72b-instruct","candidates":["qwen2.5-vl-72b-instruct","qwen/qwen2.5-vl-72b-instruct"],"resolved":"qwen/qwen2.5-vl-72b-instruct"}, - {"probe":"x-provider/qwen/qwen2.5-vl-72b-instruct","candidates":["x-provider/qwen/qwen2.5-vl-72b-instruct","qwen2.5-vl-72b-instruct","qwen/qwen2.5-vl-72b-instruct"],"resolved":"qwen/qwen2.5-vl-72b-instruct"}, - {"probe":"qwen/qwen2.5-vl-72b-instruct:free","candidates":["qwen/qwen2.5-vl-72b-instruct:free","qwen2.5-vl-72b-instruct:free"],"resolved":null}, - {"probe":"qwen/qwen2-5-vl-72b-instruct","candidates":["qwen/qwen2-5-vl-72b-instruct","qwen2-5-vl-72b-instruct"],"resolved":null}, - {"probe":"qwen/qwen2.5.vl.72b.instruct","candidates":["qwen/qwen2.5.vl.72b.instruct","qwen2.5.vl.72b.instruct"],"resolved":null}, - {"probe":"qwen/qwen3-coder","candidates":["qwen/qwen3-coder","qwen3-coder"],"resolved":"qwen/qwen3-coder"}, - {"probe":"qwen3-coder","candidates":["qwen3-coder","qwen/qwen3-coder"],"resolved":"qwen/qwen3-coder"}, - {"probe":"x-provider/qwen/qwen3-coder","candidates":["x-provider/qwen/qwen3-coder","qwen3-coder","qwen/qwen3-coder"],"resolved":"qwen/qwen3-coder"}, - {"probe":"qwen/qwen3-coder:free","candidates":["qwen/qwen3-coder:free","qwen3-coder:free"],"resolved":null}, - {"probe":"qwen/qwen3.coder","candidates":["qwen/qwen3.coder","qwen3.coder"],"resolved":null}, - {"probe":"qwen/qwen3-vl-235b-a22b-thinking","candidates":["qwen/qwen3-vl-235b-a22b-thinking","qwen3-vl-235b-a22b-thinking"],"resolved":"qwen/qwen3-vl-235b-a22b-thinking"}, - {"probe":"qwen3-vl-235b-a22b-thinking","candidates":["qwen3-vl-235b-a22b-thinking","qwen/qwen3-vl-235b-a22b-thinking"],"resolved":"qwen/qwen3-vl-235b-a22b-thinking"}, - {"probe":"x-provider/qwen/qwen3-vl-235b-a22b-thinking","candidates":["x-provider/qwen/qwen3-vl-235b-a22b-thinking","qwen3-vl-235b-a22b-thinking","qwen/qwen3-vl-235b-a22b-thinking"],"resolved":"qwen/qwen3-vl-235b-a22b-thinking"}, - {"probe":"qwen/qwen3-vl-235b-a22b-thinking:free","candidates":["qwen/qwen3-vl-235b-a22b-thinking:free","qwen3-vl-235b-a22b-thinking:free"],"resolved":null}, - {"probe":"qwen/qwen3.vl.235b.a22b.thinking","candidates":["qwen/qwen3.vl.235b.a22b.thinking","qwen3.vl.235b.a22b.thinking"],"resolved":null}, - {"probe":"qwen/qwen3.5-9b","candidates":["qwen/qwen3.5-9b","qwen3.5-9b"],"resolved":"qwen/qwen3.5-9b"}, - {"probe":"qwen3.5-9b","candidates":["qwen3.5-9b","qwen/qwen3.5-9b"],"resolved":"qwen/qwen3.5-9b"}, - {"probe":"x-provider/qwen/qwen3.5-9b","candidates":["x-provider/qwen/qwen3.5-9b","qwen3.5-9b","qwen/qwen3.5-9b"],"resolved":"qwen/qwen3.5-9b"}, - {"probe":"qwen/qwen3.5-9b:free","candidates":["qwen/qwen3.5-9b:free","qwen3.5-9b:free"],"resolved":null}, - {"probe":"qwen/qwen3-5-9b","candidates":["qwen/qwen3-5-9b","qwen3-5-9b"],"resolved":null}, - {"probe":"qwen/qwen3.5.9b","candidates":["qwen/qwen3.5.9b","qwen3.5.9b"],"resolved":null}, - {"probe":"qwen/qwen3.7-max","candidates":["qwen/qwen3.7-max","qwen3.7-max"],"resolved":"qwen/qwen3.7-max"}, - {"probe":"qwen3.7-max","candidates":["qwen3.7-max","qwen/qwen3.7-max"],"resolved":"qwen/qwen3.7-max"}, - {"probe":"x-provider/qwen/qwen3.7-max","candidates":["x-provider/qwen/qwen3.7-max","qwen3.7-max","qwen/qwen3.7-max"],"resolved":"qwen/qwen3.7-max"}, - {"probe":"qwen/qwen3.7-max:free","candidates":["qwen/qwen3.7-max:free","qwen3.7-max:free"],"resolved":null}, - {"probe":"qwen/qwen3-7-max","candidates":["qwen/qwen3-7-max","qwen3-7-max"],"resolved":null}, - {"probe":"qwen/qwen3.7.max","candidates":["qwen/qwen3.7.max","qwen3.7.max"],"resolved":null}, + {"probe":"qwen/qwen-plus","candidates":["qwen/qwen-plus","qwen-plus"],"resolved":"qwen/qwen-plus"}, + {"probe":"qwen-plus","candidates":["qwen-plus","qwen/qwen-plus"],"resolved":"qwen/qwen-plus"}, + {"probe":"x-provider/qwen/qwen-plus","candidates":["x-provider/qwen/qwen-plus","qwen-plus","qwen/qwen-plus"],"resolved":"qwen/qwen-plus"}, + {"probe":"qwen/qwen-plus:free","candidates":["qwen/qwen-plus:free","qwen-plus:free"],"resolved":null}, + {"probe":"qwen/qwen.plus","candidates":["qwen/qwen.plus","qwen.plus"],"resolved":null}, + {"probe":"qwen/qwen3-32b","candidates":["qwen/qwen3-32b","qwen3-32b"],"resolved":"qwen/qwen3-32b"}, + {"probe":"qwen3-32b","candidates":["qwen3-32b","qwen/qwen3-32b"],"resolved":"qwen/qwen3-32b"}, + {"probe":"x-provider/qwen/qwen3-32b","candidates":["x-provider/qwen/qwen3-32b","qwen3-32b","qwen/qwen3-32b"],"resolved":"qwen/qwen3-32b"}, + {"probe":"qwen/qwen3-32b:free","candidates":["qwen/qwen3-32b:free","qwen3-32b:free"],"resolved":null}, + {"probe":"qwen/qwen3.32b","candidates":["qwen/qwen3.32b","qwen3.32b"],"resolved":null}, + {"probe":"qwen/qwen3-next-80b-a3b-thinking","candidates":["qwen/qwen3-next-80b-a3b-thinking","qwen3-next-80b-a3b-thinking"],"resolved":"qwen/qwen3-next-80b-a3b-thinking"}, + {"probe":"qwen3-next-80b-a3b-thinking","candidates":["qwen3-next-80b-a3b-thinking","qwen/qwen3-next-80b-a3b-thinking"],"resolved":"qwen/qwen3-next-80b-a3b-thinking"}, + {"probe":"x-provider/qwen/qwen3-next-80b-a3b-thinking","candidates":["x-provider/qwen/qwen3-next-80b-a3b-thinking","qwen3-next-80b-a3b-thinking","qwen/qwen3-next-80b-a3b-thinking"],"resolved":"qwen/qwen3-next-80b-a3b-thinking"}, + {"probe":"qwen/qwen3-next-80b-a3b-thinking:free","candidates":["qwen/qwen3-next-80b-a3b-thinking:free","qwen3-next-80b-a3b-thinking:free"],"resolved":null}, + {"probe":"qwen/qwen3.next.80b.a3b.thinking","candidates":["qwen/qwen3.next.80b.a3b.thinking","qwen3.next.80b.a3b.thinking"],"resolved":null}, + {"probe":"qwen/qwen3.5-35b-a3b","candidates":["qwen/qwen3.5-35b-a3b","qwen3.5-35b-a3b"],"resolved":"qwen/qwen3.5-35b-a3b"}, + {"probe":"qwen3.5-35b-a3b","candidates":["qwen3.5-35b-a3b","qwen/qwen3.5-35b-a3b"],"resolved":"qwen/qwen3.5-35b-a3b"}, + {"probe":"x-provider/qwen/qwen3.5-35b-a3b","candidates":["x-provider/qwen/qwen3.5-35b-a3b","qwen3.5-35b-a3b","qwen/qwen3.5-35b-a3b"],"resolved":"qwen/qwen3.5-35b-a3b"}, + {"probe":"qwen/qwen3.5-35b-a3b:free","candidates":["qwen/qwen3.5-35b-a3b:free","qwen3.5-35b-a3b:free"],"resolved":null}, + {"probe":"qwen/qwen3-5-35b-a3b","candidates":["qwen/qwen3-5-35b-a3b","qwen3-5-35b-a3b"],"resolved":null}, + {"probe":"qwen/qwen3.5.35b.a3b","candidates":["qwen/qwen3.5.35b.a3b","qwen3.5.35b.a3b"],"resolved":null}, + {"probe":"qwen/qwen3.6-plus","candidates":["qwen/qwen3.6-plus","qwen3.6-plus"],"resolved":"qwen/qwen3.6-plus"}, + {"probe":"qwen3.6-plus","candidates":["qwen3.6-plus","qwen/qwen3.6-plus"],"resolved":"qwen/qwen3.6-plus"}, + {"probe":"x-provider/qwen/qwen3.6-plus","candidates":["x-provider/qwen/qwen3.6-plus","qwen3.6-plus","qwen/qwen3.6-plus"],"resolved":"qwen/qwen3.6-plus"}, + {"probe":"qwen/qwen3.6-plus:free","candidates":["qwen/qwen3.6-plus:free","qwen3.6-plus:free"],"resolved":null}, + {"probe":"qwen/qwen3-6-plus","candidates":["qwen/qwen3-6-plus","qwen3-6-plus"],"resolved":null}, + {"probe":"qwen/qwen3.6.plus","candidates":["qwen/qwen3.6.plus","qwen3.6.plus"],"resolved":null}, {"probe":"qwen/qwen3.8-27b:free","candidates":["qwen/qwen3.8-27b:free","qwen3.8-27b:free"],"resolved":"qwen/qwen3.8-27b:free"}, {"probe":"qwen3.8-27b:free","candidates":["qwen3.8-27b:free","qwen/qwen3.8-27b:free"],"resolved":"qwen/qwen3.8-27b:free"}, {"probe":"x-provider/qwen/qwen3.8-27b:free","candidates":["x-provider/qwen/qwen3.8-27b:free","qwen3.8-27b:free","qwen/qwen3.8-27b:free"],"resolved":"qwen/qwen3.8-27b:free"}, {"probe":"qwen/qwen3.8-27b:free:free","candidates":["qwen/qwen3.8-27b:free:free","qwen3.8-27b:free:free"],"resolved":null}, {"probe":"qwen/qwen3-8-27b:free","candidates":["qwen/qwen3-8-27b:free","qwen3-8-27b:free"],"resolved":null}, {"probe":"qwen/qwen3.8.27b:free","candidates":["qwen/qwen3.8.27b:free","qwen3.8.27b:free"],"resolved":null}, - {"probe":"rekaai/reka-flash-3","candidates":["rekaai/reka-flash-3","reka-flash-3"],"resolved":"rekaai/reka-flash-3"}, - {"probe":"reka-flash-3","candidates":["reka-flash-3","rekaai/reka-flash-3"],"resolved":"rekaai/reka-flash-3"}, - {"probe":"x-provider/rekaai/reka-flash-3","candidates":["x-provider/rekaai/reka-flash-3","reka-flash-3","rekaai/reka-flash-3"],"resolved":"rekaai/reka-flash-3"}, - {"probe":"rekaai/reka-flash-3:free","candidates":["rekaai/reka-flash-3:free","reka-flash-3:free"],"resolved":null}, - {"probe":"rekaai/reka.flash.3","candidates":["rekaai/reka.flash.3","reka.flash.3"],"resolved":null}, - {"probe":"stealth/space-bunny-alpha","candidates":["stealth/space-bunny-alpha","space-bunny-alpha"],"resolved":"stealth/space-bunny-alpha"}, - {"probe":"space-bunny-alpha","candidates":["space-bunny-alpha","stealth/space-bunny-alpha"],"resolved":"stealth/space-bunny-alpha"}, - {"probe":"x-provider/stealth/space-bunny-alpha","candidates":["x-provider/stealth/space-bunny-alpha","space-bunny-alpha","stealth/space-bunny-alpha"],"resolved":"stealth/space-bunny-alpha"}, - {"probe":"stealth/space-bunny-alpha:free","candidates":["stealth/space-bunny-alpha:free","space-bunny-alpha:free"],"resolved":null}, - {"probe":"stealth/space.bunny.alpha","candidates":["stealth/space.bunny.alpha","space.bunny.alpha"],"resolved":null}, - {"probe":"thedrummer/cydonia-24b-v4.1","candidates":["thedrummer/cydonia-24b-v4.1","cydonia-24b-v4.1"],"resolved":"thedrummer/cydonia-24b-v4.1"}, - {"probe":"cydonia-24b-v4.1","candidates":["cydonia-24b-v4.1","thedrummer/cydonia-24b-v4.1"],"resolved":"thedrummer/cydonia-24b-v4.1"}, - {"probe":"x-provider/thedrummer/cydonia-24b-v4.1","candidates":["x-provider/thedrummer/cydonia-24b-v4.1","cydonia-24b-v4.1","thedrummer/cydonia-24b-v4.1"],"resolved":"thedrummer/cydonia-24b-v4.1"}, - {"probe":"thedrummer/cydonia-24b-v4.1:free","candidates":["thedrummer/cydonia-24b-v4.1:free","cydonia-24b-v4.1:free"],"resolved":null}, - {"probe":"thedrummer/cydonia-24b-v4-1","candidates":["thedrummer/cydonia-24b-v4-1","cydonia-24b-v4-1"],"resolved":null}, - {"probe":"thedrummer/cydonia.24b.v4.1","candidates":["thedrummer/cydonia.24b.v4.1","cydonia.24b.v4.1"],"resolved":null}, + {"probe":"qwen/qwen3.8-omni-flash","candidates":["qwen/qwen3.8-omni-flash","qwen3.8-omni-flash"],"resolved":"qwen/qwen3.8-omni-flash"}, + {"probe":"qwen3.8-omni-flash","candidates":["qwen3.8-omni-flash","qwen/qwen3.8-omni-flash"],"resolved":"qwen/qwen3.8-omni-flash"}, + {"probe":"x-provider/qwen/qwen3.8-omni-flash","candidates":["x-provider/qwen/qwen3.8-omni-flash","qwen3.8-omni-flash","qwen/qwen3.8-omni-flash"],"resolved":"qwen/qwen3.8-omni-flash"}, + {"probe":"qwen/qwen3.8-omni-flash:free","candidates":["qwen/qwen3.8-omni-flash:free","qwen3.8-omni-flash:free"],"resolved":null}, + {"probe":"qwen/qwen3-8-omni-flash","candidates":["qwen/qwen3-8-omni-flash","qwen3-8-omni-flash"],"resolved":null}, + {"probe":"qwen/qwen3.8.omni.flash","candidates":["qwen/qwen3.8.omni.flash","qwen3.8.omni.flash"],"resolved":null}, + {"probe":"sao10k/l3.1-euryale-70b","candidates":["sao10k/l3.1-euryale-70b","l3.1-euryale-70b"],"resolved":"sao10k/l3.1-euryale-70b"}, + {"probe":"l3.1-euryale-70b","candidates":["l3.1-euryale-70b","sao10k/l3.1-euryale-70b"],"resolved":"sao10k/l3.1-euryale-70b"}, + {"probe":"x-provider/sao10k/l3.1-euryale-70b","candidates":["x-provider/sao10k/l3.1-euryale-70b","l3.1-euryale-70b","sao10k/l3.1-euryale-70b"],"resolved":"sao10k/l3.1-euryale-70b"}, + {"probe":"sao10k/l3.1-euryale-70b:free","candidates":["sao10k/l3.1-euryale-70b:free","l3.1-euryale-70b:free"],"resolved":null}, + {"probe":"sao10k/l3-1-euryale-70b","candidates":["sao10k/l3-1-euryale-70b","l3-1-euryale-70b"],"resolved":null}, + {"probe":"sao10k/l3.1.euryale.70b","candidates":["sao10k/l3.1.euryale.70b","l3.1.euryale.70b"],"resolved":null}, + {"probe":"tencent/hy3-preview","candidates":["tencent/hy3-preview","hy3-preview"],"resolved":"tencent/hy3-preview"}, + {"probe":"hy3-preview","candidates":["hy3-preview","tencent/hy3-preview"],"resolved":"tencent/hy3-preview"}, + {"probe":"x-provider/tencent/hy3-preview","candidates":["x-provider/tencent/hy3-preview","hy3-preview","tencent/hy3-preview"],"resolved":"tencent/hy3-preview"}, + {"probe":"tencent/hy3-preview:free","candidates":["tencent/hy3-preview:free","hy3-preview:free"],"resolved":null}, + {"probe":"tencent/hy3.preview","candidates":["tencent/hy3.preview","hy3.preview"],"resolved":null}, {"probe":"thinkingmachines/inkling-small:free","candidates":["thinkingmachines/inkling-small:free","inkling-small:free"],"resolved":"thinkingmachines/inkling-small:free"}, {"probe":"inkling-small:free","candidates":["inkling-small:free","thinkingmachines/inkling-small:free"],"resolved":"thinkingmachines/inkling-small:free"}, {"probe":"x-provider/thinkingmachines/inkling-small:free","candidates":["x-provider/thinkingmachines/inkling-small:free","inkling-small:free","thinkingmachines/inkling-small:free"],"resolved":"thinkingmachines/inkling-small:free"}, @@ -454,35 +449,34 @@ {"probe":"inkling:free","candidates":["inkling:free","thinkingmachines/inkling:free"],"resolved":"thinkingmachines/inkling:free"}, {"probe":"x-provider/thinkingmachines/inkling:free","candidates":["x-provider/thinkingmachines/inkling:free","inkling:free","thinkingmachines/inkling:free"],"resolved":"thinkingmachines/inkling:free"}, {"probe":"thinkingmachines/inkling:free:free","candidates":["thinkingmachines/inkling:free:free","inkling:free:free"],"resolved":null}, - {"probe":"upstage/solar-pro-3","candidates":["upstage/solar-pro-3","solar-pro-3"],"resolved":"upstage/solar-pro-3"}, - {"probe":"solar-pro-3","candidates":["solar-pro-3","upstage/solar-pro-3"],"resolved":"upstage/solar-pro-3"}, - {"probe":"x-provider/upstage/solar-pro-3","candidates":["x-provider/upstage/solar-pro-3","solar-pro-3","upstage/solar-pro-3"],"resolved":"upstage/solar-pro-3"}, - {"probe":"upstage/solar-pro-3:free","candidates":["upstage/solar-pro-3:free","solar-pro-3:free"],"resolved":null}, - {"probe":"upstage/solar.pro.3","candidates":["upstage/solar.pro.3","solar.pro.3"],"resolved":null}, - {"probe":"xiaomi/mimo-v2.5","candidates":["xiaomi/mimo-v2.5","mimo-v2.5"],"resolved":"xiaomi/mimo-v2.5"}, - {"probe":"mimo-v2.5","candidates":["mimo-v2.5","xiaomi/mimo-v2.5"],"resolved":"xiaomi/mimo-v2.5"}, - {"probe":"x-provider/xiaomi/mimo-v2.5","candidates":["x-provider/xiaomi/mimo-v2.5","mimo-v2.5","xiaomi/mimo-v2.5"],"resolved":"xiaomi/mimo-v2.5"}, - {"probe":"xiaomi/mimo-v2.5:free","candidates":["xiaomi/mimo-v2.5:free","mimo-v2.5:free"],"resolved":null}, - {"probe":"xiaomi/mimo-v2-5","candidates":["xiaomi/mimo-v2-5","mimo-v2-5"],"resolved":null}, - {"probe":"xiaomi/mimo.v2.5","candidates":["xiaomi/mimo.v2.5","mimo.v2.5"],"resolved":null}, - {"probe":"z-ai/glm-4.7","candidates":["z-ai/glm-4.7","glm-4.7"],"resolved":"z-ai/glm-4.7"}, - {"probe":"glm-4.7","candidates":["glm-4.7","z-ai/glm-4.7"],"resolved":"z-ai/glm-4.7"}, - {"probe":"x-provider/z-ai/glm-4.7","candidates":["x-provider/z-ai/glm-4.7","glm-4.7","z-ai/glm-4.7"],"resolved":"z-ai/glm-4.7"}, - {"probe":"z-ai/glm-4.7:free","candidates":["z-ai/glm-4.7:free","glm-4.7:free"],"resolved":null}, - {"probe":"z-ai/glm-4-7","candidates":["z-ai/glm-4-7","glm-4-7"],"resolved":null}, - {"probe":"z.ai/glm.4.7","candidates":["z.ai/glm.4.7","glm.4.7"],"resolved":null}, + {"probe":"undi95/remm-slerp-l2-13b","candidates":["undi95/remm-slerp-l2-13b","remm-slerp-l2-13b"],"resolved":"undi95/remm-slerp-l2-13b"}, + {"probe":"remm-slerp-l2-13b","candidates":["remm-slerp-l2-13b","undi95/remm-slerp-l2-13b"],"resolved":"undi95/remm-slerp-l2-13b"}, + {"probe":"x-provider/undi95/remm-slerp-l2-13b","candidates":["x-provider/undi95/remm-slerp-l2-13b","remm-slerp-l2-13b","undi95/remm-slerp-l2-13b"],"resolved":"undi95/remm-slerp-l2-13b"}, + {"probe":"undi95/remm-slerp-l2-13b:free","candidates":["undi95/remm-slerp-l2-13b:free","remm-slerp-l2-13b:free"],"resolved":null}, + {"probe":"undi95/remm.slerp.l2.13b","candidates":["undi95/remm.slerp.l2.13b","remm.slerp.l2.13b"],"resolved":null}, + {"probe":"x-ai/grok-4.7","candidates":["x-ai/grok-4.7","grok-4.7"],"resolved":"x-ai/grok-4.7"}, + {"probe":"x-provider/x-ai/grok-4.7","candidates":["x-provider/x-ai/grok-4.7","grok-4.7"],"resolved":"grok-4.7"}, + {"probe":"x-ai/grok-4.7:free","candidates":["x-ai/grok-4.7:free","grok-4.7:free"],"resolved":null}, + {"probe":"x-ai/grok-4-7","candidates":["x-ai/grok-4-7","grok-4-7"],"resolved":null}, + {"probe":"x.ai/grok.4.7","candidates":["x.ai/grok.4.7","grok.4.7"],"resolved":null}, + {"probe":"z-ai/glm-4.6","candidates":["z-ai/glm-4.6","glm-4.6"],"resolved":"z-ai/glm-4.6"}, + {"probe":"glm-4.6","candidates":["glm-4.6","z-ai/glm-4.6"],"resolved":"z-ai/glm-4.6"}, + {"probe":"x-provider/z-ai/glm-4.6","candidates":["x-provider/z-ai/glm-4.6","glm-4.6","z-ai/glm-4.6"],"resolved":"z-ai/glm-4.6"}, + {"probe":"z-ai/glm-4.6:free","candidates":["z-ai/glm-4.6:free","glm-4.6:free"],"resolved":null}, + {"probe":"z-ai/glm-4-6","candidates":["z-ai/glm-4-6","glm-4-6"],"resolved":null}, + {"probe":"z.ai/glm.4.6","candidates":["z.ai/glm.4.6","glm.4.6"],"resolved":null}, {"probe":"z-ai/glm-5.2:free","candidates":["z-ai/glm-5.2:free","glm-5.2:free"],"resolved":"z-ai/glm-5.2:free"}, {"probe":"glm-5.2:free","candidates":["glm-5.2:free","z-ai/glm-5.2:free"],"resolved":"z-ai/glm-5.2:free"}, {"probe":"x-provider/z-ai/glm-5.2:free","candidates":["x-provider/z-ai/glm-5.2:free","glm-5.2:free","z-ai/glm-5.2:free"],"resolved":"z-ai/glm-5.2:free"}, {"probe":"z-ai/glm-5.2:free:free","candidates":["z-ai/glm-5.2:free:free","glm-5.2:free:free"],"resolved":null}, {"probe":"z-ai/glm-5-2:free","candidates":["z-ai/glm-5-2:free","glm-5-2:free"],"resolved":null}, {"probe":"z.ai/glm.5.2:free","candidates":["z.ai/glm.5.2:free","glm.5.2:free"],"resolved":null}, - {"probe":"z-ai/glm-5.3-prime","candidates":["z-ai/glm-5.3-prime","glm-5.3-prime"],"resolved":"z-ai/glm-5.3-prime"}, - {"probe":"glm-5.3-prime","candidates":["glm-5.3-prime","z-ai/glm-5.3-prime"],"resolved":"z-ai/glm-5.3-prime"}, - {"probe":"x-provider/z-ai/glm-5.3-prime","candidates":["x-provider/z-ai/glm-5.3-prime","glm-5.3-prime","z-ai/glm-5.3-prime"],"resolved":"z-ai/glm-5.3-prime"}, - {"probe":"z-ai/glm-5.3-prime:free","candidates":["z-ai/glm-5.3-prime:free","glm-5.3-prime:free"],"resolved":null}, - {"probe":"z-ai/glm-5-3-prime","candidates":["z-ai/glm-5-3-prime","glm-5-3-prime"],"resolved":null}, - {"probe":"z.ai/glm.5.3.prime","candidates":["z.ai/glm.5.3.prime","glm.5.3.prime"],"resolved":null}, + {"probe":"z-ai/glm-5.3-flash","candidates":["z-ai/glm-5.3-flash","glm-5.3-flash"],"resolved":"z-ai/glm-5.3-flash"}, + {"probe":"glm-5.3-flash","candidates":["glm-5.3-flash","z-ai/glm-5.3-flash"],"resolved":"z-ai/glm-5.3-flash"}, + {"probe":"x-provider/z-ai/glm-5.3-flash","candidates":["x-provider/z-ai/glm-5.3-flash","glm-5.3-flash","z-ai/glm-5.3-flash"],"resolved":"z-ai/glm-5.3-flash"}, + {"probe":"z-ai/glm-5.3-flash:free","candidates":["z-ai/glm-5.3-flash:free","glm-5.3-flash:free"],"resolved":null}, + {"probe":"z-ai/glm-5-3-flash","candidates":["z-ai/glm-5-3-flash","glm-5-3-flash"],"resolved":null}, + {"probe":"z.ai/glm.5.3.flash","candidates":["z.ai/glm.5.3.flash","glm.5.3.flash"],"resolved":null}, {"probe":"~anthropic/claude-fable-latest","candidates":["~anthropic/claude-fable-latest","claude-fable-latest"],"resolved":"~anthropic/claude-fable-latest"}, {"probe":"claude-fable-latest","candidates":["claude-fable-latest","~anthropic/claude-fable-latest"],"resolved":"~anthropic/claude-fable-latest"}, {"probe":"x-provider/~anthropic/claude-fable-latest","candidates":["x-provider/~anthropic/claude-fable-latest","claude-fable-latest","~anthropic/claude-fable-latest"],"resolved":"~anthropic/claude-fable-latest"}, diff --git a/scripts/fetch-model-catalog.mjs b/scripts/fetch-model-catalog.mjs index 4f6eedb99..0d34a9b19 100644 --- a/scripts/fetch-model-catalog.mjs +++ b/scripts/fetch-model-catalog.mjs @@ -89,7 +89,7 @@ function distinctOutputTokens(context, output) { if (Number.isInteger(context) && context > 0 && output >= context * 0.99) { return undefined; } - // Exactly 90% of the context window is OpenRouter's fallback, not a vendor's + // About 90% of the context window is OpenRouter's fallback, not a vendor's // limit. 32 rows match it to six significant figures and every one is an // OpenRouter row, spread across 17 vendor namespaces: x-ai, meta, qwen, // google, perplexity, deepseek, moonshotai, ibm-granite and more. @@ -106,7 +106,9 @@ function distinctOutputTokens(context, output) { // // Dropping it leaves the field absent, which is the honest state, and // conductor's resolveMaxOutputTokens falls back to each provider's floor. - if (Number.isInteger(context) && context > 0 && output === Math.round(context * 0.9)) { + // Upstream may truncate rather than round a fractional token (GLM 5.3: + // 943,717 of 1,048,575). One token of rounding cannot establish a cap. + if (Number.isInteger(context) && context > 0 && Math.abs(output - context * 0.9) <= 1) { return undefined; } return output; @@ -161,11 +163,11 @@ function indexModelsDevModelFacts(modelsDevCatalog) { function indexModelsDevTokenLimits(modelsDevCatalog) { const entries = new Map(); - const push = (key, context, output) => { + const push = (key, context, output, source) => { if (!entries.has(key)) { entries.set(key, []); } - entries.get(key).push({ context, output }); + entries.get(key).push({ context, output, source }); }; const indexProvider = (providerId, providerModels) => { if (!providerModels || typeof providerModels !== "object") { @@ -174,10 +176,13 @@ function indexModelsDevTokenLimits(modelsDevCatalog) { for (const [modelId, model] of Object.entries(providerModels)) { const context = limitTokens(model, "context"); const output = limitTokens(model, "output"); + // models.dev spells Z.ai as "zai" while OpenRouter uses "z-ai". + // Keep this explicit so a rejected OpenRouter cap can reach the + // vendor's independently published limit. if (providerId === "openrouter") { - push(modelId, context, output); + push(modelId, context, output, "openrouter"); } else { - push(`${providerId}/${modelId}`, context, output); + push(`${providerId === "zai" ? "z-ai" : providerId}/${modelId}`, context, output, "vendor"); } } }; @@ -191,14 +196,25 @@ function indexModelsDevTokenLimits(modelsDevCatalog) { return entries; } -function resolveOpenRouterOutput(entries, id, context, advertised) { - const distinct = distinctOutputTokens(context, advertised); - if (distinct !== undefined) { - return distinct; +function resolveOpenRouterOutput(entries, id, model) { + const topProvider = model.top_provider; + let rejectedAggregator = false; + // An output from top_provider must be checked against that same provider's + // window. If it publishes no window, the output has no verifiable context. + if (topProvider?.max_completion_tokens !== undefined && + Number.isInteger(topProvider.context_length) && topProvider.context_length > 0) { + const distinct = distinctOutputTokens(topProvider.context_length, topProvider.max_completion_tokens); + if (distinct !== undefined) return distinct; + rejectedAggregator = true; + } else { + const distinct = distinctOutputTokens(model.context_length, model.max_completion_tokens); + if (distinct !== undefined) return distinct; } const candidates = entries.get(id) ?? []; for (const candidate of candidates) { - const resolved = distinctOutputTokens(context, candidate.output); + // models.dev's OpenRouter mirror may repeat the very cap rejected above. + if (rejectedAggregator && candidate.source === "openrouter") continue; + const resolved = distinctOutputTokens(candidate.context, candidate.output); if (resolved !== undefined) { return resolved; } @@ -220,7 +236,6 @@ function mapOpenRouterModel(model, tokenLimits, vendorFacts) { if (context <= 0) { return null; } - const advertised = model.top_provider?.max_completion_tokens ?? model.max_completion_tokens; const inputs = Array.isArray(model.architecture?.input_modalities) ? model.architecture.input_modalities : []; @@ -246,7 +261,7 @@ function mapOpenRouterModel(model, tokenLimits, vendorFacts) { (model.reasoning != null && typeof model.reasoning === "object"), streaming: true, context_tokens: context, - output_tokens: omitUnverifiedSonarOutput(id, resolveOpenRouterOutput(tokenLimits, id, context, advertised)), + output_tokens: omitUnverifiedSonarOutput(id, resolveOpenRouterOutput(tokenLimits, id, model)), // OpenRouter lists `temperature` in `supported_parameters` for // routes that accept it. Omitted when the route lists no // parameters at all.