vtcode_core/config/
context.rs1use crate::config::constants::context as context_defaults;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Deserialize, Serialize)]
5pub struct LedgerConfig {
6 #[serde(default = "default_enabled")]
7 pub enabled: bool,
8 #[serde(default = "default_max_entries")]
9 pub max_entries: usize,
10 #[serde(default = "default_include_in_prompt")]
12 pub include_in_prompt: bool,
13 #[serde(default = "default_preserve_in_compression")]
15 pub preserve_in_compression: bool,
16}
17
18impl Default for LedgerConfig {
19 fn default() -> Self {
20 Self {
21 enabled: default_enabled(),
22 max_entries: default_max_entries(),
23 include_in_prompt: default_include_in_prompt(),
24 preserve_in_compression: default_preserve_in_compression(),
25 }
26 }
27}
28
29fn default_enabled() -> bool {
30 true
31}
32fn default_max_entries() -> usize {
33 12
34}
35fn default_include_in_prompt() -> bool {
36 true
37}
38fn default_preserve_in_compression() -> bool {
39 true
40}
41
42#[derive(Debug, Clone, Deserialize, Serialize)]
43pub struct TokenBudgetConfig {
44 #[serde(default = "default_token_budget_enabled")]
46 pub enabled: bool,
47 #[serde(default = "default_token_budget_model")]
49 pub model: String,
50 #[serde(default = "default_warning_threshold")]
52 pub warning_threshold: f64,
53 #[serde(default = "default_compaction_threshold")]
55 pub compaction_threshold: f64,
56 #[serde(default = "default_detailed_tracking")]
58 pub detailed_tracking: bool,
59}
60
61impl Default for TokenBudgetConfig {
62 fn default() -> Self {
63 Self {
64 enabled: default_token_budget_enabled(),
65 model: default_token_budget_model(),
66 warning_threshold: default_warning_threshold(),
67 compaction_threshold: default_compaction_threshold(),
68 detailed_tracking: default_detailed_tracking(),
69 }
70 }
71}
72
73fn default_token_budget_enabled() -> bool {
74 true
75}
76fn default_token_budget_model() -> String {
77 "gpt-4o-mini".to_string()
78}
79fn default_warning_threshold() -> f64 {
80 0.75
81}
82fn default_compaction_threshold() -> f64 {
83 0.85
84}
85fn default_detailed_tracking() -> bool {
86 false
87}
88
89#[derive(Debug, Clone, Deserialize, Serialize)]
90pub struct ContextCurationConfig {
91 #[serde(default = "default_curation_enabled")]
93 pub enabled: bool,
94 #[serde(default = "default_max_tokens_per_turn")]
96 pub max_tokens_per_turn: usize,
97 #[serde(default = "default_preserve_recent_messages")]
99 pub preserve_recent_messages: usize,
100 #[serde(default = "default_max_tool_descriptions")]
102 pub max_tool_descriptions: usize,
103 #[serde(default = "default_include_ledger")]
105 pub include_ledger: bool,
106 #[serde(default = "default_ledger_max_entries")]
108 pub ledger_max_entries: usize,
109 #[serde(default = "default_include_recent_errors")]
111 pub include_recent_errors: bool,
112 #[serde(default = "default_max_recent_errors")]
114 pub max_recent_errors: usize,
115}
116
117impl Default for ContextCurationConfig {
118 fn default() -> Self {
119 Self {
120 enabled: default_curation_enabled(),
121 max_tokens_per_turn: default_max_tokens_per_turn(),
122 preserve_recent_messages: default_preserve_recent_messages(),
123 max_tool_descriptions: default_max_tool_descriptions(),
124 include_ledger: default_include_ledger(),
125 ledger_max_entries: default_ledger_max_entries(),
126 include_recent_errors: default_include_recent_errors(),
127 max_recent_errors: default_max_recent_errors(),
128 }
129 }
130}
131
132fn default_curation_enabled() -> bool {
133 true
134}
135fn default_max_tokens_per_turn() -> usize {
136 100_000
137}
138fn default_preserve_recent_messages() -> usize {
139 5
140}
141fn default_max_tool_descriptions() -> usize {
142 10
143}
144fn default_include_ledger() -> bool {
145 true
146}
147fn default_ledger_max_entries() -> usize {
148 12
149}
150fn default_include_recent_errors() -> bool {
151 true
152}
153fn default_max_recent_errors() -> usize {
154 3
155}
156
157#[derive(Debug, Clone, Deserialize, Serialize)]
158pub struct ContextFeaturesConfig {
159 #[serde(default)]
160 pub ledger: LedgerConfig,
161 #[serde(default)]
162 pub token_budget: TokenBudgetConfig,
163 #[serde(default)]
164 pub curation: ContextCurationConfig,
165 #[serde(default = "default_max_context_tokens")]
166 pub max_context_tokens: usize,
167 #[serde(default = "default_trim_to_percent")]
168 pub trim_to_percent: u8,
169 #[serde(default = "default_preserve_recent_turns")]
170 pub preserve_recent_turns: usize,
171}
172
173impl Default for ContextFeaturesConfig {
174 fn default() -> Self {
175 Self {
176 ledger: LedgerConfig::default(),
177 token_budget: TokenBudgetConfig::default(),
178 curation: ContextCurationConfig::default(),
179 max_context_tokens: default_max_context_tokens(),
180 trim_to_percent: default_trim_to_percent(),
181 preserve_recent_turns: default_preserve_recent_turns(),
182 }
183 }
184}
185
186fn default_max_context_tokens() -> usize {
187 context_defaults::DEFAULT_MAX_TOKENS
188}
189
190fn default_trim_to_percent() -> u8 {
191 context_defaults::DEFAULT_TRIM_TO_PERCENT
192}
193
194fn default_preserve_recent_turns() -> usize {
195 context_defaults::DEFAULT_PRESERVE_RECENT_TURNS
196}