pub struct OpenAiClient {
api_key: Option<SecretString>,
endpoint: String,
model: String,
max_tokens: Option<u32>,
client: Client,
}Expand description
OpenAI LLM client.
API keys are stored using SecretString which zeroizes memory on drop,
preventing sensitive credentials from lingering in memory after use.
Fields§
§api_key: Option<SecretString>API key (zeroized on drop for security).
endpoint: StringAPI endpoint.
model: StringModel to use.
max_tokens: Option<u32>Maximum completion tokens (default: 8192).
client: ClientHTTP client.
Implementations§
Source§impl OpenAiClient
impl OpenAiClient
Sourcepub const DEFAULT_ENDPOINT: &'static str = "https://api.openai.com/v1"
pub const DEFAULT_ENDPOINT: &'static str = "https://api.openai.com/v1"
Default API endpoint.
Sourcepub const DEFAULT_MODEL: &'static str = "gpt-5-mini"
pub const DEFAULT_MODEL: &'static str = "gpt-5-mini"
Default model.
Sourcepub const DEFAULT_MAX_TOKENS: u32 = 8192
pub const DEFAULT_MAX_TOKENS: u32 = 8192
Default max completion tokens.
Sourcepub fn with_api_key(self, key: impl Into<String>) -> Self
pub fn with_api_key(self, key: impl Into<String>) -> Self
Sets the API key.
Sourcepub fn with_endpoint(self, endpoint: impl Into<String>) -> Self
pub fn with_endpoint(self, endpoint: impl Into<String>) -> Self
Sets the API endpoint.
Sourcepub fn with_model(self, model: impl Into<String>) -> Self
pub fn with_model(self, model: impl Into<String>) -> Self
Sets the model.
Sourcepub fn without_api_key(self) -> Self
pub fn without_api_key(self) -> Self
Clears the API key (for testing scenarios).
Sourcepub fn with_http_config(self, config: LlmHttpConfig) -> Self
pub fn with_http_config(self, config: LlmHttpConfig) -> Self
Sets HTTP client timeouts for LLM requests.
Sourcepub const fn with_max_tokens(self, max_tokens: u32) -> Self
pub const fn with_max_tokens(self, max_tokens: u32) -> Self
Sets the maximum completion tokens.
Sourcefn validate(&self) -> Result<()>
fn validate(&self) -> Result<()>
Validates that the client is configured with a valid API key (SEC-M1).
Checks both presence and format of the API key to prevent injection attacks.
Sourcefn is_gpt5_model(&self) -> bool
fn is_gpt5_model(&self) -> bool
Checks if the model is a GPT-5 family model.
GPT-5 models use max_completion_tokens instead of max_tokens
and only support temperature=1 (default).
Sourcefn is_valid_api_key_format(key: &str) -> bool
fn is_valid_api_key_format(key: &str) -> bool
Validates OpenAI API key format (SEC-M1).
OpenAI API keys follow the format: sk- prefix followed by alphanumeric
characters. This prevents injection attacks via malformed keys.
Trait Implementations§
Source§impl Default for OpenAiClient
impl Default for OpenAiClient
Source§impl LlmProvider for OpenAiClient
impl LlmProvider for OpenAiClient
Source§fn complete(&self, prompt: &str) -> Result<String>
fn complete(&self, prompt: &str) -> Result<String>
Source§fn complete_with_system(&self, system: &str, user: &str) -> Result<String>
fn complete_with_system(&self, system: &str, user: &str) -> Result<String>
Source§fn analyze_for_capture(&self, content: &str) -> Result<CaptureAnalysis>
fn analyze_for_capture(&self, content: &str) -> Result<CaptureAnalysis>
Source§fn analyze_for_capture_extended(
&self,
content: &str,
existing_memories: Option<&str>,
) -> Result<ExtendedCaptureAnalysis>
fn analyze_for_capture_extended( &self, content: &str, existing_memories: Option<&str>, ) -> Result<ExtendedCaptureAnalysis>
Source§fn classify_search_intent(&self, prompt: &str) -> Result<ExtendedSearchIntent>
fn classify_search_intent(&self, prompt: &str) -> Result<ExtendedSearchIntent>
Source§fn analyze_for_consolidation(
&self,
memories: &str,
) -> Result<ConsolidationAnalysis>
fn analyze_for_consolidation( &self, memories: &str, ) -> Result<ConsolidationAnalysis>
Auto Trait Implementations§
impl Freeze for OpenAiClient
impl !RefUnwindSafe for OpenAiClient
impl Send for OpenAiClient
impl Sync for OpenAiClient
impl Unpin for OpenAiClient
impl !UnwindSafe 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<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].