llm 1.3.8

A Rust library unifying multiple LLM backends.
Documentation
use async_trait::async_trait;

use crate::{
    embedding::EmbeddingProvider,
    models::{ModelListRequest, ModelListResponse, ModelsProvider},
    stt::SpeechToTextProvider,
    tts::TextToSpeechProvider,
    LLMProvider,
};

use super::wrapper::ValidatedLLM;

impl LLMProvider for ValidatedLLM {}

#[async_trait]
impl EmbeddingProvider for ValidatedLLM {
    async fn embed(&self, input: Vec<String>) -> Result<Vec<Vec<f32>>, crate::error::LLMError> {
        self.inner().embed(input).await
    }
}

#[async_trait]
impl SpeechToTextProvider for ValidatedLLM {
    async fn transcribe(&self, audio: Vec<u8>) -> Result<String, crate::error::LLMError> {
        self.inner().transcribe(audio).await
    }
}

#[async_trait]
impl TextToSpeechProvider for ValidatedLLM {
    async fn speech(&self, text: &str) -> Result<Vec<u8>, crate::error::LLMError> {
        self.inner().speech(text).await
    }
}

#[async_trait]
impl ModelsProvider for ValidatedLLM {
    async fn list_models(
        &self,
        request: Option<&ModelListRequest>,
    ) -> Result<Box<dyn ModelListResponse>, crate::error::LLMError> {
        self.inner().list_models(request).await
    }
}