use super::*;
use crate::config::Config;
use crate::models::ModelSelector;
use std::sync::Arc;
fn mock_metrics() -> Arc<crate::metrics::Metrics> {
Arc::new(crate::metrics::Metrics::new().unwrap())
}
#[tokio::test]
async fn test_new_validates_balanced_tier_exists_via_selector() {
let config_toml = r#"
[server]
host = "127.0.0.1"
port = 3000
request_timeout_seconds = 30
[[models.fast]]
name = "fast-1"
base_url = "http://localhost:11434/v1"
max_tokens = 2048
weight = 1.0
priority = 1
[[models.balanced]]
name = "balanced-1"
base_url = "http://localhost:1234/v1"
max_tokens = 4096
weight = 1.0
priority = 1
[[models.deep]]
name = "deep-1"
base_url = "http://localhost:8080/v1"
max_tokens = 8192
weight = 1.0
priority = 1
[routing]
strategy = "hybrid"
default_importance = "normal"
router_tier = "balanced"
"#;
let config: Config = toml::from_str(config_toml).expect("should parse config");
let config = Arc::new(config);
let selector = Arc::new(ModelSelector::new(config.clone(), mock_metrics()));
assert_eq!(selector.endpoint_count(TargetModel::Balanced), 1);
let result = LlmBasedRouter::new(selector, TargetModel::Balanced, 10, mock_metrics());
assert!(
result.is_ok(),
"LlmBasedRouter::new() should succeed with balanced tier"
);
let empty_balanced_config_toml = r#"
[server]
host = "127.0.0.1"
port = 3000
request_timeout_seconds = 30
[[models.fast]]
name = "fast-1"
base_url = "http://localhost:11434/v1"
max_tokens = 2048
weight = 1.0
priority = 1
[[models.balanced]]
[[models.deep]]
name = "deep-1"
base_url = "http://localhost:8080/v1"
max_tokens = 8192
weight = 1.0
priority = 1
[routing]
strategy = "hybrid"
default_importance = "normal"
"#;
let _ = empty_balanced_config_toml; }
#[tokio::test]
async fn test_new_succeeds_with_balanced_tier() {
let config_toml = r#"
[server]
host = "127.0.0.1"
port = 3000
request_timeout_seconds = 30
[[models.fast]]
name = "fast-1"
base_url = "http://localhost:11434/v1"
max_tokens = 2048
weight = 1.0
priority = 1
[[models.balanced]]
name = "balanced-1"
base_url = "http://localhost:1234/v1"
max_tokens = 4096
weight = 1.0
priority = 1
[[models.deep]]
name = "deep-1"
base_url = "http://localhost:8080/v1"
max_tokens = 8192
weight = 1.0
priority = 1
[routing]
strategy = "hybrid"
default_importance = "normal"
router_tier = "balanced"
"#;
let config: crate::config::Config = toml::from_str(config_toml).expect("should parse config");
let config = Arc::new(config);
let selector = Arc::new(ModelSelector::new(config.clone(), mock_metrics()));
let result = LlmBasedRouter::new(selector, TargetModel::Balanced, 10, mock_metrics());
assert!(
result.is_ok(),
"LlmBasedRouter::new() should succeed with balanced tier present"
);
}