openai_agents_rust/client/
mod.rs1mod request;
2
3use crate::client::request::{ChatRequest, ChatResponse};
4use crate::config::Config;
5use crate::error::AgentError;
6use reqwest::Client;
7use std::sync::Arc;
8
9pub struct OpenAiClient {
11 pub http: Client,
12 pub config: Arc<Config>,
13}
14
15impl OpenAiClient {
16 pub fn new(config: Config) -> Self {
18 let http = Client::builder()
19 .user_agent("openai-agents-rust")
20 .build()
21 .expect("Failed to build reqwest client");
22 Self {
23 http,
24 config: Arc::new(config),
25 }
26 }
27
28 pub async fn chat_completion(&self, req: ChatRequest) -> Result<ChatResponse, AgentError> {
30 let url = format!("{}/chat/completions", self.config.base_url);
31 let mut rb = self.http.post(url);
32 if !self.config.api_key.is_empty() {
33 rb = rb.bearer_auth(&self.config.api_key);
34 }
35 let response = rb.json(&req).send().await.map_err(AgentError::from)?;
36
37 let chat_resp = response
38 .json::<ChatResponse>()
39 .await
40 .map_err(AgentError::from)?;
41 Ok(chat_resp)
42 }
43}