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}