use crate::client::macros::http_client;
use crate::driver::Model;
use crate::error::ProviderError;
use crate::model::ModelList;
use crate::providers::openai::responses_api::wire::Responses;
#[cfg(feature = "image")]
use crate::providers::openai::wire::Images;
#[cfg(feature = "audio")]
use crate::providers::openai::wire::Speech;
use crate::providers::openai::wire::{
Chat, Embeddings, OpenAIConfig, OpenAiWire, Rerank, Transcriptions,
};
http_client!(
OpenAI,
OpenAIConfig
);
impl OpenAI {
#[cfg(feature = "reqwest")]
#[cfg_attr(docsrs, doc(cfg(feature = "reqwest")))]
pub fn new(api_key: impl Into<crate::wire::Secret>) -> Self {
OpenAIConfig::new(api_key).client()
}
#[cfg(feature = "reqwest")]
#[cfg_attr(docsrs, doc(cfg(feature = "reqwest")))]
pub fn from_env() -> Result<Self, crate::client::env::EnvError> {
Ok(OpenAIConfig::from_env()?.client())
}
pub fn completion(&self, model: impl Into<String>) -> Model<OpenAiWire> {
self.model(self.config.completion(model))
}
pub fn responses(&self, model: impl Into<String>) -> Model<Responses> {
self.model(self.config.responses(model))
}
pub fn chat(&self, model: impl Into<String>) -> Model<Chat> {
self.model(self.config.chat(model))
}
pub fn embedding(&self, model: impl Into<String>, ndims: Option<usize>) -> Model<Embeddings> {
self.model(self.config.embedding(model, ndims))
}
pub fn rerank(&self, model: impl Into<String>) -> Model<Rerank> {
self.model(self.config.rerank(model))
}
pub fn transcription(&self, model: impl Into<String>) -> Model<Transcriptions> {
self.model(self.config.transcription(model))
}
#[cfg(feature = "image")]
#[cfg_attr(docsrs, doc(cfg(feature = "image")))]
pub fn image_generation(&self, model: impl Into<String>) -> Model<Images> {
self.model(self.config.image_generation(model))
}
#[cfg(feature = "audio")]
#[cfg_attr(docsrs, doc(cfg(feature = "audio")))]
pub fn audio_generation(&self, model: impl Into<String>) -> Model<Speech> {
self.model(self.config.audio_generation(model))
}
pub async fn list_models(&self) -> Result<ModelList, ProviderError> {
self.model(self.config.models()).list().await
}
pub async fn verify(&self) -> Result<(), ProviderError> {
self.model(self.config.verify()).verify().await
}
}