Skip to main content

vtcode_config/constants/models/
merge_gateway.rs

1//! Curated Merge Gateway model routes exposed by VT Code.
2
3pub const DEFAULT_ROUTING: &str = "default_routing";
4pub const OPENAI_GPT_5_5: &str = "openai/gpt-5.5";
5pub const ANTHROPIC_CLAUDE_OPUS_5: &str = "anthropic/claude-opus-5";
6pub const ANTHROPIC_CLAUDE_OPUS_5_5: &str = "anthropic/claude-opus-5-5";
7pub const ANTHROPIC_CLAUDE_SONNET_5: &str = "anthropic/claude-sonnet-5";
8pub const ANTHROPIC_CLAUDE_SONNET_5_5: &str = "anthropic/claude-sonnet-5-5";
9pub const GOOGLE_GEMINI_3_6_FLASH: &str = "google/gemini-3.6-flash";
10pub const GOOGLE_GEMINI_3_7_FLASH: &str = "google/gemini-3.7-flash";
11pub const XAI_GROK_4_6: &str = "xai/grok-4.6";
12pub const XAI_GROK_4_7: &str = "xai/grok-4.7";
13pub const MINIMAX_H3: &str = "minimax/minimax-h3";
14pub const MOONSHOT_KIMI_K3: &str = "moonshot/kimi-k3";
15pub const THINKINGMACHINES_INKLING: &str = "thinkingmachines/inkling";
16pub const ZAI_GLM_5_3_FLASH: &str = "zai/glm-5.3-flash";
17pub const ZAI_GLM_5_3_FLASHX: &str = "zai/glm-5.3-flashx";
18pub const OPENAI_GPT_5_6_LUNA: &str = "openai/gpt-5.6-luna";
19pub const OPENAI_GPT_5_6_SOL: &str = "openai/gpt-5.6-sol";
20pub const OPENAI_GPT_5_6_TERRA: &str = "openai/gpt-5.6-terra";
21pub const OPENAI_GPT_6_ASTRA: &str = "openai/gpt-6-astra";
22pub const OPENAI_GPT_6_SOL: &str = "openai/gpt-6-sol";
23pub const OPENAI_GPT_6_1_SOL: &str = "openai/gpt-6.1-sol";
24pub const OPENAI_GPT_6_LUNA: &str = "openai/gpt-6-luna";
25pub const GOOGLE_GEMINI_3_8_FLASH: &str = "google/gemini-3.8-flash";
26pub const GOOGLE_GEMINI_4_ARGON: &str = "google/gemini-4-argon";
27pub const ANTHROPIC_CLAUDE_HAIKU_4_5_20251001: &str = "anthropic/claude-haiku-4-5-20251001";
28pub const ANTHROPIC_CLAUDE_HAIKU_5_5: &str = "anthropic/claude-haiku-5-5";
29pub const ANTHROPIC_CLAUDE_FABLE_5_1: &str = "anthropic/claude-fable-5-1";
30pub const DEEPSEEK_FLASH: &str = "deepseek/deepseek-v4.1-flash";
31pub const XIAOMIMIMO_MIMO_V2_6_PRO: &str = "xiaomimimo/mimo-v2.6-pro";
32pub const XIAOMIMIMO_MIMO_V2_6_FLASH: &str = "xiaomimimo/mimo-v2.6-flash";
33pub const MISTRAL_LARGE_4: &str = "mistral/mistral-large-4-0";
34
35pub const DEFAULT_MODEL: &str = DEFAULT_ROUTING;
36
37/// Curated routes shown in VT Code's model picker. Merge Gateway also accepts
38/// other valid `provider/model` identifiers through explicit configuration.
39pub const SUPPORTED_MODELS: &[&str] = &[
40    DEFAULT_ROUTING,
41    OPENAI_GPT_5_5,
42    ANTHROPIC_CLAUDE_OPUS_5,
43    ANTHROPIC_CLAUDE_OPUS_5_5,
44    ANTHROPIC_CLAUDE_SONNET_5,
45    ANTHROPIC_CLAUDE_SONNET_5_5,
46    ANTHROPIC_CLAUDE_HAIKU_4_5_20251001,
47    ANTHROPIC_CLAUDE_HAIKU_5_5,
48    ANTHROPIC_CLAUDE_FABLE_5_1,
49    GOOGLE_GEMINI_3_6_FLASH,
50    GOOGLE_GEMINI_3_7_FLASH,
51    GOOGLE_GEMINI_3_8_FLASH,
52    GOOGLE_GEMINI_4_ARGON,
53    DEEPSEEK_FLASH,
54    XAI_GROK_4_6,
55    XAI_GROK_4_7,
56    MINIMAX_H3,
57    MOONSHOT_KIMI_K3,
58    THINKINGMACHINES_INKLING,
59    ZAI_GLM_5_3_FLASH,
60    ZAI_GLM_5_3_FLASHX,
61    OPENAI_GPT_5_6_LUNA,
62    OPENAI_GPT_5_6_SOL,
63    OPENAI_GPT_5_6_TERRA,
64    OPENAI_GPT_6_ASTRA,
65    OPENAI_GPT_6_SOL,
66    OPENAI_GPT_6_1_SOL,
67    OPENAI_GPT_6_LUNA,
68    XIAOMIMIMO_MIMO_V2_6_PRO,
69    XIAOMIMIMO_MIMO_V2_6_FLASH,
70    MISTRAL_LARGE_4,
71];
72
73/// Routes that advertise provider-native `reasoning_effort` controls through
74/// Merge's `/v1/models` catalog.
75pub const REASONING_EFFORT_ROUTES: &[&str] = &[
76    OPENAI_GPT_5_5,
77    XAI_GROK_4_6,
78    XAI_GROK_4_7,
79    MOONSHOT_KIMI_K3,
80    ZAI_GLM_5_3_FLASH,
81    ZAI_GLM_5_3_FLASHX,
82    OPENAI_GPT_5_6_LUNA,
83    OPENAI_GPT_5_6_SOL,
84    OPENAI_GPT_5_6_TERRA,
85    OPENAI_GPT_6_ASTRA,
86    OPENAI_GPT_6_SOL,
87    OPENAI_GPT_6_1_SOL,
88    OPENAI_GPT_6_LUNA,
89];
90
91/// Routes that advertise Gateway-controlled `thinking.budget_tokens` controls.
92///
93/// `xiaomimimo/` routes and `anthropic/claude-haiku-5-5` are intentionally
94/// absent: Merge Gateway currently has no vendor serving reasoning jointly
95/// with tools for them (a `thinking` payload turns every agentic request
96/// into a `capability_unavailable` rejection), so they stay conservative
97/// until the route gains one.
98pub const THINKING_BUDGET_ROUTES: &[&str] = &[
99    ANTHROPIC_CLAUDE_OPUS_5,
100    ANTHROPIC_CLAUDE_OPUS_5_5,
101    ANTHROPIC_CLAUDE_SONNET_5,
102    ANTHROPIC_CLAUDE_SONNET_5_5,
103    ANTHROPIC_CLAUDE_FABLE_5_1,
104    GOOGLE_GEMINI_3_6_FLASH,
105    GOOGLE_GEMINI_3_7_FLASH,
106    GOOGLE_GEMINI_3_8_FLASH,
107    GOOGLE_GEMINI_4_ARGON,
108    DEEPSEEK_FLASH,
109    MINIMAX_H3,
110    THINKINGMACHINES_INKLING,
111];
112
113/// Curated Merge Gateway routes that support reasoning. Reasoning is controlled
114/// per route: either a provider-native `reasoning_effort` or a Gateway-managed
115/// thinking budget. `anthropic/claude-haiku-5-5` is intentionally absent: the
116/// gateway has no vendor serving reasoning jointly with tools for it yet.
117pub const REASONING_MODELS: &[&str] = &[
118    ANTHROPIC_CLAUDE_OPUS_5,
119    ANTHROPIC_CLAUDE_OPUS_5_5,
120    ANTHROPIC_CLAUDE_SONNET_5,
121    ANTHROPIC_CLAUDE_SONNET_5_5,
122    ANTHROPIC_CLAUDE_FABLE_5_1,
123    GOOGLE_GEMINI_3_8_FLASH,
124    GOOGLE_GEMINI_4_ARGON,
125    DEEPSEEK_FLASH,
126    XAI_GROK_4_6,
127    XAI_GROK_4_7,
128    MINIMAX_H3,
129    MOONSHOT_KIMI_K3,
130    THINKINGMACHINES_INKLING,
131    ZAI_GLM_5_3_FLASH,
132    ZAI_GLM_5_3_FLASHX,
133    OPENAI_GPT_5_6_LUNA,
134    OPENAI_GPT_5_6_SOL,
135    OPENAI_GPT_5_6_TERRA,
136    OPENAI_GPT_6_ASTRA,
137    OPENAI_GPT_6_SOL,
138    OPENAI_GPT_6_1_SOL,
139    OPENAI_GPT_6_LUNA,
140];
141
142/// Returns true when the route exposes a provider-native `reasoning_effort`
143/// control through Merge Gateway. Explicit `provider/model` route identifiers
144/// follow the same prefix convention as the curated routes.
145pub fn route_uses_reasoning_effort(model: &str) -> bool {
146    let model = model.trim();
147    model.starts_with("openai/")
148        || model.starts_with("xai/")
149        || model.starts_with("moonshot/")
150        || model.starts_with("zai/")
151}
152
153/// Returns true when the route exposes a Gateway-managed `thinking.budget_tokens`
154/// control. Explicit `provider/model` route identifiers follow the same prefix
155/// convention as the curated routes.
156///
157/// `anthropic/claude-haiku-5-5` is excluded: the gateway has no vendor serving
158/// reasoning jointly with tools for it yet (see `THINKING_BUDGET_ROUTES` and
159/// `merge_reasoning_control_for_model`).
160pub fn route_uses_thinking_budget(model: &str) -> bool {
161    let model = model.trim();
162    if model == ANTHROPIC_CLAUDE_HAIKU_5_5 {
163        return false;
164    }
165    model.starts_with("anthropic/")
166        || model.starts_with("google/gemini-")
167        || model.starts_with("deepseek/")
168        || model.starts_with("minimax/")
169        || model.starts_with("thinkingmachines/")
170}
171
172/// Returns true when the route supports configurable reasoning through Merge
173/// Gateway. Unclassified routes (including `default_routing`) stay conservative.
174pub fn route_supports_reasoning(model: &str) -> bool {
175    route_uses_reasoning_effort(model) || route_uses_thinking_budget(model)
176}