pub mod error;
#[cfg(test)]
mod tests;
pub mod types;
pub use error::ProviderError;
pub type Result<T> = std::result::Result<T, ProviderError>;
use crate::core::types::{
CompletionOptions, CompletionResult, EmbeddingOptions, EmbeddingResult, GenerateOptions,
GenerateResult, ImageGenerateOptions, ImageGenerateResult, Prompt, SpeechOptions, SpeechResult,
StreamPart, TranscriptionOptions, TranscriptionResult,
};
use async_trait::async_trait;
use futures::stream::BoxStream;
#[async_trait]
pub trait LanguageModel: Send + Sync {
async fn generate(&self, prompt: Prompt, options: GenerateOptions) -> Result<GenerateResult>;
async fn generate_stream(
&self,
_prompt: Prompt,
_options: GenerateOptions,
) -> Result<BoxStream<'static, StreamPart>> {
Err(ProviderError::NotSupported(
"Streaming not implemented for this model".to_string(),
))
}
}
#[async_trait]
pub trait EmbeddingModel: Send + Sync {
async fn embed(
&self,
values: Vec<String>,
options: EmbeddingOptions,
) -> Result<EmbeddingResult>;
}
#[async_trait]
pub trait ImageModel: Send + Sync {
async fn generate(&self, options: ImageGenerateOptions) -> Result<ImageGenerateResult>;
}
#[async_trait]
pub trait CompletionModel: Send + Sync {
async fn complete(&self, options: CompletionOptions) -> Result<CompletionResult>;
}
#[async_trait]
pub trait SpeechModel: Send + Sync {
async fn synthesize(&self, options: SpeechOptions) -> Result<SpeechResult>;
}
#[async_trait]
pub trait TranscriptionModel: Send + Sync {
async fn transcribe(&self, options: TranscriptionOptions) -> Result<TranscriptionResult>;
}