Skip to main content

latch_core/
decision.rs

1use crate::{CompressionStrategy, Message};
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Serialize, Deserialize)]
5pub struct CompressionResult {
6    pub messages: Vec<Message>,
7    pub tokens_before: usize,
8    pub tokens_after: usize,
9    pub strategy_used: CompressionStrategy,
10    /// Savings ratio (0.0-1.0)
11    pub savings_ratio: f32,
12}
13
14#[derive(Clone, Debug, Serialize, Deserialize)]
15#[serde(tag = "type")]
16pub enum CompressionAction {
17    #[serde(rename = "skip")]
18    Skip {
19        tokens: usize,
20        reason: String,
21    },
22    #[serde(rename = "applied")]
23    Applied(CompressionResult),
24}
25
26#[derive(Clone, Debug, Serialize, Deserialize)]
27#[serde(tag = "type")]
28pub enum RoutingDecision {
29    #[serde(rename = "route")]
30    Route {
31        provider: String,
32        reason: String,
33        confidence: f32,
34    },
35    #[serde(rename = "uncertain")]
36    Uncertain {
37        reason: String,
38        candidates: Vec<(String, f32)>,
39    },
40}
41
42impl Default for RoutingDecision {
43    fn default() -> Self {
44        RoutingDecision::Uncertain {
45            reason: "no routing has been performed".to_string(),
46            candidates: vec![],
47        }
48    }
49}