use crate::records::{Capability, ExecutionMode, Modality, ModelSource, SourceKind};
#[derive(Debug, Clone, PartialEq)]
pub struct DiscoveredModel {
pub name: String,
pub source: ModelSource,
pub modality_hint: Option<Modality>,
pub capabilities_hint: Vec<Capability>,
pub execution_hint: ExecutionMode,
pub footprint_bytes: i64,
pub primary_weight_path: Option<String>,
pub diagnostics: Vec<String>,
pub context_length_hint: Option<i64>,
pub has_chat_template_hint: Option<bool>,
pub tool_capable_hint: Option<bool>,
pub stop_tokens_hint: Option<Vec<String>>,
pub downloading: bool,
}
impl DiscoveredModel {
pub fn new(name: impl Into<String>, source: ModelSource) -> Self {
Self {
name: name.into(),
source,
modality_hint: None,
capabilities_hint: Vec::new(),
execution_hint: ExecutionMode::default(),
footprint_bytes: 0,
primary_weight_path: None,
diagnostics: Vec::new(),
context_length_hint: None,
has_chat_template_hint: None,
tool_capable_hint: None,
stop_tokens_hint: None,
downloading: false,
}
}
}
#[derive(Debug, Clone, Default, PartialEq)]
pub struct ScanResult {
pub discovered: Vec<DiscoveredModel>,
pub issues: Vec<String>,
pub failed_kinds: Vec<SourceKind>,
}
pub trait StoreScanner {
fn kinds(&self) -> Vec<SourceKind>;
fn scan(&self) -> ScanResult;
}