pub struct OpenAIResponsesStreamingCodec { /* private fields */ }Expand description
Streaming counterpart to OpenAIResponsesCodec.
Replays the OpenAI Responses SSE event sequence into the same JSON shape the API returns for a
non-streaming request ({id, model, status, output, usage, incomplete_details, ...}). Once
finalized, the assembled JSON can be fed back through OpenAIResponsesCodec::decode_response
to produce the canonical AnnotatedLlmResponse.
§Strategy
The Responses API is a relatively forgiving streaming target because every event carries
either the full response snapshot (response.created, response.in_progress,
response.completed, response.failed, response.incomplete) or the final-state output item
(response.output_item.done). We:
- Track the latest
responsesnapshot — terminal events (completed/failed/incomplete) typically carry the complete state includingoutput, so we prefer those when present. - Track output items by
output_index—output_item.doneevents deliver the final per-item state, used as a fallback when the terminalresponse.outputis missing or empty. - Per-token
output_text.deltaandfunction_call_arguments.deltaevents are ignored because their content is redelivered in the matchingoutput_item.doneevent. Skipping deltas keeps the codec resilient to schema additions and avoids double-accumulation.
Internal state lives behind Arc<Mutex<...>> so the &self-produced collector and finalizer
closures share access. Each instance is single-use because LlmFinalizerFn consumes the
finalize step.
Implementations§
Trait Implementations§
Source§impl StreamingCodec for OpenAIResponsesStreamingCodec
impl StreamingCodec for OpenAIResponsesStreamingCodec
Source§fn collector(&self) -> LlmCollectorFn
fn collector(&self) -> LlmCollectorFn
Source§fn finalizer(&self) -> LlmFinalizerFn
fn finalizer(&self) -> LlmFinalizerFn
crate::codec::traits::LlmResponseCodec can decode.Auto Trait Implementations§
impl Freeze for OpenAIResponsesStreamingCodec
impl RefUnwindSafe for OpenAIResponsesStreamingCodec
impl Send for OpenAIResponsesStreamingCodec
impl Sync for OpenAIResponsesStreamingCodec
impl Unpin for OpenAIResponsesStreamingCodec
impl UnsafeUnpin for OpenAIResponsesStreamingCodec
impl UnwindSafe for OpenAIResponsesStreamingCodec
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
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