mod openai_responses#
- module openai_responses#
Built-in codec for the OpenAI Responses API.
Implements
LlmCodec(request decode/encode) andLlmResponseCodec(response decode) for the OpenAI Responses API format.The Responses API differs significantly from Chat Completions:
Response: Heterogeneous
outputarray (message, function_call, reasoning) instead ofchoices[0].message.Finish reason: Derived from
status+incomplete_details.reasoninstead offinish_reasonfield.Request: Uses
input(string or array) instead ofmessages, andinstructions(top-level) instead of system message.Max tokens:
max_output_tokensinstead ofmax_tokens.
Structs and Unions
- struct OpenAIResponsesCodec#
Built-in codec for the OpenAI Responses API.
Traits implemented
- impl LlmResponseCodec for OpenAIResponsesCodec#
- impl LlmCodec for OpenAIResponsesCodec#
- struct OpenAIResponsesStreamingCodec#
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 throughOpenAIResponsesCodec::decode_responseto produce the canonicalAnnotatedLlmResponse.Strategy
The Responses API is a relatively forgiving streaming target because every event carries either the full
responsesnapshot (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 becauseLlmFinalizerFnconsumes the finalize step.Implementations
- impl OpenAIResponsesStreamingCodec#
Functions
- fn new() -> Self#
Creates a fresh streaming codec with empty accumulator state.
Traits implemented
- impl Default for OpenAIResponsesStreamingCodec#
- impl super::streaming::StreamingCodec for OpenAIResponsesStreamingCodec#