vtcode_core/config/
router.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Deserialize, Serialize, Default)]
5pub struct ResourceBudget {
6 #[serde(default)]
8 pub max_tokens: Option<usize>,
9 #[serde(default)]
11 pub max_parallel_tools: Option<usize>,
12 #[serde(default)]
14 pub latency_ms_target: Option<u64>,
15}
16
17#[derive(Debug, Clone, Deserialize, Serialize, Default)]
19pub struct ComplexityModelMap {
20 #[serde(default)]
22 pub simple: String,
23 #[serde(default)]
25 pub standard: String,
26 #[serde(default)]
28 pub complex: String,
29 #[serde(default)]
31 pub codegen_heavy: String,
32 #[serde(default)]
34 pub retrieval_heavy: String,
35}
36
37#[derive(Debug, Clone, Deserialize, Serialize)]
39pub struct RouterConfig {
40 #[serde(default = "default_enabled")]
42 pub enabled: bool,
43 #[serde(default = "default_true")]
45 pub heuristic_classification: bool,
46 #[serde(default)]
48 pub llm_router_model: String,
49 #[serde(default)]
51 pub models: ComplexityModelMap,
52 #[serde(default)]
54 pub budgets: std::collections::HashMap<String, ResourceBudget>,
55}
56
57impl Default for RouterConfig {
58 fn default() -> Self {
59 use crate::config::constants::models;
60 Self {
61 enabled: true,
62 heuristic_classification: true,
63 llm_router_model: String::new(),
64 models: ComplexityModelMap {
65 simple: models::google::GEMINI_2_5_FLASH_PREVIEW.to_string(),
66 standard: models::google::GEMINI_2_5_FLASH_PREVIEW.to_string(),
67 complex: models::google::GEMINI_2_5_PRO.to_string(),
68 codegen_heavy: models::google::GEMINI_2_5_PRO.to_string(),
69 retrieval_heavy: models::google::GEMINI_2_5_PRO.to_string(),
70 },
71 budgets: Default::default(),
72 }
73 }
74}
75
76fn default_true() -> bool {
77 true
78}
79fn default_enabled() -> bool {
80 true
81}