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 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}