From 3f1f7c3f7f4fcc9f6eca8b026d8a8f1b0e19bea3 Mon Sep 17 00:00:00 2001 From: Ashwin Bharambe Date: Sat, 11 Oct 2025 14:24:32 -0700 Subject: [PATCH] feat(responses): add reasoning and annotation added events Implements missing streaming events from OpenAI Responses API spec: reasoning text/summary events for o1/o3 models, refusal events for safety moderation, annotation events for citations, and file search streaming events. Added optional reasoning_content field to chat completion chunks to support non-standard provider extensions. Refactored streaming orchestrator to handle new content types via helper methods. --- docs/static/deprecated-llama-stack-spec.html | 575 ++++++++++++++++++ docs/static/deprecated-llama-stack-spec.yaml | 506 +++++++++++++++ docs/static/llama-stack-spec.html | 575 ++++++++++++++++++ docs/static/llama-stack-spec.yaml | 506 +++++++++++++++ docs/static/stainless-llama-stack-spec.html | 575 ++++++++++++++++++ docs/static/stainless-llama-stack-spec.yaml | 506 +++++++++++++++ llama_stack/apis/agents/openai_responses.py | 254 ++++++++ llama_stack/apis/inference/inference.py | 2 + .../meta_reference/responses/streaming.py | 180 ++++++ 9 files changed, 3679 insertions(+) diff --git a/docs/static/deprecated-llama-stack-spec.html b/docs/static/deprecated-llama-stack-spec.html index 0ea2e8c43..f5a8647d1 100644 --- a/docs/static/deprecated-llama-stack-spec.html +++ b/docs/static/deprecated-llama-stack-spec.html @@ -7880,6 +7880,10 @@ "$ref": "#/components/schemas/OpenAIChatCompletionToolCall" }, "description": "(Optional) The tool calls of the delta" + }, + "reasoning_content": { + "type": "string", + "description": "(Optional) The reasoning content from the model (non-standard, for o1/o3 models)" } }, "additionalProperties": false, @@ -10269,6 +10273,28 @@ "title": "OpenAIResponseContentPartOutputText", "description": "Text content within a streamed response part." }, + "OpenAIResponseContentPartReasoningSummary": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "summary_text", + "default": "summary_text", + "description": "Content part type identifier, always \"summary_text\"" + }, + "text": { + "type": "string", + "description": "Summary text" + } + }, + "additionalProperties": false, + "required": [ + "type", + "text" + ], + "title": "OpenAIResponseContentPartReasoningSummary", + "description": "Reasoning summary part in a streamed response." + }, "OpenAIResponseContentPartReasoningText": { "type": "object", "properties": { @@ -10378,6 +10404,42 @@ { "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone" }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted" + }, { "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete" }, @@ -10412,6 +10474,18 @@ "response.mcp_call.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted", "response.content_part.added": "#/components/schemas/OpenAIResponseObjectStreamResponseContentPartAdded", "response.content_part.done": "#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone", + "response.reasoning_text.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta", + "response.reasoning_text.done": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone", + "response.reasoning_summary_part.added": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded", + "response.reasoning_summary_part.done": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone", + "response.reasoning_summary_text.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta", + "response.reasoning_summary_text.done": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone", + "response.refusal.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta", + "response.refusal.done": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone", + "response.output_text.annotation.added": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded", + "response.file_search_call.in_progress": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress", + "response.file_search_call.searching": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching", + "response.file_search_call.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted", "response.incomplete": "#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete", "response.failed": "#/components/schemas/OpenAIResponseObjectStreamResponseFailed", "response.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseCompleted" @@ -10619,6 +10693,102 @@ "title": "OpenAIResponseObjectStreamResponseFailed", "description": "Streaming event emitted when a response fails." }, + "OpenAIResponseObjectStreamResponseFileSearchCallCompleted": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the completed file search call" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.file_search_call.completed", + "default": "response.file_search_call.completed", + "description": "Event type identifier, always \"response.file_search_call.completed\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseFileSearchCallCompleted", + "description": "Streaming event for completed file search calls." + }, + "OpenAIResponseObjectStreamResponseFileSearchCallInProgress": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the file search call" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.file_search_call.in_progress", + "default": "response.file_search_call.in_progress", + "description": "Event type identifier, always \"response.file_search_call.in_progress\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseFileSearchCallInProgress", + "description": "Streaming event for file search calls in progress." + }, + "OpenAIResponseObjectStreamResponseFileSearchCallSearching": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the file search call" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.file_search_call.searching", + "default": "response.file_search_call.searching", + "description": "Event type identifier, always \"response.file_search_call.searching\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseFileSearchCallSearching", + "description": "Streaming event for file search currently searching." + }, "OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta": { "type": "object", "properties": { @@ -11084,6 +11254,75 @@ "title": "OpenAIResponseObjectStreamResponseOutputItemDone", "description": "Streaming event for when an output item is completed." }, + "OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the item to which the annotation is being added" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item in the response's output array" + }, + "content_index": { + "type": "integer", + "description": "Index position of the content part within the output item" + }, + "annotation_index": { + "type": "integer", + "description": "Index of the annotation within the content part" + }, + "annotation": { + "oneOf": [ + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationFileCitation" + }, + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationCitation" + }, + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationContainerFileCitation" + }, + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationFilePath" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "file_citation": "#/components/schemas/OpenAIResponseAnnotationFileCitation", + "url_citation": "#/components/schemas/OpenAIResponseAnnotationCitation", + "container_file_citation": "#/components/schemas/OpenAIResponseAnnotationContainerFileCitation", + "file_path": "#/components/schemas/OpenAIResponseAnnotationFilePath" + } + }, + "description": "The annotation object being added" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.output_text.annotation.added", + "default": "response.output_text.annotation.added", + "description": "Event type identifier, always \"response.output_text.annotation.added\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "content_index", + "annotation_index", + "annotation", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded", + "description": "Streaming event for when an annotation is added to output text." + }, "OpenAIResponseObjectStreamResponseOutputTextDelta": { "type": "object", "properties": { @@ -11168,6 +11407,342 @@ "title": "OpenAIResponseObjectStreamResponseOutputTextDone", "description": "Streaming event for when text output is completed." }, + "OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "part": { + "$ref": "#/components/schemas/OpenAIResponseContentPartReasoningSummary", + "description": "The summary part that was added" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_part.added", + "default": "response.reasoning_summary_part.added", + "description": "Event type identifier, always \"response.reasoning_summary_part.added\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "part", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded", + "description": "Streaming event for when a new reasoning summary part is added." + }, + "OpenAIResponseObjectStreamResponseReasoningSummaryPartDone": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "part": { + "$ref": "#/components/schemas/OpenAIResponseContentPartReasoningSummary", + "description": "The completed summary part" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_part.done", + "default": "response.reasoning_summary_part.done", + "description": "Event type identifier, always \"response.reasoning_summary_part.done\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "part", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryPartDone", + "description": "Streaming event for when a reasoning summary part is completed." + }, + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta": { + "type": "object", + "properties": { + "delta": { + "type": "string", + "description": "Incremental summary text being added" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_text.delta", + "default": "response.reasoning_summary_text.delta", + "description": "Event type identifier, always \"response.reasoning_summary_text.delta\"" + } + }, + "additionalProperties": false, + "required": [ + "delta", + "item_id", + "output_index", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta", + "description": "Streaming event for incremental reasoning summary text updates." + }, + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDone": { + "type": "object", + "properties": { + "text": { + "type": "string", + "description": "Final complete summary text" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_text.done", + "default": "response.reasoning_summary_text.done", + "description": "Event type identifier, always \"response.reasoning_summary_text.done\"" + } + }, + "additionalProperties": false, + "required": [ + "text", + "item_id", + "output_index", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryTextDone", + "description": "Streaming event for when reasoning summary text is completed." + }, + "OpenAIResponseObjectStreamResponseReasoningTextDelta": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the reasoning content part" + }, + "delta": { + "type": "string", + "description": "Incremental reasoning text being added" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item being updated" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.reasoning_text.delta", + "default": "response.reasoning_text.delta", + "description": "Event type identifier, always \"response.reasoning_text.delta\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "delta", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningTextDelta", + "description": "Streaming event for incremental reasoning text updates." + }, + "OpenAIResponseObjectStreamResponseReasoningTextDone": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the reasoning content part" + }, + "text": { + "type": "string", + "description": "Final complete reasoning text" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the completed output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.reasoning_text.done", + "default": "response.reasoning_text.done", + "description": "Event type identifier, always \"response.reasoning_text.done\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "text", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningTextDone", + "description": "Streaming event for when reasoning text is completed." + }, + "OpenAIResponseObjectStreamResponseRefusalDelta": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the content part" + }, + "delta": { + "type": "string", + "description": "Incremental refusal text being added" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.refusal.delta", + "default": "response.refusal.delta", + "description": "Event type identifier, always \"response.refusal.delta\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "delta", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseRefusalDelta", + "description": "Streaming event for incremental refusal text updates." + }, + "OpenAIResponseObjectStreamResponseRefusalDone": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the content part" + }, + "refusal": { + "type": "string", + "description": "Final complete refusal text" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.refusal.done", + "default": "response.refusal.done", + "description": "Event type identifier, always \"response.refusal.done\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "refusal", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseRefusalDone", + "description": "Streaming event for when refusal text is completed." + }, "OpenAIResponseObjectStreamResponseWebSearchCallCompleted": { "type": "object", "properties": { diff --git a/docs/static/deprecated-llama-stack-spec.yaml b/docs/static/deprecated-llama-stack-spec.yaml index 008cd8673..de789fcfd 100644 --- a/docs/static/deprecated-llama-stack-spec.yaml +++ b/docs/static/deprecated-llama-stack-spec.yaml @@ -5813,6 +5813,11 @@ components: items: $ref: '#/components/schemas/OpenAIChatCompletionToolCall' description: (Optional) The tool calls of the delta + reasoning_content: + type: string + description: >- + (Optional) The reasoning content from the model (non-standard, for o1/o3 + models) additionalProperties: false title: OpenAIChoiceDelta description: >- @@ -7644,6 +7649,26 @@ components: title: OpenAIResponseContentPartOutputText description: >- Text content within a streamed response part. + "OpenAIResponseContentPartReasoningSummary": + type: object + properties: + type: + type: string + const: summary_text + default: summary_text + description: >- + Content part type identifier, always "summary_text" + text: + type: string + description: Summary text + additionalProperties: false + required: + - type + - text + title: >- + OpenAIResponseContentPartReasoningSummary + description: >- + Reasoning summary part in a streamed response. OpenAIResponseContentPartReasoningText: type: object properties: @@ -7705,6 +7730,18 @@ components: - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartAdded' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFailed' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted' @@ -7732,6 +7769,18 @@ components: response.mcp_call.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted' response.content_part.added: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartAdded' response.content_part.done: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone' + response.reasoning_text.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta' + response.reasoning_text.done: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone' + response.reasoning_summary_part.added: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded' + response.reasoning_summary_part.done: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone' + response.reasoning_summary_text.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta' + response.reasoning_summary_text.done: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone' + response.refusal.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta' + response.refusal.done: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone' + response.output_text.annotation.added: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded' + response.file_search_call.in_progress: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress' + response.file_search_call.searching: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching' + response.file_search_call.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted' response.incomplete: '#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete' response.failed: '#/components/schemas/OpenAIResponseObjectStreamResponseFailed' response.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted' @@ -7907,6 +7956,99 @@ components: title: OpenAIResponseObjectStreamResponseFailed description: >- Streaming event emitted when a response fails. + "OpenAIResponseObjectStreamResponseFileSearchCallCompleted": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the completed file search call + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.file_search_call.completed + default: response.file_search_call.completed + description: >- + Event type identifier, always "response.file_search_call.completed" + additionalProperties: false + required: + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseFileSearchCallCompleted + description: >- + Streaming event for completed file search calls. + "OpenAIResponseObjectStreamResponseFileSearchCallInProgress": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the file search call + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.file_search_call.in_progress + default: response.file_search_call.in_progress + description: >- + Event type identifier, always "response.file_search_call.in_progress" + additionalProperties: false + required: + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseFileSearchCallInProgress + description: >- + Streaming event for file search calls in progress. + "OpenAIResponseObjectStreamResponseFileSearchCallSearching": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the file search call + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.file_search_call.searching + default: response.file_search_call.searching + description: >- + Event type identifier, always "response.file_search_call.searching" + additionalProperties: false + required: + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseFileSearchCallSearching + description: >- + Streaming event for file search currently searching. "OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta": type: object properties: @@ -8299,6 +8441,62 @@ components: OpenAIResponseObjectStreamResponseOutputItemDone description: >- Streaming event for when an output item is completed. + "OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the item to which the annotation is being added + output_index: + type: integer + description: >- + Index position of the output item in the response's output array + content_index: + type: integer + description: >- + Index position of the content part within the output item + annotation_index: + type: integer + description: >- + Index of the annotation within the content part + annotation: + oneOf: + - $ref: '#/components/schemas/OpenAIResponseAnnotationFileCitation' + - $ref: '#/components/schemas/OpenAIResponseAnnotationCitation' + - $ref: '#/components/schemas/OpenAIResponseAnnotationContainerFileCitation' + - $ref: '#/components/schemas/OpenAIResponseAnnotationFilePath' + discriminator: + propertyName: type + mapping: + file_citation: '#/components/schemas/OpenAIResponseAnnotationFileCitation' + url_citation: '#/components/schemas/OpenAIResponseAnnotationCitation' + container_file_citation: '#/components/schemas/OpenAIResponseAnnotationContainerFileCitation' + file_path: '#/components/schemas/OpenAIResponseAnnotationFilePath' + description: The annotation object being added + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.output_text.annotation.added + default: response.output_text.annotation.added + description: >- + Event type identifier, always "response.output_text.annotation.added" + additionalProperties: false + required: + - item_id + - output_index + - content_index + - annotation_index + - annotation + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded + description: >- + Streaming event for when an annotation is added to output text. "OpenAIResponseObjectStreamResponseOutputTextDelta": type: object properties: @@ -8378,6 +8576,314 @@ components: OpenAIResponseObjectStreamResponseOutputTextDone description: >- Streaming event for when text output is completed. + "OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded": + type: object + properties: + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + part: + $ref: '#/components/schemas/OpenAIResponseContentPartReasoningSummary' + description: The summary part that was added + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_part.added + default: response.reasoning_summary_part.added + description: >- + Event type identifier, always "response.reasoning_summary_part.added" + additionalProperties: false + required: + - item_id + - output_index + - part + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded + description: >- + Streaming event for when a new reasoning summary part is added. + "OpenAIResponseObjectStreamResponseReasoningSummaryPartDone": + type: object + properties: + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + part: + $ref: '#/components/schemas/OpenAIResponseContentPartReasoningSummary' + description: The completed summary part + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_part.done + default: response.reasoning_summary_part.done + description: >- + Event type identifier, always "response.reasoning_summary_part.done" + additionalProperties: false + required: + - item_id + - output_index + - part + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryPartDone + description: >- + Streaming event for when a reasoning summary part is completed. + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta": + type: object + properties: + delta: + type: string + description: Incremental summary text being added + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_text.delta + default: response.reasoning_summary_text.delta + description: >- + Event type identifier, always "response.reasoning_summary_text.delta" + additionalProperties: false + required: + - delta + - item_id + - output_index + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta + description: >- + Streaming event for incremental reasoning summary text updates. + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDone": + type: object + properties: + text: + type: string + description: Final complete summary text + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_text.done + default: response.reasoning_summary_text.done + description: >- + Event type identifier, always "response.reasoning_summary_text.done" + additionalProperties: false + required: + - text + - item_id + - output_index + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryTextDone + description: >- + Streaming event for when reasoning summary text is completed. + "OpenAIResponseObjectStreamResponseReasoningTextDelta": + type: object + properties: + content_index: + type: integer + description: >- + Index position of the reasoning content part + delta: + type: string + description: Incremental reasoning text being added + item_id: + type: string + description: >- + Unique identifier of the output item being updated + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.reasoning_text.delta + default: response.reasoning_text.delta + description: >- + Event type identifier, always "response.reasoning_text.delta" + additionalProperties: false + required: + - content_index + - delta + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningTextDelta + description: >- + Streaming event for incremental reasoning text updates. + "OpenAIResponseObjectStreamResponseReasoningTextDone": + type: object + properties: + content_index: + type: integer + description: >- + Index position of the reasoning content part + text: + type: string + description: Final complete reasoning text + item_id: + type: string + description: >- + Unique identifier of the completed output item + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.reasoning_text.done + default: response.reasoning_text.done + description: >- + Event type identifier, always "response.reasoning_text.done" + additionalProperties: false + required: + - content_index + - text + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningTextDone + description: >- + Streaming event for when reasoning text is completed. + "OpenAIResponseObjectStreamResponseRefusalDelta": + type: object + properties: + content_index: + type: integer + description: Index position of the content part + delta: + type: string + description: Incremental refusal text being added + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.refusal.delta + default: response.refusal.delta + description: >- + Event type identifier, always "response.refusal.delta" + additionalProperties: false + required: + - content_index + - delta + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseRefusalDelta + description: >- + Streaming event for incremental refusal text updates. + "OpenAIResponseObjectStreamResponseRefusalDone": + type: object + properties: + content_index: + type: integer + description: Index position of the content part + refusal: + type: string + description: Final complete refusal text + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.refusal.done + default: response.refusal.done + description: >- + Event type identifier, always "response.refusal.done" + additionalProperties: false + required: + - content_index + - refusal + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseRefusalDone + description: >- + Streaming event for when refusal text is completed. "OpenAIResponseObjectStreamResponseWebSearchCallCompleted": type: object properties: diff --git a/docs/static/llama-stack-spec.html b/docs/static/llama-stack-spec.html index 7e534f995..7f9a553bd 100644 --- a/docs/static/llama-stack-spec.html +++ b/docs/static/llama-stack-spec.html @@ -5376,6 +5376,10 @@ "$ref": "#/components/schemas/OpenAIChatCompletionToolCall" }, "description": "(Optional) The tool calls of the delta" + }, + "reasoning_content": { + "type": "string", + "description": "(Optional) The reasoning content from the model (non-standard, for o1/o3 models)" } }, "additionalProperties": false, @@ -8364,6 +8368,28 @@ "title": "OpenAIResponseContentPartOutputText", "description": "Text content within a streamed response part." }, + "OpenAIResponseContentPartReasoningSummary": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "summary_text", + "default": "summary_text", + "description": "Content part type identifier, always \"summary_text\"" + }, + "text": { + "type": "string", + "description": "Summary text" + } + }, + "additionalProperties": false, + "required": [ + "type", + "text" + ], + "title": "OpenAIResponseContentPartReasoningSummary", + "description": "Reasoning summary part in a streamed response." + }, "OpenAIResponseContentPartReasoningText": { "type": "object", "properties": { @@ -8473,6 +8499,42 @@ { "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone" }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted" + }, { "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete" }, @@ -8507,6 +8569,18 @@ "response.mcp_call.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted", "response.content_part.added": "#/components/schemas/OpenAIResponseObjectStreamResponseContentPartAdded", "response.content_part.done": "#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone", + "response.reasoning_text.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta", + "response.reasoning_text.done": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone", + "response.reasoning_summary_part.added": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded", + "response.reasoning_summary_part.done": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone", + "response.reasoning_summary_text.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta", + "response.reasoning_summary_text.done": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone", + "response.refusal.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta", + "response.refusal.done": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone", + "response.output_text.annotation.added": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded", + "response.file_search_call.in_progress": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress", + "response.file_search_call.searching": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching", + "response.file_search_call.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted", "response.incomplete": "#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete", "response.failed": "#/components/schemas/OpenAIResponseObjectStreamResponseFailed", "response.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseCompleted" @@ -8714,6 +8788,102 @@ "title": "OpenAIResponseObjectStreamResponseFailed", "description": "Streaming event emitted when a response fails." }, + "OpenAIResponseObjectStreamResponseFileSearchCallCompleted": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the completed file search call" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.file_search_call.completed", + "default": "response.file_search_call.completed", + "description": "Event type identifier, always \"response.file_search_call.completed\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseFileSearchCallCompleted", + "description": "Streaming event for completed file search calls." + }, + "OpenAIResponseObjectStreamResponseFileSearchCallInProgress": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the file search call" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.file_search_call.in_progress", + "default": "response.file_search_call.in_progress", + "description": "Event type identifier, always \"response.file_search_call.in_progress\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseFileSearchCallInProgress", + "description": "Streaming event for file search calls in progress." + }, + "OpenAIResponseObjectStreamResponseFileSearchCallSearching": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the file search call" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.file_search_call.searching", + "default": "response.file_search_call.searching", + "description": "Event type identifier, always \"response.file_search_call.searching\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseFileSearchCallSearching", + "description": "Streaming event for file search currently searching." + }, "OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta": { "type": "object", "properties": { @@ -9179,6 +9349,75 @@ "title": "OpenAIResponseObjectStreamResponseOutputItemDone", "description": "Streaming event for when an output item is completed." }, + "OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the item to which the annotation is being added" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item in the response's output array" + }, + "content_index": { + "type": "integer", + "description": "Index position of the content part within the output item" + }, + "annotation_index": { + "type": "integer", + "description": "Index of the annotation within the content part" + }, + "annotation": { + "oneOf": [ + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationFileCitation" + }, + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationCitation" + }, + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationContainerFileCitation" + }, + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationFilePath" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "file_citation": "#/components/schemas/OpenAIResponseAnnotationFileCitation", + "url_citation": "#/components/schemas/OpenAIResponseAnnotationCitation", + "container_file_citation": "#/components/schemas/OpenAIResponseAnnotationContainerFileCitation", + "file_path": "#/components/schemas/OpenAIResponseAnnotationFilePath" + } + }, + "description": "The annotation object being added" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.output_text.annotation.added", + "default": "response.output_text.annotation.added", + "description": "Event type identifier, always \"response.output_text.annotation.added\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "content_index", + "annotation_index", + "annotation", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded", + "description": "Streaming event for when an annotation is added to output text." + }, "OpenAIResponseObjectStreamResponseOutputTextDelta": { "type": "object", "properties": { @@ -9263,6 +9502,342 @@ "title": "OpenAIResponseObjectStreamResponseOutputTextDone", "description": "Streaming event for when text output is completed." }, + "OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "part": { + "$ref": "#/components/schemas/OpenAIResponseContentPartReasoningSummary", + "description": "The summary part that was added" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_part.added", + "default": "response.reasoning_summary_part.added", + "description": "Event type identifier, always \"response.reasoning_summary_part.added\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "part", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded", + "description": "Streaming event for when a new reasoning summary part is added." + }, + "OpenAIResponseObjectStreamResponseReasoningSummaryPartDone": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "part": { + "$ref": "#/components/schemas/OpenAIResponseContentPartReasoningSummary", + "description": "The completed summary part" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_part.done", + "default": "response.reasoning_summary_part.done", + "description": "Event type identifier, always \"response.reasoning_summary_part.done\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "part", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryPartDone", + "description": "Streaming event for when a reasoning summary part is completed." + }, + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta": { + "type": "object", + "properties": { + "delta": { + "type": "string", + "description": "Incremental summary text being added" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_text.delta", + "default": "response.reasoning_summary_text.delta", + "description": "Event type identifier, always \"response.reasoning_summary_text.delta\"" + } + }, + "additionalProperties": false, + "required": [ + "delta", + "item_id", + "output_index", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta", + "description": "Streaming event for incremental reasoning summary text updates." + }, + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDone": { + "type": "object", + "properties": { + "text": { + "type": "string", + "description": "Final complete summary text" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_text.done", + "default": "response.reasoning_summary_text.done", + "description": "Event type identifier, always \"response.reasoning_summary_text.done\"" + } + }, + "additionalProperties": false, + "required": [ + "text", + "item_id", + "output_index", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryTextDone", + "description": "Streaming event for when reasoning summary text is completed." + }, + "OpenAIResponseObjectStreamResponseReasoningTextDelta": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the reasoning content part" + }, + "delta": { + "type": "string", + "description": "Incremental reasoning text being added" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item being updated" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.reasoning_text.delta", + "default": "response.reasoning_text.delta", + "description": "Event type identifier, always \"response.reasoning_text.delta\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "delta", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningTextDelta", + "description": "Streaming event for incremental reasoning text updates." + }, + "OpenAIResponseObjectStreamResponseReasoningTextDone": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the reasoning content part" + }, + "text": { + "type": "string", + "description": "Final complete reasoning text" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the completed output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.reasoning_text.done", + "default": "response.reasoning_text.done", + "description": "Event type identifier, always \"response.reasoning_text.done\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "text", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningTextDone", + "description": "Streaming event for when reasoning text is completed." + }, + "OpenAIResponseObjectStreamResponseRefusalDelta": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the content part" + }, + "delta": { + "type": "string", + "description": "Incremental refusal text being added" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.refusal.delta", + "default": "response.refusal.delta", + "description": "Event type identifier, always \"response.refusal.delta\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "delta", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseRefusalDelta", + "description": "Streaming event for incremental refusal text updates." + }, + "OpenAIResponseObjectStreamResponseRefusalDone": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the content part" + }, + "refusal": { + "type": "string", + "description": "Final complete refusal text" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.refusal.done", + "default": "response.refusal.done", + "description": "Event type identifier, always \"response.refusal.done\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "refusal", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseRefusalDone", + "description": "Streaming event for when refusal text is completed." + }, "OpenAIResponseObjectStreamResponseWebSearchCallCompleted": { "type": "object", "properties": { diff --git a/docs/static/llama-stack-spec.yaml b/docs/static/llama-stack-spec.yaml index bad40c87d..7f2d8722d 100644 --- a/docs/static/llama-stack-spec.yaml +++ b/docs/static/llama-stack-spec.yaml @@ -4062,6 +4062,11 @@ components: items: $ref: '#/components/schemas/OpenAIChatCompletionToolCall' description: (Optional) The tool calls of the delta + reasoning_content: + type: string + description: >- + (Optional) The reasoning content from the model (non-standard, for o1/o3 + models) additionalProperties: false title: OpenAIChoiceDelta description: >- @@ -6340,6 +6345,26 @@ components: title: OpenAIResponseContentPartOutputText description: >- Text content within a streamed response part. + "OpenAIResponseContentPartReasoningSummary": + type: object + properties: + type: + type: string + const: summary_text + default: summary_text + description: >- + Content part type identifier, always "summary_text" + text: + type: string + description: Summary text + additionalProperties: false + required: + - type + - text + title: >- + OpenAIResponseContentPartReasoningSummary + description: >- + Reasoning summary part in a streamed response. OpenAIResponseContentPartReasoningText: type: object properties: @@ -6401,6 +6426,18 @@ components: - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartAdded' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFailed' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted' @@ -6428,6 +6465,18 @@ components: response.mcp_call.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted' response.content_part.added: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartAdded' response.content_part.done: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone' + response.reasoning_text.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta' + response.reasoning_text.done: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone' + response.reasoning_summary_part.added: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded' + response.reasoning_summary_part.done: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone' + response.reasoning_summary_text.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta' + response.reasoning_summary_text.done: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone' + response.refusal.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta' + response.refusal.done: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone' + response.output_text.annotation.added: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded' + response.file_search_call.in_progress: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress' + response.file_search_call.searching: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching' + response.file_search_call.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted' response.incomplete: '#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete' response.failed: '#/components/schemas/OpenAIResponseObjectStreamResponseFailed' response.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted' @@ -6603,6 +6652,99 @@ components: title: OpenAIResponseObjectStreamResponseFailed description: >- Streaming event emitted when a response fails. + "OpenAIResponseObjectStreamResponseFileSearchCallCompleted": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the completed file search call + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.file_search_call.completed + default: response.file_search_call.completed + description: >- + Event type identifier, always "response.file_search_call.completed" + additionalProperties: false + required: + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseFileSearchCallCompleted + description: >- + Streaming event for completed file search calls. + "OpenAIResponseObjectStreamResponseFileSearchCallInProgress": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the file search call + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.file_search_call.in_progress + default: response.file_search_call.in_progress + description: >- + Event type identifier, always "response.file_search_call.in_progress" + additionalProperties: false + required: + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseFileSearchCallInProgress + description: >- + Streaming event for file search calls in progress. + "OpenAIResponseObjectStreamResponseFileSearchCallSearching": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the file search call + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.file_search_call.searching + default: response.file_search_call.searching + description: >- + Event type identifier, always "response.file_search_call.searching" + additionalProperties: false + required: + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseFileSearchCallSearching + description: >- + Streaming event for file search currently searching. "OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta": type: object properties: @@ -6995,6 +7137,62 @@ components: OpenAIResponseObjectStreamResponseOutputItemDone description: >- Streaming event for when an output item is completed. + "OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the item to which the annotation is being added + output_index: + type: integer + description: >- + Index position of the output item in the response's output array + content_index: + type: integer + description: >- + Index position of the content part within the output item + annotation_index: + type: integer + description: >- + Index of the annotation within the content part + annotation: + oneOf: + - $ref: '#/components/schemas/OpenAIResponseAnnotationFileCitation' + - $ref: '#/components/schemas/OpenAIResponseAnnotationCitation' + - $ref: '#/components/schemas/OpenAIResponseAnnotationContainerFileCitation' + - $ref: '#/components/schemas/OpenAIResponseAnnotationFilePath' + discriminator: + propertyName: type + mapping: + file_citation: '#/components/schemas/OpenAIResponseAnnotationFileCitation' + url_citation: '#/components/schemas/OpenAIResponseAnnotationCitation' + container_file_citation: '#/components/schemas/OpenAIResponseAnnotationContainerFileCitation' + file_path: '#/components/schemas/OpenAIResponseAnnotationFilePath' + description: The annotation object being added + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.output_text.annotation.added + default: response.output_text.annotation.added + description: >- + Event type identifier, always "response.output_text.annotation.added" + additionalProperties: false + required: + - item_id + - output_index + - content_index + - annotation_index + - annotation + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded + description: >- + Streaming event for when an annotation is added to output text. "OpenAIResponseObjectStreamResponseOutputTextDelta": type: object properties: @@ -7074,6 +7272,314 @@ components: OpenAIResponseObjectStreamResponseOutputTextDone description: >- Streaming event for when text output is completed. + "OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded": + type: object + properties: + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + part: + $ref: '#/components/schemas/OpenAIResponseContentPartReasoningSummary' + description: The summary part that was added + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_part.added + default: response.reasoning_summary_part.added + description: >- + Event type identifier, always "response.reasoning_summary_part.added" + additionalProperties: false + required: + - item_id + - output_index + - part + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded + description: >- + Streaming event for when a new reasoning summary part is added. + "OpenAIResponseObjectStreamResponseReasoningSummaryPartDone": + type: object + properties: + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + part: + $ref: '#/components/schemas/OpenAIResponseContentPartReasoningSummary' + description: The completed summary part + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_part.done + default: response.reasoning_summary_part.done + description: >- + Event type identifier, always "response.reasoning_summary_part.done" + additionalProperties: false + required: + - item_id + - output_index + - part + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryPartDone + description: >- + Streaming event for when a reasoning summary part is completed. + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta": + type: object + properties: + delta: + type: string + description: Incremental summary text being added + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_text.delta + default: response.reasoning_summary_text.delta + description: >- + Event type identifier, always "response.reasoning_summary_text.delta" + additionalProperties: false + required: + - delta + - item_id + - output_index + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta + description: >- + Streaming event for incremental reasoning summary text updates. + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDone": + type: object + properties: + text: + type: string + description: Final complete summary text + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_text.done + default: response.reasoning_summary_text.done + description: >- + Event type identifier, always "response.reasoning_summary_text.done" + additionalProperties: false + required: + - text + - item_id + - output_index + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryTextDone + description: >- + Streaming event for when reasoning summary text is completed. + "OpenAIResponseObjectStreamResponseReasoningTextDelta": + type: object + properties: + content_index: + type: integer + description: >- + Index position of the reasoning content part + delta: + type: string + description: Incremental reasoning text being added + item_id: + type: string + description: >- + Unique identifier of the output item being updated + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.reasoning_text.delta + default: response.reasoning_text.delta + description: >- + Event type identifier, always "response.reasoning_text.delta" + additionalProperties: false + required: + - content_index + - delta + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningTextDelta + description: >- + Streaming event for incremental reasoning text updates. + "OpenAIResponseObjectStreamResponseReasoningTextDone": + type: object + properties: + content_index: + type: integer + description: >- + Index position of the reasoning content part + text: + type: string + description: Final complete reasoning text + item_id: + type: string + description: >- + Unique identifier of the completed output item + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.reasoning_text.done + default: response.reasoning_text.done + description: >- + Event type identifier, always "response.reasoning_text.done" + additionalProperties: false + required: + - content_index + - text + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningTextDone + description: >- + Streaming event for when reasoning text is completed. + "OpenAIResponseObjectStreamResponseRefusalDelta": + type: object + properties: + content_index: + type: integer + description: Index position of the content part + delta: + type: string + description: Incremental refusal text being added + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.refusal.delta + default: response.refusal.delta + description: >- + Event type identifier, always "response.refusal.delta" + additionalProperties: false + required: + - content_index + - delta + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseRefusalDelta + description: >- + Streaming event for incremental refusal text updates. + "OpenAIResponseObjectStreamResponseRefusalDone": + type: object + properties: + content_index: + type: integer + description: Index position of the content part + refusal: + type: string + description: Final complete refusal text + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.refusal.done + default: response.refusal.done + description: >- + Event type identifier, always "response.refusal.done" + additionalProperties: false + required: + - content_index + - refusal + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseRefusalDone + description: >- + Streaming event for when refusal text is completed. "OpenAIResponseObjectStreamResponseWebSearchCallCompleted": type: object properties: diff --git a/docs/static/stainless-llama-stack-spec.html b/docs/static/stainless-llama-stack-spec.html index 36c63367c..ffadeea73 100644 --- a/docs/static/stainless-llama-stack-spec.html +++ b/docs/static/stainless-llama-stack-spec.html @@ -7385,6 +7385,10 @@ "$ref": "#/components/schemas/OpenAIChatCompletionToolCall" }, "description": "(Optional) The tool calls of the delta" + }, + "reasoning_content": { + "type": "string", + "description": "(Optional) The reasoning content from the model (non-standard, for o1/o3 models)" } }, "additionalProperties": false, @@ -10373,6 +10377,28 @@ "title": "OpenAIResponseContentPartOutputText", "description": "Text content within a streamed response part." }, + "OpenAIResponseContentPartReasoningSummary": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "summary_text", + "default": "summary_text", + "description": "Content part type identifier, always \"summary_text\"" + }, + "text": { + "type": "string", + "description": "Summary text" + } + }, + "additionalProperties": false, + "required": [ + "type", + "text" + ], + "title": "OpenAIResponseContentPartReasoningSummary", + "description": "Reasoning summary part in a streamed response." + }, "OpenAIResponseContentPartReasoningText": { "type": "object", "properties": { @@ -10482,6 +10508,42 @@ { "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone" }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching" + }, + { + "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted" + }, { "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete" }, @@ -10516,6 +10578,18 @@ "response.mcp_call.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted", "response.content_part.added": "#/components/schemas/OpenAIResponseObjectStreamResponseContentPartAdded", "response.content_part.done": "#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone", + "response.reasoning_text.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta", + "response.reasoning_text.done": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone", + "response.reasoning_summary_part.added": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded", + "response.reasoning_summary_part.done": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone", + "response.reasoning_summary_text.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta", + "response.reasoning_summary_text.done": "#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone", + "response.refusal.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta", + "response.refusal.done": "#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone", + "response.output_text.annotation.added": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded", + "response.file_search_call.in_progress": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress", + "response.file_search_call.searching": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching", + "response.file_search_call.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted", "response.incomplete": "#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete", "response.failed": "#/components/schemas/OpenAIResponseObjectStreamResponseFailed", "response.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseCompleted" @@ -10723,6 +10797,102 @@ "title": "OpenAIResponseObjectStreamResponseFailed", "description": "Streaming event emitted when a response fails." }, + "OpenAIResponseObjectStreamResponseFileSearchCallCompleted": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the completed file search call" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.file_search_call.completed", + "default": "response.file_search_call.completed", + "description": "Event type identifier, always \"response.file_search_call.completed\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseFileSearchCallCompleted", + "description": "Streaming event for completed file search calls." + }, + "OpenAIResponseObjectStreamResponseFileSearchCallInProgress": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the file search call" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.file_search_call.in_progress", + "default": "response.file_search_call.in_progress", + "description": "Event type identifier, always \"response.file_search_call.in_progress\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseFileSearchCallInProgress", + "description": "Streaming event for file search calls in progress." + }, + "OpenAIResponseObjectStreamResponseFileSearchCallSearching": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the file search call" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.file_search_call.searching", + "default": "response.file_search_call.searching", + "description": "Event type identifier, always \"response.file_search_call.searching\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseFileSearchCallSearching", + "description": "Streaming event for file search currently searching." + }, "OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta": { "type": "object", "properties": { @@ -11188,6 +11358,75 @@ "title": "OpenAIResponseObjectStreamResponseOutputItemDone", "description": "Streaming event for when an output item is completed." }, + "OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the item to which the annotation is being added" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item in the response's output array" + }, + "content_index": { + "type": "integer", + "description": "Index position of the content part within the output item" + }, + "annotation_index": { + "type": "integer", + "description": "Index of the annotation within the content part" + }, + "annotation": { + "oneOf": [ + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationFileCitation" + }, + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationCitation" + }, + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationContainerFileCitation" + }, + { + "$ref": "#/components/schemas/OpenAIResponseAnnotationFilePath" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "file_citation": "#/components/schemas/OpenAIResponseAnnotationFileCitation", + "url_citation": "#/components/schemas/OpenAIResponseAnnotationCitation", + "container_file_citation": "#/components/schemas/OpenAIResponseAnnotationContainerFileCitation", + "file_path": "#/components/schemas/OpenAIResponseAnnotationFilePath" + } + }, + "description": "The annotation object being added" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.output_text.annotation.added", + "default": "response.output_text.annotation.added", + "description": "Event type identifier, always \"response.output_text.annotation.added\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "content_index", + "annotation_index", + "annotation", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded", + "description": "Streaming event for when an annotation is added to output text." + }, "OpenAIResponseObjectStreamResponseOutputTextDelta": { "type": "object", "properties": { @@ -11272,6 +11511,342 @@ "title": "OpenAIResponseObjectStreamResponseOutputTextDone", "description": "Streaming event for when text output is completed." }, + "OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "part": { + "$ref": "#/components/schemas/OpenAIResponseContentPartReasoningSummary", + "description": "The summary part that was added" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_part.added", + "default": "response.reasoning_summary_part.added", + "description": "Event type identifier, always \"response.reasoning_summary_part.added\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "part", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded", + "description": "Streaming event for when a new reasoning summary part is added." + }, + "OpenAIResponseObjectStreamResponseReasoningSummaryPartDone": { + "type": "object", + "properties": { + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "part": { + "$ref": "#/components/schemas/OpenAIResponseContentPartReasoningSummary", + "description": "The completed summary part" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_part.done", + "default": "response.reasoning_summary_part.done", + "description": "Event type identifier, always \"response.reasoning_summary_part.done\"" + } + }, + "additionalProperties": false, + "required": [ + "item_id", + "output_index", + "part", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryPartDone", + "description": "Streaming event for when a reasoning summary part is completed." + }, + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta": { + "type": "object", + "properties": { + "delta": { + "type": "string", + "description": "Incremental summary text being added" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_text.delta", + "default": "response.reasoning_summary_text.delta", + "description": "Event type identifier, always \"response.reasoning_summary_text.delta\"" + } + }, + "additionalProperties": false, + "required": [ + "delta", + "item_id", + "output_index", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta", + "description": "Streaming event for incremental reasoning summary text updates." + }, + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDone": { + "type": "object", + "properties": { + "text": { + "type": "string", + "description": "Final complete summary text" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the output item" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "summary_index": { + "type": "integer", + "description": "Index of the summary part within the reasoning summary" + }, + "type": { + "type": "string", + "const": "response.reasoning_summary_text.done", + "default": "response.reasoning_summary_text.done", + "description": "Event type identifier, always \"response.reasoning_summary_text.done\"" + } + }, + "additionalProperties": false, + "required": [ + "text", + "item_id", + "output_index", + "sequence_number", + "summary_index", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningSummaryTextDone", + "description": "Streaming event for when reasoning summary text is completed." + }, + "OpenAIResponseObjectStreamResponseReasoningTextDelta": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the reasoning content part" + }, + "delta": { + "type": "string", + "description": "Incremental reasoning text being added" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item being updated" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.reasoning_text.delta", + "default": "response.reasoning_text.delta", + "description": "Event type identifier, always \"response.reasoning_text.delta\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "delta", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningTextDelta", + "description": "Streaming event for incremental reasoning text updates." + }, + "OpenAIResponseObjectStreamResponseReasoningTextDone": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the reasoning content part" + }, + "text": { + "type": "string", + "description": "Final complete reasoning text" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the completed output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.reasoning_text.done", + "default": "response.reasoning_text.done", + "description": "Event type identifier, always \"response.reasoning_text.done\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "text", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseReasoningTextDone", + "description": "Streaming event for when reasoning text is completed." + }, + "OpenAIResponseObjectStreamResponseRefusalDelta": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the content part" + }, + "delta": { + "type": "string", + "description": "Incremental refusal text being added" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.refusal.delta", + "default": "response.refusal.delta", + "description": "Event type identifier, always \"response.refusal.delta\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "delta", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseRefusalDelta", + "description": "Streaming event for incremental refusal text updates." + }, + "OpenAIResponseObjectStreamResponseRefusalDone": { + "type": "object", + "properties": { + "content_index": { + "type": "integer", + "description": "Index position of the content part" + }, + "refusal": { + "type": "string", + "description": "Final complete refusal text" + }, + "item_id": { + "type": "string", + "description": "Unique identifier of the output item" + }, + "output_index": { + "type": "integer", + "description": "Index position of the item in the output list" + }, + "sequence_number": { + "type": "integer", + "description": "Sequential number for ordering streaming events" + }, + "type": { + "type": "string", + "const": "response.refusal.done", + "default": "response.refusal.done", + "description": "Event type identifier, always \"response.refusal.done\"" + } + }, + "additionalProperties": false, + "required": [ + "content_index", + "refusal", + "item_id", + "output_index", + "sequence_number", + "type" + ], + "title": "OpenAIResponseObjectStreamResponseRefusalDone", + "description": "Streaming event for when refusal text is completed." + }, "OpenAIResponseObjectStreamResponseWebSearchCallCompleted": { "type": "object", "properties": { diff --git a/docs/static/stainless-llama-stack-spec.yaml b/docs/static/stainless-llama-stack-spec.yaml index 4475cc8f0..6a33e4390 100644 --- a/docs/static/stainless-llama-stack-spec.yaml +++ b/docs/static/stainless-llama-stack-spec.yaml @@ -5507,6 +5507,11 @@ components: items: $ref: '#/components/schemas/OpenAIChatCompletionToolCall' description: (Optional) The tool calls of the delta + reasoning_content: + type: string + description: >- + (Optional) The reasoning content from the model (non-standard, for o1/o3 + models) additionalProperties: false title: OpenAIChoiceDelta description: >- @@ -7785,6 +7790,26 @@ components: title: OpenAIResponseContentPartOutputText description: >- Text content within a streamed response part. + "OpenAIResponseContentPartReasoningSummary": + type: object + properties: + type: + type: string + const: summary_text + default: summary_text + description: >- + Content part type identifier, always "summary_text" + text: + type: string + description: Summary text + additionalProperties: false + required: + - type + - text + title: >- + OpenAIResponseContentPartReasoningSummary + description: >- + Reasoning summary part in a streamed response. OpenAIResponseContentPartReasoningText: type: object properties: @@ -7846,6 +7871,18 @@ components: - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartAdded' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching' + - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFailed' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted' @@ -7873,6 +7910,18 @@ components: response.mcp_call.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted' response.content_part.added: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartAdded' response.content_part.done: '#/components/schemas/OpenAIResponseObjectStreamResponseContentPartDone' + response.reasoning_text.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDelta' + response.reasoning_text.done: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningTextDone' + response.reasoning_summary_part.added: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded' + response.reasoning_summary_part.done: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryPartDone' + response.reasoning_summary_text.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta' + response.reasoning_summary_text.done: '#/components/schemas/OpenAIResponseObjectStreamResponseReasoningSummaryTextDone' + response.refusal.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDelta' + response.refusal.done: '#/components/schemas/OpenAIResponseObjectStreamResponseRefusalDone' + response.output_text.annotation.added: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded' + response.file_search_call.in_progress: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallInProgress' + response.file_search_call.searching: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallSearching' + response.file_search_call.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseFileSearchCallCompleted' response.incomplete: '#/components/schemas/OpenAIResponseObjectStreamResponseIncomplete' response.failed: '#/components/schemas/OpenAIResponseObjectStreamResponseFailed' response.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted' @@ -8048,6 +8097,99 @@ components: title: OpenAIResponseObjectStreamResponseFailed description: >- Streaming event emitted when a response fails. + "OpenAIResponseObjectStreamResponseFileSearchCallCompleted": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the completed file search call + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.file_search_call.completed + default: response.file_search_call.completed + description: >- + Event type identifier, always "response.file_search_call.completed" + additionalProperties: false + required: + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseFileSearchCallCompleted + description: >- + Streaming event for completed file search calls. + "OpenAIResponseObjectStreamResponseFileSearchCallInProgress": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the file search call + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.file_search_call.in_progress + default: response.file_search_call.in_progress + description: >- + Event type identifier, always "response.file_search_call.in_progress" + additionalProperties: false + required: + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseFileSearchCallInProgress + description: >- + Streaming event for file search calls in progress. + "OpenAIResponseObjectStreamResponseFileSearchCallSearching": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the file search call + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.file_search_call.searching + default: response.file_search_call.searching + description: >- + Event type identifier, always "response.file_search_call.searching" + additionalProperties: false + required: + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseFileSearchCallSearching + description: >- + Streaming event for file search currently searching. "OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta": type: object properties: @@ -8440,6 +8582,62 @@ components: OpenAIResponseObjectStreamResponseOutputItemDone description: >- Streaming event for when an output item is completed. + "OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded": + type: object + properties: + item_id: + type: string + description: >- + Unique identifier of the item to which the annotation is being added + output_index: + type: integer + description: >- + Index position of the output item in the response's output array + content_index: + type: integer + description: >- + Index position of the content part within the output item + annotation_index: + type: integer + description: >- + Index of the annotation within the content part + annotation: + oneOf: + - $ref: '#/components/schemas/OpenAIResponseAnnotationFileCitation' + - $ref: '#/components/schemas/OpenAIResponseAnnotationCitation' + - $ref: '#/components/schemas/OpenAIResponseAnnotationContainerFileCitation' + - $ref: '#/components/schemas/OpenAIResponseAnnotationFilePath' + discriminator: + propertyName: type + mapping: + file_citation: '#/components/schemas/OpenAIResponseAnnotationFileCitation' + url_citation: '#/components/schemas/OpenAIResponseAnnotationCitation' + container_file_citation: '#/components/schemas/OpenAIResponseAnnotationContainerFileCitation' + file_path: '#/components/schemas/OpenAIResponseAnnotationFilePath' + description: The annotation object being added + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.output_text.annotation.added + default: response.output_text.annotation.added + description: >- + Event type identifier, always "response.output_text.annotation.added" + additionalProperties: false + required: + - item_id + - output_index + - content_index + - annotation_index + - annotation + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded + description: >- + Streaming event for when an annotation is added to output text. "OpenAIResponseObjectStreamResponseOutputTextDelta": type: object properties: @@ -8519,6 +8717,314 @@ components: OpenAIResponseObjectStreamResponseOutputTextDone description: >- Streaming event for when text output is completed. + "OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded": + type: object + properties: + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + part: + $ref: '#/components/schemas/OpenAIResponseContentPartReasoningSummary' + description: The summary part that was added + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_part.added + default: response.reasoning_summary_part.added + description: >- + Event type identifier, always "response.reasoning_summary_part.added" + additionalProperties: false + required: + - item_id + - output_index + - part + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded + description: >- + Streaming event for when a new reasoning summary part is added. + "OpenAIResponseObjectStreamResponseReasoningSummaryPartDone": + type: object + properties: + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + part: + $ref: '#/components/schemas/OpenAIResponseContentPartReasoningSummary' + description: The completed summary part + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_part.done + default: response.reasoning_summary_part.done + description: >- + Event type identifier, always "response.reasoning_summary_part.done" + additionalProperties: false + required: + - item_id + - output_index + - part + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryPartDone + description: >- + Streaming event for when a reasoning summary part is completed. + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta": + type: object + properties: + delta: + type: string + description: Incremental summary text being added + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_text.delta + default: response.reasoning_summary_text.delta + description: >- + Event type identifier, always "response.reasoning_summary_text.delta" + additionalProperties: false + required: + - delta + - item_id + - output_index + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta + description: >- + Streaming event for incremental reasoning summary text updates. + "OpenAIResponseObjectStreamResponseReasoningSummaryTextDone": + type: object + properties: + text: + type: string + description: Final complete summary text + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: Index position of the output item + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + summary_index: + type: integer + description: >- + Index of the summary part within the reasoning summary + type: + type: string + const: response.reasoning_summary_text.done + default: response.reasoning_summary_text.done + description: >- + Event type identifier, always "response.reasoning_summary_text.done" + additionalProperties: false + required: + - text + - item_id + - output_index + - sequence_number + - summary_index + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningSummaryTextDone + description: >- + Streaming event for when reasoning summary text is completed. + "OpenAIResponseObjectStreamResponseReasoningTextDelta": + type: object + properties: + content_index: + type: integer + description: >- + Index position of the reasoning content part + delta: + type: string + description: Incremental reasoning text being added + item_id: + type: string + description: >- + Unique identifier of the output item being updated + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.reasoning_text.delta + default: response.reasoning_text.delta + description: >- + Event type identifier, always "response.reasoning_text.delta" + additionalProperties: false + required: + - content_index + - delta + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningTextDelta + description: >- + Streaming event for incremental reasoning text updates. + "OpenAIResponseObjectStreamResponseReasoningTextDone": + type: object + properties: + content_index: + type: integer + description: >- + Index position of the reasoning content part + text: + type: string + description: Final complete reasoning text + item_id: + type: string + description: >- + Unique identifier of the completed output item + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.reasoning_text.done + default: response.reasoning_text.done + description: >- + Event type identifier, always "response.reasoning_text.done" + additionalProperties: false + required: + - content_index + - text + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseReasoningTextDone + description: >- + Streaming event for when reasoning text is completed. + "OpenAIResponseObjectStreamResponseRefusalDelta": + type: object + properties: + content_index: + type: integer + description: Index position of the content part + delta: + type: string + description: Incremental refusal text being added + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.refusal.delta + default: response.refusal.delta + description: >- + Event type identifier, always "response.refusal.delta" + additionalProperties: false + required: + - content_index + - delta + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseRefusalDelta + description: >- + Streaming event for incremental refusal text updates. + "OpenAIResponseObjectStreamResponseRefusalDone": + type: object + properties: + content_index: + type: integer + description: Index position of the content part + refusal: + type: string + description: Final complete refusal text + item_id: + type: string + description: Unique identifier of the output item + output_index: + type: integer + description: >- + Index position of the item in the output list + sequence_number: + type: integer + description: >- + Sequential number for ordering streaming events + type: + type: string + const: response.refusal.done + default: response.refusal.done + description: >- + Event type identifier, always "response.refusal.done" + additionalProperties: false + required: + - content_index + - refusal + - item_id + - output_index + - sequence_number + - type + title: >- + OpenAIResponseObjectStreamResponseRefusalDone + description: >- + Streaming event for when refusal text is completed. "OpenAIResponseObjectStreamResponseWebSearchCallCompleted": type: object properties: diff --git a/llama_stack/apis/agents/openai_responses.py b/llama_stack/apis/agents/openai_responses.py index a1ce134b6..18176f00f 100644 --- a/llama_stack/apis/agents/openai_responses.py +++ b/llama_stack/apis/agents/openai_responses.py @@ -953,6 +953,248 @@ class OpenAIResponseObjectStreamResponseContentPartDone(BaseModel): type: Literal["response.content_part.done"] = "response.content_part.done" +@json_schema_type +class OpenAIResponseObjectStreamResponseReasoningTextDelta(BaseModel): + """Streaming event for incremental reasoning text updates. + + :param content_index: Index position of the reasoning content part + :param delta: Incremental reasoning text being added + :param item_id: Unique identifier of the output item being updated + :param output_index: Index position of the item in the output list + :param sequence_number: Sequential number for ordering streaming events + :param type: Event type identifier, always "response.reasoning_text.delta" + """ + + content_index: int + delta: str + item_id: str + output_index: int + sequence_number: int + type: Literal["response.reasoning_text.delta"] = "response.reasoning_text.delta" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseReasoningTextDone(BaseModel): + """Streaming event for when reasoning text is completed. + + :param content_index: Index position of the reasoning content part + :param text: Final complete reasoning text + :param item_id: Unique identifier of the completed output item + :param output_index: Index position of the item in the output list + :param sequence_number: Sequential number for ordering streaming events + :param type: Event type identifier, always "response.reasoning_text.done" + """ + + content_index: int + text: str + item_id: str + output_index: int + sequence_number: int + type: Literal["response.reasoning_text.done"] = "response.reasoning_text.done" + + +@json_schema_type +class OpenAIResponseContentPartReasoningSummary(BaseModel): + """Reasoning summary part in a streamed response. + + :param type: Content part type identifier, always "summary_text" + :param text: Summary text + """ + + type: Literal["summary_text"] = "summary_text" + text: str + + +@json_schema_type +class OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded(BaseModel): + """Streaming event for when a new reasoning summary part is added. + + :param item_id: Unique identifier of the output item + :param output_index: Index position of the output item + :param part: The summary part that was added + :param sequence_number: Sequential number for ordering streaming events + :param summary_index: Index of the summary part within the reasoning summary + :param type: Event type identifier, always "response.reasoning_summary_part.added" + """ + + item_id: str + output_index: int + part: OpenAIResponseContentPartReasoningSummary + sequence_number: int + summary_index: int + type: Literal["response.reasoning_summary_part.added"] = "response.reasoning_summary_part.added" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseReasoningSummaryPartDone(BaseModel): + """Streaming event for when a reasoning summary part is completed. + + :param item_id: Unique identifier of the output item + :param output_index: Index position of the output item + :param part: The completed summary part + :param sequence_number: Sequential number for ordering streaming events + :param summary_index: Index of the summary part within the reasoning summary + :param type: Event type identifier, always "response.reasoning_summary_part.done" + """ + + item_id: str + output_index: int + part: OpenAIResponseContentPartReasoningSummary + sequence_number: int + summary_index: int + type: Literal["response.reasoning_summary_part.done"] = "response.reasoning_summary_part.done" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta(BaseModel): + """Streaming event for incremental reasoning summary text updates. + + :param delta: Incremental summary text being added + :param item_id: Unique identifier of the output item + :param output_index: Index position of the output item + :param sequence_number: Sequential number for ordering streaming events + :param summary_index: Index of the summary part within the reasoning summary + :param type: Event type identifier, always "response.reasoning_summary_text.delta" + """ + + delta: str + item_id: str + output_index: int + sequence_number: int + summary_index: int + type: Literal["response.reasoning_summary_text.delta"] = "response.reasoning_summary_text.delta" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseReasoningSummaryTextDone(BaseModel): + """Streaming event for when reasoning summary text is completed. + + :param text: Final complete summary text + :param item_id: Unique identifier of the output item + :param output_index: Index position of the output item + :param sequence_number: Sequential number for ordering streaming events + :param summary_index: Index of the summary part within the reasoning summary + :param type: Event type identifier, always "response.reasoning_summary_text.done" + """ + + text: str + item_id: str + output_index: int + sequence_number: int + summary_index: int + type: Literal["response.reasoning_summary_text.done"] = "response.reasoning_summary_text.done" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseRefusalDelta(BaseModel): + """Streaming event for incremental refusal text updates. + + :param content_index: Index position of the content part + :param delta: Incremental refusal text being added + :param item_id: Unique identifier of the output item + :param output_index: Index position of the item in the output list + :param sequence_number: Sequential number for ordering streaming events + :param type: Event type identifier, always "response.refusal.delta" + """ + + content_index: int + delta: str + item_id: str + output_index: int + sequence_number: int + type: Literal["response.refusal.delta"] = "response.refusal.delta" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseRefusalDone(BaseModel): + """Streaming event for when refusal text is completed. + + :param content_index: Index position of the content part + :param refusal: Final complete refusal text + :param item_id: Unique identifier of the output item + :param output_index: Index position of the item in the output list + :param sequence_number: Sequential number for ordering streaming events + :param type: Event type identifier, always "response.refusal.done" + """ + + content_index: int + refusal: str + item_id: str + output_index: int + sequence_number: int + type: Literal["response.refusal.done"] = "response.refusal.done" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded(BaseModel): + """Streaming event for when an annotation is added to output text. + + :param item_id: Unique identifier of the item to which the annotation is being added + :param output_index: Index position of the output item in the response's output array + :param content_index: Index position of the content part within the output item + :param annotation_index: Index of the annotation within the content part + :param annotation: The annotation object being added + :param sequence_number: Sequential number for ordering streaming events + :param type: Event type identifier, always "response.output_text.annotation.added" + """ + + item_id: str + output_index: int + content_index: int + annotation_index: int + annotation: OpenAIResponseAnnotations + sequence_number: int + type: Literal["response.output_text.annotation.added"] = "response.output_text.annotation.added" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseFileSearchCallInProgress(BaseModel): + """Streaming event for file search calls in progress. + + :param item_id: Unique identifier of the file search call + :param output_index: Index position of the item in the output list + :param sequence_number: Sequential number for ordering streaming events + :param type: Event type identifier, always "response.file_search_call.in_progress" + """ + + item_id: str + output_index: int + sequence_number: int + type: Literal["response.file_search_call.in_progress"] = "response.file_search_call.in_progress" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseFileSearchCallSearching(BaseModel): + """Streaming event for file search currently searching. + + :param item_id: Unique identifier of the file search call + :param output_index: Index position of the item in the output list + :param sequence_number: Sequential number for ordering streaming events + :param type: Event type identifier, always "response.file_search_call.searching" + """ + + item_id: str + output_index: int + sequence_number: int + type: Literal["response.file_search_call.searching"] = "response.file_search_call.searching" + + +@json_schema_type +class OpenAIResponseObjectStreamResponseFileSearchCallCompleted(BaseModel): + """Streaming event for completed file search calls. + + :param item_id: Unique identifier of the completed file search call + :param output_index: Index position of the item in the output list + :param sequence_number: Sequential number for ordering streaming events + :param type: Event type identifier, always "response.file_search_call.completed" + """ + + item_id: str + output_index: int + sequence_number: int + type: Literal["response.file_search_call.completed"] = "response.file_search_call.completed" + + OpenAIResponseObjectStream = Annotated[ OpenAIResponseObjectStreamResponseCreated | OpenAIResponseObjectStreamResponseInProgress @@ -975,6 +1217,18 @@ OpenAIResponseObjectStream = Annotated[ | OpenAIResponseObjectStreamResponseMcpCallCompleted | OpenAIResponseObjectStreamResponseContentPartAdded | OpenAIResponseObjectStreamResponseContentPartDone + | OpenAIResponseObjectStreamResponseReasoningTextDelta + | OpenAIResponseObjectStreamResponseReasoningTextDone + | OpenAIResponseObjectStreamResponseReasoningSummaryPartAdded + | OpenAIResponseObjectStreamResponseReasoningSummaryPartDone + | OpenAIResponseObjectStreamResponseReasoningSummaryTextDelta + | OpenAIResponseObjectStreamResponseReasoningSummaryTextDone + | OpenAIResponseObjectStreamResponseRefusalDelta + | OpenAIResponseObjectStreamResponseRefusalDone + | OpenAIResponseObjectStreamResponseOutputTextAnnotationAdded + | OpenAIResponseObjectStreamResponseFileSearchCallInProgress + | OpenAIResponseObjectStreamResponseFileSearchCallSearching + | OpenAIResponseObjectStreamResponseFileSearchCallCompleted | OpenAIResponseObjectStreamResponseIncomplete | OpenAIResponseObjectStreamResponseFailed | OpenAIResponseObjectStreamResponseCompleted, diff --git a/llama_stack/apis/inference/inference.py b/llama_stack/apis/inference/inference.py index 375ddb231..c845cc504 100644 --- a/llama_stack/apis/inference/inference.py +++ b/llama_stack/apis/inference/inference.py @@ -776,12 +776,14 @@ class OpenAIChoiceDelta(BaseModel): :param refusal: (Optional) The refusal of the delta :param role: (Optional) The role of the delta :param tool_calls: (Optional) The tool calls of the delta + :param reasoning_content: (Optional) The reasoning content from the model (non-standard, for o1/o3 models) """ content: str | None = None refusal: str | None = None role: str | None = None tool_calls: list[OpenAIChatCompletionToolCall] | None = None + reasoning_content: str | None = None @json_schema_type diff --git a/llama_stack/providers/inline/agents/meta_reference/responses/streaming.py b/llama_stack/providers/inline/agents/meta_reference/responses/streaming.py index 99fac0530..92a5b9e39 100644 --- a/llama_stack/providers/inline/agents/meta_reference/responses/streaming.py +++ b/llama_stack/providers/inline/agents/meta_reference/responses/streaming.py @@ -13,6 +13,8 @@ from llama_stack.apis.agents.openai_responses import ( ApprovalFilter, MCPListToolsTool, OpenAIResponseContentPartOutputText, + OpenAIResponseContentPartReasoningText, + OpenAIResponseContentPartRefusal, OpenAIResponseError, OpenAIResponseInputTool, OpenAIResponseInputToolMCP, @@ -35,6 +37,10 @@ from llama_stack.apis.agents.openai_responses import ( OpenAIResponseObjectStreamResponseOutputItemAdded, OpenAIResponseObjectStreamResponseOutputItemDone, OpenAIResponseObjectStreamResponseOutputTextDelta, + OpenAIResponseObjectStreamResponseReasoningTextDelta, + OpenAIResponseObjectStreamResponseReasoningTextDone, + OpenAIResponseObjectStreamResponseRefusalDelta, + OpenAIResponseObjectStreamResponseRefusalDone, OpenAIResponseOutput, OpenAIResponseOutputMessageFunctionToolCall, OpenAIResponseOutputMessageMCPListTools, @@ -353,6 +359,128 @@ class StreamingResponseOrchestrator: ), ) + async def _handle_reasoning_content_chunk( + self, + reasoning_content: str, + reasoning_part_emitted: bool, + reasoning_content_index: int, + message_item_id: str, + message_output_index: int, + ) -> AsyncIterator[OpenAIResponseObjectStream]: + # Emit content_part.added event for first reasoning chunk + if not reasoning_part_emitted: + self.sequence_number += 1 + yield OpenAIResponseObjectStreamResponseContentPartAdded( + content_index=reasoning_content_index, + response_id=self.response_id, + item_id=message_item_id, + output_index=message_output_index, + part=OpenAIResponseContentPartReasoningText( + text="", # Will be filled incrementally via reasoning deltas + ), + sequence_number=self.sequence_number, + ) + # Emit reasoning_text.delta event + self.sequence_number += 1 + yield OpenAIResponseObjectStreamResponseReasoningTextDelta( + content_index=reasoning_content_index, + delta=reasoning_content, + item_id=message_item_id, + output_index=message_output_index, + sequence_number=self.sequence_number, + ) + + async def _handle_refusal_content_chunk( + self, + refusal_content: str, + refusal_part_emitted: bool, + refusal_content_index: int, + message_item_id: str, + message_output_index: int, + ) -> AsyncIterator[OpenAIResponseObjectStream]: + # Emit content_part.added event for first refusal chunk + if not refusal_part_emitted: + self.sequence_number += 1 + yield OpenAIResponseObjectStreamResponseContentPartAdded( + content_index=refusal_content_index, + response_id=self.response_id, + item_id=message_item_id, + output_index=message_output_index, + part=OpenAIResponseContentPartRefusal( + refusal="", # Will be filled incrementally via refusal deltas + ), + sequence_number=self.sequence_number, + ) + # Emit refusal.delta event + self.sequence_number += 1 + yield OpenAIResponseObjectStreamResponseRefusalDelta( + content_index=refusal_content_index, + delta=refusal_content, + item_id=message_item_id, + output_index=message_output_index, + sequence_number=self.sequence_number, + ) + + async def _emit_reasoning_done_events( + self, + reasoning_text_accumulated: list[str], + reasoning_content_index: int, + message_item_id: str, + message_output_index: int, + ) -> AsyncIterator[OpenAIResponseObjectStream]: + final_reasoning_text = "".join(reasoning_text_accumulated) + # Emit reasoning_text.done event + self.sequence_number += 1 + yield OpenAIResponseObjectStreamResponseReasoningTextDone( + content_index=reasoning_content_index, + text=final_reasoning_text, + item_id=message_item_id, + output_index=message_output_index, + sequence_number=self.sequence_number, + ) + # Emit content_part.done for reasoning + self.sequence_number += 1 + yield OpenAIResponseObjectStreamResponseContentPartDone( + content_index=reasoning_content_index, + response_id=self.response_id, + item_id=message_item_id, + output_index=message_output_index, + part=OpenAIResponseContentPartReasoningText( + text=final_reasoning_text, + ), + sequence_number=self.sequence_number, + ) + + async def _emit_refusal_done_events( + self, + refusal_text_accumulated: list[str], + refusal_content_index: int, + message_item_id: str, + message_output_index: int, + ) -> AsyncIterator[OpenAIResponseObjectStream]: + final_refusal_text = "".join(refusal_text_accumulated) + # Emit refusal.done event + self.sequence_number += 1 + yield OpenAIResponseObjectStreamResponseRefusalDone( + content_index=refusal_content_index, + refusal=final_refusal_text, + item_id=message_item_id, + output_index=message_output_index, + sequence_number=self.sequence_number, + ) + # Emit content_part.done for refusal + self.sequence_number += 1 + yield OpenAIResponseObjectStreamResponseContentPartDone( + content_index=refusal_content_index, + response_id=self.response_id, + item_id=message_item_id, + output_index=message_output_index, + part=OpenAIResponseContentPartRefusal( + refusal=final_refusal_text, + ), + sequence_number=self.sequence_number, + ) + async def _process_streaming_chunks( self, completion_result, output_messages: list[OpenAIResponseOutput] ) -> AsyncIterator[OpenAIResponseObjectStream | ChatCompletionResult]: @@ -371,8 +499,14 @@ class StreamingResponseOrchestrator: tool_call_item_ids: dict[int, str] = {} # Track content parts for streaming events content_part_emitted = False + reasoning_part_emitted = False + refusal_part_emitted = False content_index = 0 + reasoning_content_index = 1 # reasoning is a separate content part + refusal_content_index = 2 # refusal is a separate content part message_output_index = len(output_messages) + reasoning_text_accumulated = [] + refusal_text_accumulated = [] async for chunk in completion_result: chat_response_id = chunk.id @@ -413,6 +547,32 @@ class StreamingResponseOrchestrator: if chunk_choice.finish_reason: chunk_finish_reason = chunk_choice.finish_reason + # Handle reasoning content if present (non-standard field for o1/o3 models) + if hasattr(chunk_choice.delta, "reasoning_content") and chunk_choice.delta.reasoning_content: + async for event in self._handle_reasoning_content_chunk( + reasoning_content=chunk_choice.delta.reasoning_content, + reasoning_part_emitted=reasoning_part_emitted, + reasoning_content_index=reasoning_content_index, + message_item_id=message_item_id, + message_output_index=message_output_index, + ): + yield event + reasoning_part_emitted = True + reasoning_text_accumulated.append(chunk_choice.delta.reasoning_content) + + # Handle refusal content if present + if chunk_choice.delta.refusal: + async for event in self._handle_refusal_content_chunk( + refusal_content=chunk_choice.delta.refusal, + refusal_part_emitted=refusal_part_emitted, + refusal_content_index=refusal_content_index, + message_item_id=message_item_id, + message_output_index=message_output_index, + ): + yield event + refusal_part_emitted = True + refusal_text_accumulated.append(chunk_choice.delta.refusal) + # Aggregate tool call arguments across chunks if chunk_choice.delta.tool_calls: for tool_call in chunk_choice.delta.tool_calls: @@ -514,6 +674,26 @@ class StreamingResponseOrchestrator: sequence_number=self.sequence_number, ) + # Emit reasoning done events if reasoning content was streamed + if reasoning_part_emitted: + async for event in self._emit_reasoning_done_events( + reasoning_text_accumulated=reasoning_text_accumulated, + reasoning_content_index=reasoning_content_index, + message_item_id=message_item_id, + message_output_index=message_output_index, + ): + yield event + + # Emit refusal done events if refusal content was streamed + if refusal_part_emitted: + async for event in self._emit_refusal_done_events( + refusal_text_accumulated=refusal_text_accumulated, + refusal_content_index=refusal_content_index, + message_item_id=message_item_id, + message_output_index=message_output_index, + ): + yield event + # Clear content when there are tool calls (OpenAI spec behavior) if chat_response_tool_calls: chat_response_content = []