use crate::message::Message;
use async_trait::async_trait;
use futures_util::stream::BoxStream;
pub type LlmError = Box<dyn std::error::Error + Send + Sync + 'static>;
#[derive(Clone, Debug, Default)]
pub struct LlmResponse {
pub content: String,
pub metadata: serde_json::Value,
}
#[async_trait]
pub trait LlmProvider: Send + Sync {
async fn chat(&self, messages: &[Message]) -> Result<LlmResponse, LlmError>;
}
#[async_trait]
pub trait LlmStreamProvider: LlmProvider {
type Chunk: Send + 'static;
async fn chat_stream(
&self,
messages: &[Message],
) -> Result<BoxStream<'static, Result<Self::Chunk, LlmError>>, LlmError>;
}