openai_client_cli/service/
client.rs1use crate::{loaders::*, service::*, traits::*, Result};
2use http::header::AUTHORIZATION;
3use reqwest::{
4 Client as ReqwestClient,
5 Response,
6};
7use tracing::info;
8
9pub struct OpenAIClient {
11 key: Key,
12 organization: Option<Organization>,
13}
14
15impl OpenAIClient {
16 pub fn new(key: Key, organization: Option<Organization>) -> Self {
18 Self { key, organization }
19 }
20
21 pub async fn send(&self, request: OpenAIRequest) -> Result<Response> {
23 let method = request.method.value();
24 let url = request.url;
25 let authorization = format!("Bearer {}", self.key.value_ref());
26 let organization = self.organization
27 .as_ref()
28 .map(Loader::value_ref);
29 let body = request.parameter
30 .as_ref()
31 .map(Loader::value_ref);
32
33 let client = ReqwestClient::new();
34
35 info!("Sending request to {:?}", url.to_string());
36 let mut request = client.request(method, url);
37 request = request.header(AUTHORIZATION, authorization);
38 if let Some(organization) = organization {
39 request = request.header("OpenAI-Organization", organization);
40 }
41 if let Some(body) = body {
42 request = request.json(body);
43 }
44 let response = request.send().await?;
45 info!("Received the API response: {}", response.status());
46 Ok(response)
47 }
48}