openai_agents_rust/client/
mod.rs

1mod request;
2
3use crate::client::request::{ChatRequest, ChatResponse};
4use crate::config::Config;
5use crate::error::AgentError;
6use reqwest::Client;
7use std::sync::Arc;
8
9/// Wrapper around the OpenAI HTTP client.
10pub struct OpenAiClient {
11    pub http: Client,
12    pub config: Arc<Config>,
13}
14
15impl OpenAiClient {
16    /// Create a new client from the given configuration.
17    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    /// Send a chat completion request.
29    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}