use serde::Deserialize;
#[derive(Debug, Deserialize, Default)]
pub struct Config {
#[serde(default)]
pub settings: Settings,
#[serde(default)]
pub tasks: Vec<TaskConfig>,
#[serde(default)]
pub providers: Vec<ProviderConfig>,
}
#[derive(Debug, Deserialize)]
pub struct Settings {
#[serde(default = "default_strategy")]
pub strategy: String,
#[serde(default = "default_max_retries")]
pub max_retries: usize,
pub debug_folder: Option<String>,
}
impl Default for Settings {
fn default() -> Self {
Self {
strategy: default_strategy(),
max_retries: default_max_retries(),
debug_folder: None,
}
}
}
fn default_strategy() -> String {
"lru".to_string()
}
fn default_max_retries() -> usize {
5
}
#[derive(Debug, Deserialize)]
pub struct TaskConfig {
pub name: String,
pub max_tokens: Option<u32>,
pub temperature: Option<f32>,
}
#[derive(Debug, Deserialize)]
pub struct ProviderConfig {
#[serde(rename = "type")]
pub provider_type: String,
pub model: String,
#[serde(default)]
pub api_key: String,
#[serde(default)]
pub tasks: Vec<String>,
#[serde(default = "default_true")]
pub enabled: bool,
pub endpoint: Option<String>,
pub name: Option<String>,
}
fn default_true() -> bool {
true
}