use std::path::PathBuf;
use serde::{Deserialize, Serialize};
use super::MarketplaceError;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelEntry {
pub id: String,
pub name: String,
pub source: ModelSource,
pub model_type: ModelType,
pub size_bytes: Option<u64>,
pub tags: Vec<String>,
pub description: String,
pub download_url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum ModelSource {
HuggingFaceHub {
repo_id: String,
},
Ollama {
server_url: String,
name: String,
},
LocalFile {
path: PathBuf,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum ModelType {
Chat,
Completion,
Embedding,
Unknown,
}
pub trait ModelRegistry: Send + Sync {
fn list_models(&self) -> Result<Vec<ModelEntry>, MarketplaceError>;
fn search(&self, query: &str) -> Result<Vec<ModelEntry>, MarketplaceError>;
fn get_model(&self, id: &str) -> Result<Option<ModelEntry>, MarketplaceError>;
fn source_name(&self) -> &'static str;
}