pub struct OpenAIClient { /* private fields */ }Expand description
Async LLM client for the OpenAI chat completions API.
Implementations§
Source§impl OpenAIClient
impl OpenAIClient
Sourcepub fn new(config: &ModelConfig) -> Result<Self>
pub fn new(config: &ModelConfig) -> Result<Self>
Create a new client using credentials from the environment variable in config.
Sourcepub fn from_key(
model: impl Into<String>,
api_key: impl Into<String>,
) -> Result<Self>
pub fn from_key( model: impl Into<String>, api_key: impl Into<String>, ) -> Result<Self>
Create a new client with an explicit API key, using the default OpenAI base URL.
Returns a KernelError::Config if the HTTP client (with its connect /
total timeouts) cannot be built, rather than silently falling back to a
timeout-less reqwest::Client::default().
§Example
use llm_kernel::llm::OpenAIClient;
let client = OpenAIClient::from_key("gpt-4o-mini", "sk-...")?;Sourcepub fn from_key_with_client(
model: impl Into<String>,
api_key: impl Into<String>,
client: Client,
) -> Self
pub fn from_key_with_client( model: impl Into<String>, api_key: impl Into<String>, client: Client, ) -> Self
Create from an explicit key and a shared reqwest::Client.
Prefer this over from_key when constructing multiple
clients in a hot path — the shared client reuses the underlying TCP
connection pool.
Sourcepub fn from_key_with_base_url(
model: impl Into<String>,
api_key: impl Into<String>,
base_url: impl Into<String>,
client: Client,
) -> Self
pub fn from_key_with_base_url( model: impl Into<String>, api_key: impl Into<String>, base_url: impl Into<String>, client: Client, ) -> Self
Create from an explicit key, a custom base URL, and a shared reqwest::Client.
Use this for OpenAI-compatible providers that are not the default OpenAI endpoint (DeepSeek, Groq, Ollama, LM Studio, custom gateways, …) when you already hold the key in memory and want to reuse a shared connection pool.
Trait Implementations§
Source§impl LLMClient for OpenAIClient
impl LLMClient for OpenAIClient
Source§fn complete<'life0, 'async_trait>(
&'life0 self,
request: LLMRequest,
) -> Pin<Box<dyn Future<Output = Result<LLMResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn complete<'life0, 'async_trait>(
&'life0 self,
request: LLMRequest,
) -> Pin<Box<dyn Future<Output = Result<LLMResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn model_name(&self) -> &str
fn model_name(&self) -> &str
Source§fn stream_complete<'life0, 'async_trait>(
&'life0 self,
request: LLMRequest,
) -> Pin<Box<dyn Future<Output = Result<LLMStream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn stream_complete<'life0, 'async_trait>(
&'life0 self,
request: LLMRequest,
) -> Pin<Box<dyn Future<Output = Result<LLMStream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Auto Trait Implementations§
impl !RefUnwindSafe for OpenAIClient
impl !UnwindSafe for OpenAIClient
impl Freeze for OpenAIClient
impl Send for OpenAIClient
impl Sync for OpenAIClient
impl Unpin for OpenAIClient
impl UnsafeUnpin for OpenAIClient
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.