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();
// Endpoint and authentication are configured on a runtime Provider.
// Retry policy remains a wire-protocol concern.
let driver = OpenAIProtocolChatDriver::new()
.with_retry_config(LlmRetryConfig::aggressive());Implementations§
Source§impl OpenAIProtocolChatDriver
impl OpenAIProtocolChatDriver
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
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, 'life2, 'async_trait>(
&'life0 self,
endpoint: &'life1 ProviderEndpoint,
messages: Vec<LlmMessage>,
config: &'life2 LlmCallConfig,
) -> Pin<Box<dyn Future<Output = Result<LlmResponseStream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn chat_completion_stream<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
endpoint: &'life1 ProviderEndpoint,
messages: Vec<LlmMessage>,
config: &'life2 LlmCallConfig,
) -> Pin<Box<dyn Future<Output = Result<LlmResponseStream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Call the LLM with streaming response
Source§fn chat_completion<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
endpoint: &'life1 ProviderEndpoint,
messages: Vec<LlmMessage>,
config: &'life2 LlmCallConfig,
) -> Pin<Box<dyn Future<Output = Result<LlmResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn chat_completion<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
endpoint: &'life1 ProviderEndpoint,
messages: Vec<LlmMessage>,
config: &'life2 LlmCallConfig,
) -> Pin<Box<dyn Future<Output = Result<LlmResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Call the LLM without streaming (convenience method)
Source§fn list_models<'life0, 'life1, 'async_trait>(
&'life0 self,
_endpoint: &'life1 ProviderEndpoint,
) -> Pin<Box<dyn Future<Output = Result<Option<Vec<DiscoveredModel>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_models<'life0, 'life1, 'async_trait>(
&'life0 self,
_endpoint: &'life1 ProviderEndpoint,
) -> Pin<Box<dyn Future<Output = Result<Option<Vec<DiscoveredModel>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List available models from the provider Read more
Source§fn supports_compact(&self) -> bool
fn supports_compact(&self) -> bool
Check if this driver supports the compact endpoint Read more
Source§fn supports_stateful_responses(&self) -> bool
fn supports_stateful_responses(&self) -> bool
Whether this driver persists Responses API state and can resolve tool
calls that are reachable only through
previous_response_id. Read moreSource§fn effective_context_window(&self, _model: &str) -> Option<usize>
fn effective_context_window(&self, _model: &str) -> Option<usize>
Effective context window for
model, when the driver has authoritative
model metadata that is not represented by Everruns’ built-in profiles. Read moreSource§fn compact<'life0, 'life1, 'async_trait>(
&'life0 self,
_endpoint: &'life1 ProviderEndpoint,
_request: CompactRequest,
) -> Pin<Box<dyn Future<Output = Result<Option<CompactResponse>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn compact<'life0, 'life1, 'async_trait>(
&'life0 self,
_endpoint: &'life1 ProviderEndpoint,
_request: CompactRequest,
) -> Pin<Box<dyn Future<Output = Result<Option<CompactResponse>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Compact a conversation to reduce context size Read more
Source§impl Clone for OpenAIProtocolChatDriver
impl Clone for OpenAIProtocolChatDriver
Source§fn clone(&self) -> OpenAIProtocolChatDriver
fn clone(&self) -> OpenAIProtocolChatDriver
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for OpenAIProtocolChatDriver
impl Debug for OpenAIProtocolChatDriver
Auto 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
Mutably borrows from an owned value. Read more