use serde::Deserialize;
use serde::Serialize;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum ClusterRole {
Tiny,
Small,
Medium,
Large,
Vision,
}
impl std::fmt::Display for ClusterRole {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ClusterRole::Tiny => write!(f, "tiny"),
ClusterRole::Small => write!(f, "small"),
ClusterRole::Medium => write!(f, "medium"),
ClusterRole::Large => write!(f, "large"),
ClusterRole::Vision => write!(f, "vision"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ClusterConfig {
pub provider: String,
pub host: String,
pub model: String,
#[serde(default)]
pub role: Option<ClusterRole>,
pub timeout_secs: u64,
pub temperature: f64,
pub seed: u64,
pub num_ctx: usize,
pub num_predict: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub api_key: Option<String>,
pub parallel: usize,
}
impl Default for ClusterConfig {
fn default() -> Self {
Self {
provider: "ollama".to_string(),
host: "http://localhost:11434".to_string(),
model: "qwen2.5-coder:3b-instruct".to_string(),
role: Some(ClusterRole::Small),
timeout_secs: 30,
temperature: 0.1,
seed: 42,
num_ctx: 4096,
num_predict: 2048,
api_key: None,
parallel: 1,
}
}
}