1pub mod error;
2pub mod http;
3pub mod models;
4pub mod providers;
5pub mod traits;
6
7use futures::Stream;
8use std::pin::Pin;
9
10use error::LlmError;
11use http::HttpClient;
12use models::{Message, MessageOptions, StreamEvent};
13use traits::LlmProvider;
14
15pub struct LLMClient {
17 http_client: HttpClient,
18 provider: Box<dyn LlmProvider + Send + Sync>,
19}
20
21impl LLMClient {
22 pub fn new(provider: Box<dyn LlmProvider + Send + Sync>) -> Result<Self, LlmError> {
23 Ok(Self {
24 http_client: HttpClient::new()?,
25 provider,
26 })
27 }
28
29 pub async fn send_message(&self, messages: &[Message], options: &MessageOptions) -> Result<Message, LlmError> {
30 self.provider.send_msg(&self.http_client, messages, options).await
31 }
32
33 pub async fn send_message_stream(
34 &self,
35 messages: &[Message],
36 options: &MessageOptions,
37 ) -> Result<Pin<Box<dyn Stream<Item = Result<StreamEvent, LlmError>> + Send>>, LlmError> {
38 self.provider.send_msg_stream(&self.http_client, messages, options).await
39 }
40}