vtcode_core/config/
context.rs

1use 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    /// Inject ledger into the system prompt each turn
11    #[serde(default = "default_include_in_prompt")]
12    pub include_in_prompt: bool,
13    /// Preserve ledger entries during context compression
14    #[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 ContextFeaturesConfig {
44    #[serde(default)]
45    pub ledger: LedgerConfig,
46    #[serde(default = "default_max_context_tokens")]
47    pub max_context_tokens: usize,
48    #[serde(default = "default_trim_to_percent")]
49    pub trim_to_percent: u8,
50    #[serde(default = "default_preserve_recent_turns")]
51    pub preserve_recent_turns: usize,
52}
53
54impl Default for ContextFeaturesConfig {
55    fn default() -> Self {
56        Self {
57            ledger: LedgerConfig::default(),
58            max_context_tokens: default_max_context_tokens(),
59            trim_to_percent: default_trim_to_percent(),
60            preserve_recent_turns: default_preserve_recent_turns(),
61        }
62    }
63}
64
65fn default_max_context_tokens() -> usize {
66    context_defaults::DEFAULT_MAX_TOKENS
67}
68
69fn default_trim_to_percent() -> u8 {
70    context_defaults::DEFAULT_TRIM_TO_PERCENT
71}
72
73fn default_preserve_recent_turns() -> usize {
74    context_defaults::DEFAULT_PRESERVE_RECENT_TURNS
75}