Skip to main content

latch_core/
config.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Serialize, Deserialize, Default)]
4pub struct LatchConfig {
5    pub compression: Option<CompressionConfig>,
6    pub cache: Option<CacheConfig>,
7    pub router: Option<RouterConfig>,
8    pub retry: Option<RetryConfig>,
9    pub meter: Option<MeterConfig>,
10}
11
12#[derive(Clone, Debug, Serialize, Deserialize)]
13pub struct CompressionConfig {
14    pub strategy: CompressionStrategy,
15    pub max_turns: usize,
16    pub summarization_model: Option<String>,
17}
18
19#[derive(Clone, Debug, Serialize, Deserialize)]
20pub enum CompressionStrategy {
21    SlidingWindow,
22    Summarization,
23    Dedup,
24}
25
26#[derive(Clone, Debug, Serialize, Deserialize)]
27pub struct CacheConfig {
28    pub prompt_caching: PromptCachingConfig,
29}
30
31#[derive(Clone, Debug, Serialize, Deserialize)]
32pub struct PromptCachingConfig {
33    pub enabled: bool,
34    pub provider: PromptCacheProvider,
35}
36
37#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
38pub enum PromptCacheProvider {
39    Anthropic,
40    OpenAiCompatible,
41    None,
42}
43
44#[derive(Clone, Debug, Serialize, Deserialize)]
45pub struct RouterConfig {
46    pub fast_pool: String,
47    pub strong_pool: String,
48    pub confidence_threshold: f32,
49}
50
51#[derive(Clone, Debug, Serialize, Deserialize)]
52pub struct RetryConfig {
53    pub max_attempts: usize,
54    pub backoff_ms: u64,
55    pub max_backoff_ms: Option<u64>,
56    pub fallback_provider: Option<String>,
57    pub circuit_breaker: Option<CircuitBreakerConfig>,
58}
59
60#[derive(Clone, Debug, Serialize, Deserialize)]
61pub struct CircuitBreakerConfig {
62    pub failure_threshold: usize,
63    pub open_ms: u64,
64    pub half_open_max_attempts: usize,
65}
66
67#[derive(Clone, Debug, Serialize, Deserialize)]
68pub struct MeterConfig {
69    pub session_token_limit: Option<u64>,
70    pub session_request_limit: Option<u64>,
71    pub price_per_1k_input_tokens: f64,
72    pub price_per_1k_output_tokens: f64,
73    pub currency: String,
74}