use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub(super) struct InfinityContextConfig {
#[serde(default = "default_context_budget_tokens")]
pub(super) context_budget_tokens: usize,
#[serde(default = "default_min_recent_messages")]
pub(super) min_recent_messages: usize,
#[serde(default)]
pub(super) max_recent_messages: Option<usize>,
#[serde(default = "default_keep_first_messages")]
pub(super) keep_first_messages: usize,
#[serde(default)]
pub(super) compaction_active: bool,
#[serde(default)]
pub(super) provider_managed_reduction: bool,
}
pub(super) fn default_context_budget_tokens() -> usize {
100_000
}
pub(super) fn default_min_recent_messages() -> usize {
10
}
pub(super) fn default_keep_first_messages() -> usize {
0
}
impl Default for InfinityContextConfig {
fn default() -> Self {
Self {
context_budget_tokens: default_context_budget_tokens(),
min_recent_messages: default_min_recent_messages(),
max_recent_messages: None,
keep_first_messages: default_keep_first_messages(),
compaction_active: false,
provider_managed_reduction: false,
}
}
}
pub(super) const CANDIDATE_AVG_TOKENS_PER_MESSAGE: usize = 250;
pub(super) const CANDIDATE_OVERFETCH_FACTOR: usize = 4;
pub(super) const CANDIDATE_MAX_MESSAGES: usize = 2_000;
pub(super) const MAX_KEEP_FIRST_MESSAGES: usize = 16;