bottest/tests/unit/llm/llm_observability.rs

130 lines
No EOL
3.4 KiB
Rust

#![allow(unused_imports)]
#![allow(unused_variables)]
#![allow(dead_code)]
#[test]
fn test_default_config() {
let config = ObservabilityConfig::default();
assert!(config.enabled);
assert!(config.cost_tracking);
assert_eq!(config.budget_daily, 100.0);
}
#[test]
fn test_calculate_cost() {
let manager = ObservabilityManager::new(ObservabilityConfig::default());
let cost = manager.calculate_cost("gpt-4", 1000, 500);
assert!(cost > 0.0);
let cost = manager.calculate_cost("local", 1000, 500);
assert_eq!(cost, 0.0);
let cost = manager.calculate_cost("unknown-model", 1000, 500);
assert_eq!(cost, 0.0);
}
#[test]
fn test_quick_stats() {
let manager = ObservabilityManager::new(ObservabilityConfig::default());
let stats = manager.get_quick_stats();
assert_eq!(stats.total_requests, 0);
assert_eq!(stats.total_tokens, 0);
assert_eq!(stats.cache_hit_rate, 0.0);
}
#[test]
fn test_start_span() {
let manager = ObservabilityManager::new(ObservabilityConfig::default());
let trace_id = Uuid::new_v4();
let span = manager.start_span(trace_id, "test_operation", "test_component", None);
assert_eq!(span.name, "test_operation");
assert_eq!(span.component, "test_component");
assert_eq!(span.status, TraceStatus::InProgress);
assert!(span.duration_ms.is_none());
}
#[test]
fn test_end_span() {
let manager = ObservabilityManager::new(ObservabilityConfig::default());
let trace_id = Uuid::new_v4();
let mut span = manager.start_span(trace_id, "test_operation", "test_component", None);
std::thread::sleep(std::time::Duration::from_millis(10));
manager.end_span(&mut span, TraceStatus::Ok, None);
assert_eq!(span.status, TraceStatus::Ok);
assert!(span.duration_ms.is_some());
assert!(span.end_time.is_some());
}
#[tokio::test]
async fn test_budget_status() {
let manager = ObservabilityManager::new(ObservabilityConfig::default());
let status = manager.get_budget_status().await;
assert_eq!(status.daily_limit, 100.0);
assert_eq!(status.daily_spend, 0.0);
assert!(!status.daily_exceeded);
}
#[tokio::test]
async fn test_budget_check() {
let manager = ObservabilityManager::new(ObservabilityConfig::default());
let result = manager.check_budget(1.0).await;
assert_eq!(result, BudgetCheckResult::Ok);
let result = manager.check_budget(150.0).await;
assert_eq!(result, BudgetCheckResult::DailyExceeded);
}
#[test]
fn test_metrics_to_dynamic() {
let metrics = LLMRequestMetrics {
request_id: Uuid::new_v4(),
session_id: Uuid::new_v4(),
bot_id: Uuid::new_v4(),
model: "gpt-4".to_string(),
request_type: RequestType::Chat,
input_tokens: 100,
output_tokens: 50,
total_tokens: 150,
latency_ms: 500,
ttft_ms: Some(100),
cached: false,
success: true,
error: None,
estimated_cost: 0.01,
timestamp: Utc::now(),
metadata: HashMap::new(),
};
let dynamic = metrics.to_dynamic();
assert!(dynamic.is::<Map>());
}