use std::collections::{BTreeMap, HashMap};
use std::sync::Arc;
use std::time::Instant;
pub trait AIModelInterface: Send + Sync {
fn load_model(&self, model_path: &str) -> Result<(), Box<dyn std::error::Error>>;
fn infer(&self, input: &[f32]) -> Result<Vec<f32>, Box<dyn std::error::Error>>;
fn get_model_info(&self) -> ModelInfo;
}
#[derive(Debug, Clone)]
pub struct ModelInfo {
pub name: String,
pub version: String,
pub input_shape: Vec<usize>,
pub output_shape: Vec<usize>,
pub parameters: usize,
}
pub struct ModelManager {
models: std::collections::HashMap<String, Arc<dyn AIModelInterface>>,
}
impl ModelManager {
pub fn new() -> Self {
Self {
models: std::collections::HashMap::new(),
}
}
pub fn register_model(&mut self, name: String, model: Arc<dyn AIModelInterface>) {
self.models.insert(name, model);
}
pub fn get_model(&self, name: &str) -> Option<&Arc<dyn AIModelInterface>> {
self.models.get(name)
}
}