use async_trait::async_trait;
use super::types::{DiscoveredModel, DiscoveryStrategy};
#[async_trait]
pub trait ModelDiscoveryProvider: Send + Sync {
fn provider_id(&self) -> &str;
fn discovery_strategy(&self) -> DiscoveryStrategy;
async fn discover_models(&self) -> crate::error::Result<Vec<DiscoveredModel>>;
async fn get_model_capabilities(
&self,
model_id: &str,
) -> crate::error::Result<Option<DiscoveredModel>> {
let models = self.discover_models().await?;
Ok(models.into_iter().find(|m| m.id == model_id))
}
}