use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ModelEntry {
pub provider: String,
pub model: String,
}
impl ModelEntry {
pub fn new(provider: String, model: String) -> Self {
Self { provider, model }
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelConfig {
#[serde(default)]
pub models: Vec<ModelEntry>,
#[serde(default = "default_allow_user_default")]
pub allow_user_default: bool,
#[serde(default)]
pub parameters: HashMap<String, serde_json::Value>,
#[serde(default)]
pub request_timeout_secs: Option<u64>,
}
fn default_allow_user_default() -> bool {
true
}
impl ModelConfig {
pub fn new(provider: String, model: String) -> Self {
Self {
models: vec![ModelEntry::new(provider, model)],
allow_user_default: true,
parameters: HashMap::new(),
request_timeout_secs: None,
}
}
pub fn provider(&self) -> &str {
self.models
.first()
.map(|e| e.provider.as_str())
.unwrap_or("anthropic")
}
pub fn model(&self) -> &str {
self.models
.first()
.map(|e| e.model.as_str())
.unwrap_or("claude-sonnet-4-6")
}
}