agent_core/client/
mod.rs

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
15/// This is the main LLM Client.
16pub 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}