#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum ModelTier {
Economy,
Standard,
Premium,
UltraPremium,
}
impl ModelTier {
pub fn cost_per_token(&self) -> f64 {
match self {
ModelTier::Economy => 0.000_000_5, ModelTier::Standard => 0.000_002_0, ModelTier::Premium => 0.000_010_0, ModelTier::UltraPremium => 0.000_060_0, }
}
pub fn quality_score(&self) -> f64 {
match self {
ModelTier::Economy => 0.55,
ModelTier::Standard => 0.72,
ModelTier::Premium => 0.88,
ModelTier::UltraPremium => 1.00,
}
}
pub fn label(&self) -> &'static str {
match self {
ModelTier::Economy => "Economy",
ModelTier::Standard => "Standard",
ModelTier::Premium => "Premium",
ModelTier::UltraPremium => "UltraPremium",
}
}
fn all() -> [ModelTier; 4] {
[
ModelTier::Economy,
ModelTier::Standard,
ModelTier::Premium,
ModelTier::UltraPremium,
]
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum ComplexitySignal {
Simple,
Moderate,
Complex,
ExpertLevel,
}
impl ComplexitySignal {
pub fn estimate(text: &str) -> ComplexitySignal {
let mut score: u32 = 0;
let sentences: Vec<&str> = text
.split(|c| c == '.' || c == '!' || c == '?')
.filter(|s| !s.trim().is_empty())
.collect();
let sentence_count = sentences.len().max(1);
let word_count = text.split_whitespace().count();
let avg_sentence_len = word_count as f64 / sentence_count as f64;
if avg_sentence_len > 20.0 {
score += 1;
}
let words: Vec<&str> = text.split_whitespace().collect();
let total_words = words.len().max(1);
let long_words = words.iter().filter(|w| w.len() > 8).count();
let long_word_ratio = long_words as f64 / total_words as f64;
if long_word_ratio > 0.15 {
score += 1;
}
let question_count = text.chars().filter(|&c| c == '?').count();
if question_count > 2 {
score += 1;
}
if text.contains("```") {
score += 2;
}
match score {
0 => ComplexitySignal::Simple,
1 => ComplexitySignal::Moderate,
2 | 3 => ComplexitySignal::Complex,
_ => ComplexitySignal::ExpertLevel,
}
}
}
#[derive(Debug, Clone)]
pub enum RoutingPolicy {
MaxQualityWithinBudget { budget_usd: f64, token_estimate: u64 },
MinCostAboveQuality { min_quality: f64, token_estimate: u64 },
FixedTier(ModelTier),
}
pub struct CostAwareRouter;
impl CostAwareRouter {
pub fn new() -> Self {
CostAwareRouter
}
pub fn estimated_cost(tier: &ModelTier, tokens: u64) -> f64 {
tier.cost_per_token() * tokens as f64
}
pub fn route(&self, text: &str, policy: &RoutingPolicy) -> ModelTier {
match policy {
RoutingPolicy::FixedTier(tier) => tier.clone(),
RoutingPolicy::MaxQualityWithinBudget {
budget_usd,
token_estimate,
} => {
let mut chosen = ModelTier::Economy;
for tier in ModelTier::all().iter().rev() {
let cost = Self::estimated_cost(tier, *token_estimate);
if cost <= *budget_usd {
chosen = tier.clone();
break;
}
}
let signal = ComplexitySignal::estimate(text);
if signal == ComplexitySignal::Simple && chosen != ModelTier::Economy {
match chosen {
ModelTier::UltraPremium => ModelTier::Premium,
ModelTier::Premium => ModelTier::Standard,
ModelTier::Standard => ModelTier::Economy,
ModelTier::Economy => ModelTier::Economy,
}
} else {
chosen
}
}
RoutingPolicy::MinCostAboveQuality {
min_quality,
token_estimate: _,
} => {
let signal = ComplexitySignal::estimate(text);
let bump = signal == ComplexitySignal::ExpertLevel;
let mut chosen = ModelTier::UltraPremium; for tier in ModelTier::all().iter() {
if tier.quality_score() >= *min_quality {
chosen = tier.clone();
break;
}
}
if bump {
chosen = match chosen {
ModelTier::Economy => ModelTier::Standard,
ModelTier::Standard => ModelTier::Premium,
ModelTier::Premium => ModelTier::UltraPremium,
ModelTier::UltraPremium => ModelTier::UltraPremium,
};
}
chosen
}
}
}
pub fn routing_explanation(&self, text: &str, policy: &RoutingPolicy) -> String {
let signal = ComplexitySignal::estimate(text);
let tier = self.route(text, policy);
let signal_label = match &signal {
ComplexitySignal::Simple => "Simple",
ComplexitySignal::Moderate => "Moderate",
ComplexitySignal::Complex => "Complex",
ComplexitySignal::ExpertLevel => "ExpertLevel",
};
let policy_label = match policy {
RoutingPolicy::MaxQualityWithinBudget { budget_usd, token_estimate } => {
format!(
"MaxQualityWithinBudget(budget=${:.4}, ~{} tokens)",
budget_usd, token_estimate
)
}
RoutingPolicy::MinCostAboveQuality { min_quality, token_estimate } => {
format!(
"MinCostAboveQuality(min_quality={:.2}, ~{} tokens)",
min_quality, token_estimate
)
}
RoutingPolicy::FixedTier(t) => format!("FixedTier({})", t.label()),
};
format!(
"Routing decision: {} tier\n\
Policy: {}\n\
Complexity signal: {} (words={}, code_blocks={})\n\
Tier quality: {:.2}, cost/token: ${:.7}",
tier.label(),
policy_label,
signal_label,
text.split_whitespace().count(),
text.matches("```").count() / 2,
tier.quality_score(),
tier.cost_per_token(),
)
}
}
impl Default for CostAwareRouter {
fn default() -> Self {
CostAwareRouter::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn model_tier_ordering() {
assert!(ModelTier::Economy < ModelTier::Standard);
assert!(ModelTier::Standard < ModelTier::Premium);
assert!(ModelTier::Premium < ModelTier::UltraPremium);
}
#[test]
fn cost_per_token_increases_with_tier() {
assert!(ModelTier::Economy.cost_per_token() < ModelTier::Standard.cost_per_token());
assert!(ModelTier::Standard.cost_per_token() < ModelTier::Premium.cost_per_token());
assert!(ModelTier::Premium.cost_per_token() < ModelTier::UltraPremium.cost_per_token());
}
#[test]
fn quality_score_increases_with_tier() {
assert!(ModelTier::Economy.quality_score() < ModelTier::Standard.quality_score());
assert!(ModelTier::UltraPremium.quality_score() == 1.0);
}
#[test]
fn complexity_simple_short_text() {
let signal = ComplexitySignal::estimate("Hello world. How are you?");
assert_eq!(signal, ComplexitySignal::Simple);
}
#[test]
fn complexity_expert_with_code() {
let text = "Explain the intricacies of monomorphisation in Rust generics. \
How does the borrow checker interact with lifetime elision? \
Please provide examples? Are there edge cases? \
```rust\nfn foo<T: Clone>(x: T) -> T { x.clone() }\n```";
let signal = ComplexitySignal::estimate(text);
assert_eq!(signal, ComplexitySignal::ExpertLevel);
}
#[test]
fn complexity_moderate() {
let text = "Understanding cryptographic authentication mechanisms requires \
considerable expertise in distributed systems architecture.";
let signal = ComplexitySignal::estimate(text);
assert!(signal >= ComplexitySignal::Moderate);
}
#[test]
fn estimated_cost_scales_linearly() {
let cost_100 = CostAwareRouter::estimated_cost(&ModelTier::Standard, 100);
let cost_200 = CostAwareRouter::estimated_cost(&ModelTier::Standard, 200);
assert!((cost_200 - 2.0 * cost_100).abs() < 1e-12);
}
#[test]
fn route_fixed_tier() {
let router = CostAwareRouter::new();
let policy = RoutingPolicy::FixedTier(ModelTier::Premium);
assert_eq!(router.route("anything", &policy), ModelTier::Premium);
}
#[test]
fn route_max_quality_within_budget_tight() {
let router = CostAwareRouter::new();
let policy = RoutingPolicy::MaxQualityWithinBudget {
budget_usd: 0.000_5,
token_estimate: 1000,
};
let tier = router.route("Hello", &policy);
assert_eq!(tier, ModelTier::Economy);
}
#[test]
fn route_min_cost_above_quality() {
let router = CostAwareRouter::new();
let policy = RoutingPolicy::MinCostAboveQuality {
min_quality: 0.70,
token_estimate: 500,
};
let tier = router.route("Simple text.", &policy);
assert_eq!(tier, ModelTier::Standard);
}
#[test]
fn routing_explanation_is_non_empty() {
let router = CostAwareRouter::new();
let policy = RoutingPolicy::FixedTier(ModelTier::Economy);
let expl = router.routing_explanation("test prompt", &policy);
assert!(!expl.is_empty());
assert!(expl.contains("Economy"));
}
}