llm/models/
mod.rs

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