autoagents_llm/models/
mod.rs

1use async_trait::async_trait;
2use chrono::{DateTime, Utc};
3use crate::{
4    builder::LLMBackend,
5    error::LLMError,
6};
7use std::fmt::Debug;
8
9pub trait ModelListResponse {
10    fn get_models(&self) -> Vec<String>;
11    fn get_models_raw(&self) -> Vec<Box<dyn ModelListRawEntry>>;
12    fn get_backend(&self) -> LLMBackend;
13}
14
15pub trait ModelListRawEntry: Debug {
16    fn get_id(&self) -> String;
17    fn get_created_at(&self) -> DateTime<Utc>;
18    fn get_raw(&self) -> serde_json::Value;
19}
20
21#[derive(Debug, Clone, Default)]
22pub struct ModelListRequest {
23    pub filter: Option<String>,
24}
25
26/// Trait for providers that support listing and retrieving model information.
27#[async_trait]
28pub trait ModelsProvider {
29    /// Asynchronously retrieves the list of available models ID's from the provider.
30    ///
31    /// # Arguments
32    ///
33    /// * `_request` - Optional filter by model ID
34    ///
35    /// # Returns
36    ///
37    /// List of model ID's or error
38    async fn list_models(
39        &self,
40        _request: Option<&ModelListRequest>,
41    ) -> Result<Box<dyn ModelListResponse>, LLMError> {
42        Err(LLMError::ProviderError(
43            "List Models not supported".to_string(),
44        ))
45    }
46}