use tracing::instrument;
use crate::auth::TokenProvider;
use crate::error::AptuError;
#[instrument(skip(provider), fields(provider_name))]
pub async fn list_models(
provider: &dyn TokenProvider,
provider_name: &str,
) -> crate::Result<Vec<crate::ai::registry::CachedModel>> {
use crate::ai::registry::{CachedModelRegistry, ModelRegistry};
use crate::cache::cache_dir;
let cache_dir = cache_dir();
let registry =
CachedModelRegistry::new(cache_dir, crate::cache::DEFAULT_MODEL_TTL_SECS, provider);
registry
.list_models(provider_name)
.await
.map_err(|e| AptuError::ModelRegistry {
message: format!("Failed to list models: {e}"),
})
}
#[instrument(skip(provider), fields(provider_name, model_id))]
pub async fn validate_model(
provider: &dyn TokenProvider,
provider_name: &str,
model_id: &str,
) -> crate::Result<bool> {
use crate::ai::registry::{CachedModelRegistry, ModelRegistry};
use crate::cache::cache_dir;
let cache_dir = cache_dir();
let registry =
CachedModelRegistry::new(cache_dir, crate::cache::DEFAULT_MODEL_TTL_SECS, provider);
registry
.model_exists(provider_name, model_id)
.await
.map_err(|e| AptuError::ModelRegistry {
message: format!("Failed to validate model: {e}"),
})
}