pub struct OpenAIProtocolChatDriver { /* private fields */ }Expand description
OpenAI Protocol Chat Driver
Base implementation of ChatDriver for OpenAI-compatible APIs.
Supports streaming responses and tool calls.
Rate limit handling: On 429 errors, automatically retries with exponential
backoff, respecting x-ratelimit-reset-* and retry-after headers.
This is the base protocol driver used in examples and for OpenAI-compatible endpoints.
For production use with OpenAI, consider using OpenAIChatDriver from the everruns-openai crate.
§Example
use everruns_core::OpenAIProtocolChatDriver;
let driver = OpenAIProtocolChatDriver::new("your-api-key");
// or with custom endpoint
let driver = OpenAIProtocolChatDriver::with_base_url("your-api-key", "https://api.example.com/v1/chat/completions");
// or with custom retry config
let driver = OpenAIProtocolChatDriver::new("your-api-key")
.with_retry_config(LlmRetryConfig::aggressive());Implementations§
Source§impl OpenAIProtocolChatDriver
impl OpenAIProtocolChatDriver
Sourcepub fn with_base_url(
api_key: impl Into<String>,
api_url: impl Into<String>,
) -> Self
pub fn with_base_url( api_key: impl Into<String>, api_url: impl Into<String>, ) -> Self
Create a new driver with a custom API URL (for OpenAI-compatible APIs)
Sourcepub fn with_retry_config(self, config: LlmRetryConfig) -> Self
pub fn with_retry_config(self, config: LlmRetryConfig) -> Self
Configure retry behavior for rate limit errors
Sourcepub fn with_auth_provider(self, provider: Arc<dyn AuthHeaderProvider>) -> Self
pub fn with_auth_provider(self, provider: Arc<dyn AuthHeaderProvider>) -> Self
Set a pluggable AuthHeaderProvider that overrides the default
api-key / bearer auth. Used for OAuth bearer tokens (e.g. Entra ID).
Trait Implementations§
Source§impl ChatDriver for OpenAIProtocolChatDriver
impl ChatDriver for OpenAIProtocolChatDriver
Source§fn supports_parallel_tool_calls(&self, _model: &str) -> bool
fn supports_parallel_tool_calls(&self, _model: &str) -> bool
OpenAI-compatible Chat Completions accept the top-level
parallel_tool_calls boolean, so the preference maps directly onto the
wire for every model served through this protocol.
Source§fn chat_completion_stream<'life0, 'life1, 'async_trait>(
&'life0 self,
messages: Vec<LlmMessage>,
config: &'life1 LlmCallConfig,
) -> Pin<Box<dyn Future<Output = Result<LlmResponseStream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn chat_completion_stream<'life0, 'life1, 'async_trait>(
&'life0 self,
messages: Vec<LlmMessage>,
config: &'life1 LlmCallConfig,
) -> Pin<Box<dyn Future<Output = Result<LlmResponseStream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn chat_completion<'life0, 'life1, 'async_trait>(
&'life0 self,
messages: Vec<LlmMessage>,
config: &'life1 LlmCallConfig,
) -> Pin<Box<dyn Future<Output = Result<LlmResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn chat_completion<'life0, 'life1, 'async_trait>(
&'life0 self,
messages: Vec<LlmMessage>,
config: &'life1 LlmCallConfig,
) -> Pin<Box<dyn Future<Output = Result<LlmResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_models<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<Vec<DiscoveredModel>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_models<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<Vec<DiscoveredModel>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn supports_compact(&self) -> bool
fn supports_compact(&self) -> bool
Source§impl Clone for OpenAIProtocolChatDriver
impl Clone for OpenAIProtocolChatDriver
Source§fn clone(&self) -> OpenAIProtocolChatDriver
fn clone(&self) -> OpenAIProtocolChatDriver
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for OpenAIProtocolChatDriver
impl !UnwindSafe for OpenAIProtocolChatDriver
impl Freeze for OpenAIProtocolChatDriver
impl Send for OpenAIProtocolChatDriver
impl Sync for OpenAIProtocolChatDriver
impl Unpin for OpenAIProtocolChatDriver
impl UnsafeUnpin for OpenAIProtocolChatDriver
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> 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::Request