use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct SlmConfig {
pub model_id: String,
pub model_path: Option<PathBuf>,
pub hf_token: Option<String>,
pub cache_dir: PathBuf,
pub timeout_ms: u64,
pub use_gpu: bool,
pub min_confidence: f32,
}
impl Default for SlmConfig {
fn default() -> Self {
let cache_dir = dirs::cache_dir()
.unwrap_or_else(|| PathBuf::from(".cache"))
.join("mnemefusion")
.join("models");
let hf_token = std::env::var("HF_TOKEN").ok();
let model_path = std::env::var("MODEL_PATH").ok().map(PathBuf::from);
Self {
model_id: "Qwen/Qwen2.5-0.5B-Instruct".to_string(), model_path, hf_token,
cache_dir,
timeout_ms: 100,
use_gpu: false,
min_confidence: 0.6,
}
}
}
impl SlmConfig {
pub fn new(model_id: impl Into<String>) -> Self {
Self {
model_id: model_id.into(),
..Default::default()
}
}
pub fn with_model_path(mut self, path: impl Into<PathBuf>) -> Self {
self.model_path = Some(path.into());
self
}
pub fn with_hf_token(mut self, token: impl Into<String>) -> Self {
self.hf_token = Some(token.into());
self
}
pub fn with_cache_dir(mut self, cache_dir: impl Into<PathBuf>) -> Self {
self.cache_dir = cache_dir.into();
self
}
pub fn with_timeout_ms(mut self, timeout_ms: u64) -> Self {
self.timeout_ms = timeout_ms;
self
}
pub fn with_gpu(mut self, use_gpu: bool) -> Self {
self.use_gpu = use_gpu;
self
}
pub fn with_min_confidence(mut self, min_confidence: f32) -> Self {
self.min_confidence = min_confidence;
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_config() {
let config = SlmConfig::default();
assert_eq!(config.model_id, "Qwen/Qwen2.5-0.5B-Instruct");
assert_eq!(config.timeout_ms, 100);
assert!(!config.use_gpu);
assert_eq!(config.min_confidence, 0.6);
}
#[test]
fn test_builder_pattern() {
let config = SlmConfig::new("custom/model")
.with_timeout_ms(200)
.with_gpu(true)
.with_min_confidence(0.8);
assert_eq!(config.model_id, "custom/model");
assert_eq!(config.timeout_ms, 200);
assert!(config.use_gpu);
assert_eq!(config.min_confidence, 0.8);
}
#[test]
fn test_cache_dir_creation() {
let config = SlmConfig::default();
assert!(config.cache_dir.to_string_lossy().contains("mnemefusion"));
assert!(config.cache_dir.to_string_lossy().contains("models"));
}
}