feat(responses): add more streaming response types (#2375)
Some checks failed
Integration Auth Tests / test-matrix (oauth2_token) (push) Failing after 6s
Integration Tests / test-matrix (http, agents) (push) Failing after 9s
Integration Tests / test-matrix (http, scoring) (push) Failing after 8s
Integration Tests / test-matrix (http, inspect) (push) Failing after 9s
Integration Tests / test-matrix (http, post_training) (push) Failing after 10s
Integration Tests / test-matrix (library, datasets) (push) Failing after 9s
Integration Tests / test-matrix (http, datasets) (push) Failing after 11s
Integration Tests / test-matrix (library, agents) (push) Failing after 9s
Integration Tests / test-matrix (http, inference) (push) Failing after 11s
Integration Tests / test-matrix (http, providers) (push) Failing after 10s
Integration Tests / test-matrix (http, tool_runtime) (push) Failing after 9s
Integration Tests / test-matrix (library, inference) (push) Failing after 7s
Integration Tests / test-matrix (library, inspect) (push) Failing after 7s
Test External Providers / test-external-providers (venv) (push) Failing after 7s
Integration Tests / test-matrix (library, providers) (push) Failing after 7s
Integration Tests / test-matrix (library, post_training) (push) Failing after 9s
Unit Tests / unit-tests (3.10) (push) Failing after 7s
Integration Tests / test-matrix (library, scoring) (push) Failing after 9s
Unit Tests / unit-tests (3.13) (push) Failing after 7s
Integration Tests / test-matrix (library, tool_runtime) (push) Failing after 10s
Update ReadTheDocs / update-readthedocs (push) Failing after 6s
Unit Tests / unit-tests (3.11) (push) Failing after 9s
Unit Tests / unit-tests (3.12) (push) Failing after 34s
Pre-commit / pre-commit (push) Successful in 1m21s

This commit is contained in:
Ashwin Bharambe 2025-06-03 15:48:41 -07:00 committed by GitHub
parent d96f6ec763
commit ed69c1b3cc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 1003 additions and 14 deletions

View file

@ -7593,9 +7593,57 @@
{ {
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseCreated" "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseCreated"
}, },
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputItemAdded"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputItemDone"
},
{ {
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDelta" "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDelta"
}, },
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDone"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallInProgress"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallSearching"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallCompleted"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsInProgress"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsFailed"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsCompleted"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallArgumentsDone"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallInProgress"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallFailed"
},
{
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted"
},
{ {
"$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseCompleted" "$ref": "#/components/schemas/OpenAIResponseObjectStreamResponseCompleted"
} }
@ -7604,7 +7652,23 @@
"propertyName": "type", "propertyName": "type",
"mapping": { "mapping": {
"response.created": "#/components/schemas/OpenAIResponseObjectStreamResponseCreated", "response.created": "#/components/schemas/OpenAIResponseObjectStreamResponseCreated",
"response.output_item.added": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputItemAdded",
"response.output_item.done": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputItemDone",
"response.output_text.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDelta", "response.output_text.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDelta",
"response.output_text.done": "#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDone",
"response.function_call_arguments.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta",
"response.function_call_arguments.done": "#/components/schemas/OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone",
"response.web_search_call.in_progress": "#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallInProgress",
"response.web_search_call.searching": "#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallSearching",
"response.web_search_call.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallCompleted",
"response.mcp_list_tools.in_progress": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsInProgress",
"response.mcp_list_tools.failed": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsFailed",
"response.mcp_list_tools.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsCompleted",
"response.mcp_call.arguments.delta": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta",
"response.mcp_call.arguments.done": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallArgumentsDone",
"response.mcp_call.in_progress": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallInProgress",
"response.mcp_call.failed": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallFailed",
"response.mcp_call.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted",
"response.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseCompleted" "response.completed": "#/components/schemas/OpenAIResponseObjectStreamResponseCompleted"
} }
} }
@ -7647,6 +7711,314 @@
], ],
"title": "OpenAIResponseObjectStreamResponseCreated" "title": "OpenAIResponseObjectStreamResponseCreated"
}, },
"OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta": {
"type": "object",
"properties": {
"delta": {
"type": "string"
},
"item_id": {
"type": "string"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.function_call_arguments.delta",
"default": "response.function_call_arguments.delta"
}
},
"additionalProperties": false,
"required": [
"delta",
"item_id",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta"
},
"OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone": {
"type": "object",
"properties": {
"arguments": {
"type": "string"
},
"item_id": {
"type": "string"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.function_call_arguments.done",
"default": "response.function_call_arguments.done"
}
},
"additionalProperties": false,
"required": [
"arguments",
"item_id",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone"
},
"OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta": {
"type": "object",
"properties": {
"delta": {
"type": "string"
},
"item_id": {
"type": "string"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.mcp_call.arguments.delta",
"default": "response.mcp_call.arguments.delta"
}
},
"additionalProperties": false,
"required": [
"delta",
"item_id",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta"
},
"OpenAIResponseObjectStreamResponseMcpCallArgumentsDone": {
"type": "object",
"properties": {
"arguments": {
"type": "string"
},
"item_id": {
"type": "string"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.mcp_call.arguments.done",
"default": "response.mcp_call.arguments.done"
}
},
"additionalProperties": false,
"required": [
"arguments",
"item_id",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseMcpCallArgumentsDone"
},
"OpenAIResponseObjectStreamResponseMcpCallCompleted": {
"type": "object",
"properties": {
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.mcp_call.completed",
"default": "response.mcp_call.completed"
}
},
"additionalProperties": false,
"required": [
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseMcpCallCompleted"
},
"OpenAIResponseObjectStreamResponseMcpCallFailed": {
"type": "object",
"properties": {
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.mcp_call.failed",
"default": "response.mcp_call.failed"
}
},
"additionalProperties": false,
"required": [
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseMcpCallFailed"
},
"OpenAIResponseObjectStreamResponseMcpCallInProgress": {
"type": "object",
"properties": {
"item_id": {
"type": "string"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.mcp_call.in_progress",
"default": "response.mcp_call.in_progress"
}
},
"additionalProperties": false,
"required": [
"item_id",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseMcpCallInProgress"
},
"OpenAIResponseObjectStreamResponseMcpListToolsCompleted": {
"type": "object",
"properties": {
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.mcp_list_tools.completed",
"default": "response.mcp_list_tools.completed"
}
},
"additionalProperties": false,
"required": [
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseMcpListToolsCompleted"
},
"OpenAIResponseObjectStreamResponseMcpListToolsFailed": {
"type": "object",
"properties": {
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.mcp_list_tools.failed",
"default": "response.mcp_list_tools.failed"
}
},
"additionalProperties": false,
"required": [
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseMcpListToolsFailed"
},
"OpenAIResponseObjectStreamResponseMcpListToolsInProgress": {
"type": "object",
"properties": {
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.mcp_list_tools.in_progress",
"default": "response.mcp_list_tools.in_progress"
}
},
"additionalProperties": false,
"required": [
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseMcpListToolsInProgress"
},
"OpenAIResponseObjectStreamResponseOutputItemAdded": {
"type": "object",
"properties": {
"response_id": {
"type": "string"
},
"item": {
"$ref": "#/components/schemas/OpenAIResponseOutput"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.output_item.added",
"default": "response.output_item.added"
}
},
"additionalProperties": false,
"required": [
"response_id",
"item",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseOutputItemAdded"
},
"OpenAIResponseObjectStreamResponseOutputItemDone": {
"type": "object",
"properties": {
"response_id": {
"type": "string"
},
"item": {
"$ref": "#/components/schemas/OpenAIResponseOutput"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.output_item.done",
"default": "response.output_item.done"
}
},
"additionalProperties": false,
"required": [
"response_id",
"item",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseOutputItemDone"
},
"OpenAIResponseObjectStreamResponseOutputTextDelta": { "OpenAIResponseObjectStreamResponseOutputTextDelta": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -7682,6 +8054,122 @@
], ],
"title": "OpenAIResponseObjectStreamResponseOutputTextDelta" "title": "OpenAIResponseObjectStreamResponseOutputTextDelta"
}, },
"OpenAIResponseObjectStreamResponseOutputTextDone": {
"type": "object",
"properties": {
"content_index": {
"type": "integer"
},
"text": {
"type": "string"
},
"item_id": {
"type": "string"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.output_text.done",
"default": "response.output_text.done"
}
},
"additionalProperties": false,
"required": [
"content_index",
"text",
"item_id",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseOutputTextDone"
},
"OpenAIResponseObjectStreamResponseWebSearchCallCompleted": {
"type": "object",
"properties": {
"item_id": {
"type": "string"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.web_search_call.completed",
"default": "response.web_search_call.completed"
}
},
"additionalProperties": false,
"required": [
"item_id",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseWebSearchCallCompleted"
},
"OpenAIResponseObjectStreamResponseWebSearchCallInProgress": {
"type": "object",
"properties": {
"item_id": {
"type": "string"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.web_search_call.in_progress",
"default": "response.web_search_call.in_progress"
}
},
"additionalProperties": false,
"required": [
"item_id",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseWebSearchCallInProgress"
},
"OpenAIResponseObjectStreamResponseWebSearchCallSearching": {
"type": "object",
"properties": {
"item_id": {
"type": "string"
},
"output_index": {
"type": "integer"
},
"sequence_number": {
"type": "integer"
},
"type": {
"type": "string",
"const": "response.web_search_call.searching",
"default": "response.web_search_call.searching"
}
},
"additionalProperties": false,
"required": [
"item_id",
"output_index",
"sequence_number",
"type"
],
"title": "OpenAIResponseObjectStreamResponseWebSearchCallSearching"
},
"EmbeddingsRequest": { "EmbeddingsRequest": {
"type": "object", "type": "object",
"properties": { "properties": {

View file

@ -5355,13 +5355,45 @@ components:
OpenAIResponseObjectStream: OpenAIResponseObjectStream:
oneOf: oneOf:
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseCreated' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseCreated'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputItemAdded'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputItemDone'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDelta' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDelta'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDone'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallInProgress'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallSearching'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallCompleted'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsInProgress'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsFailed'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsCompleted'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallArgumentsDone'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallInProgress'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallFailed'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted'
- $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted' - $ref: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted'
discriminator: discriminator:
propertyName: type propertyName: type
mapping: mapping:
response.created: '#/components/schemas/OpenAIResponseObjectStreamResponseCreated' response.created: '#/components/schemas/OpenAIResponseObjectStreamResponseCreated'
response.output_item.added: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputItemAdded'
response.output_item.done: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputItemDone'
response.output_text.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDelta' response.output_text.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDelta'
response.output_text.done: '#/components/schemas/OpenAIResponseObjectStreamResponseOutputTextDone'
response.function_call_arguments.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta'
response.function_call_arguments.done: '#/components/schemas/OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone'
response.web_search_call.in_progress: '#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallInProgress'
response.web_search_call.searching: '#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallSearching'
response.web_search_call.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseWebSearchCallCompleted'
response.mcp_list_tools.in_progress: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsInProgress'
response.mcp_list_tools.failed: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsFailed'
response.mcp_list_tools.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpListToolsCompleted'
response.mcp_call.arguments.delta: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta'
response.mcp_call.arguments.done: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallArgumentsDone'
response.mcp_call.in_progress: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallInProgress'
response.mcp_call.failed: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallFailed'
response.mcp_call.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseMcpCallCompleted'
response.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted' response.completed: '#/components/schemas/OpenAIResponseObjectStreamResponseCompleted'
"OpenAIResponseObjectStreamResponseCompleted": "OpenAIResponseObjectStreamResponseCompleted":
type: object type: object
@ -5393,6 +5425,246 @@ components:
- type - type
title: >- title: >-
OpenAIResponseObjectStreamResponseCreated OpenAIResponseObjectStreamResponseCreated
"OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta":
type: object
properties:
delta:
type: string
item_id:
type: string
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.function_call_arguments.delta
default: response.function_call_arguments.delta
additionalProperties: false
required:
- delta
- item_id
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta
"OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone":
type: object
properties:
arguments:
type: string
item_id:
type: string
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.function_call_arguments.done
default: response.function_call_arguments.done
additionalProperties: false
required:
- arguments
- item_id
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone
"OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta":
type: object
properties:
delta:
type: string
item_id:
type: string
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.mcp_call.arguments.delta
default: response.mcp_call.arguments.delta
additionalProperties: false
required:
- delta
- item_id
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta
"OpenAIResponseObjectStreamResponseMcpCallArgumentsDone":
type: object
properties:
arguments:
type: string
item_id:
type: string
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.mcp_call.arguments.done
default: response.mcp_call.arguments.done
additionalProperties: false
required:
- arguments
- item_id
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseMcpCallArgumentsDone
"OpenAIResponseObjectStreamResponseMcpCallCompleted":
type: object
properties:
sequence_number:
type: integer
type:
type: string
const: response.mcp_call.completed
default: response.mcp_call.completed
additionalProperties: false
required:
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseMcpCallCompleted
"OpenAIResponseObjectStreamResponseMcpCallFailed":
type: object
properties:
sequence_number:
type: integer
type:
type: string
const: response.mcp_call.failed
default: response.mcp_call.failed
additionalProperties: false
required:
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseMcpCallFailed
"OpenAIResponseObjectStreamResponseMcpCallInProgress":
type: object
properties:
item_id:
type: string
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.mcp_call.in_progress
default: response.mcp_call.in_progress
additionalProperties: false
required:
- item_id
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseMcpCallInProgress
"OpenAIResponseObjectStreamResponseMcpListToolsCompleted":
type: object
properties:
sequence_number:
type: integer
type:
type: string
const: response.mcp_list_tools.completed
default: response.mcp_list_tools.completed
additionalProperties: false
required:
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseMcpListToolsCompleted
"OpenAIResponseObjectStreamResponseMcpListToolsFailed":
type: object
properties:
sequence_number:
type: integer
type:
type: string
const: response.mcp_list_tools.failed
default: response.mcp_list_tools.failed
additionalProperties: false
required:
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseMcpListToolsFailed
"OpenAIResponseObjectStreamResponseMcpListToolsInProgress":
type: object
properties:
sequence_number:
type: integer
type:
type: string
const: response.mcp_list_tools.in_progress
default: response.mcp_list_tools.in_progress
additionalProperties: false
required:
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseMcpListToolsInProgress
"OpenAIResponseObjectStreamResponseOutputItemAdded":
type: object
properties:
response_id:
type: string
item:
$ref: '#/components/schemas/OpenAIResponseOutput'
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.output_item.added
default: response.output_item.added
additionalProperties: false
required:
- response_id
- item
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseOutputItemAdded
"OpenAIResponseObjectStreamResponseOutputItemDone":
type: object
properties:
response_id:
type: string
item:
$ref: '#/components/schemas/OpenAIResponseOutput'
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.output_item.done
default: response.output_item.done
additionalProperties: false
required:
- response_id
- item
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseOutputItemDone
"OpenAIResponseObjectStreamResponseOutputTextDelta": "OpenAIResponseObjectStreamResponseOutputTextDelta":
type: object type: object
properties: properties:
@ -5420,6 +5692,96 @@ components:
- type - type
title: >- title: >-
OpenAIResponseObjectStreamResponseOutputTextDelta OpenAIResponseObjectStreamResponseOutputTextDelta
"OpenAIResponseObjectStreamResponseOutputTextDone":
type: object
properties:
content_index:
type: integer
text:
type: string
item_id:
type: string
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.output_text.done
default: response.output_text.done
additionalProperties: false
required:
- content_index
- text
- item_id
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseOutputTextDone
"OpenAIResponseObjectStreamResponseWebSearchCallCompleted":
type: object
properties:
item_id:
type: string
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.web_search_call.completed
default: response.web_search_call.completed
additionalProperties: false
required:
- item_id
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseWebSearchCallCompleted
"OpenAIResponseObjectStreamResponseWebSearchCallInProgress":
type: object
properties:
item_id:
type: string
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.web_search_call.in_progress
default: response.web_search_call.in_progress
additionalProperties: false
required:
- item_id
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseWebSearchCallInProgress
"OpenAIResponseObjectStreamResponseWebSearchCallSearching":
type: object
properties:
item_id:
type: string
output_index:
type: integer
sequence_number:
type: integer
type:
type: string
const: response.web_search_call.searching
default: response.web_search_call.searching
additionalProperties: false
required:
- item_id
- output_index
- sequence_number
- type
title: >-
OpenAIResponseObjectStreamResponseWebSearchCallSearching
EmbeddingsRequest: EmbeddingsRequest:
type: object type: object
properties: properties:

View file

@ -179,6 +179,30 @@ class OpenAIResponseObjectStreamResponseCreated(BaseModel):
type: Literal["response.created"] = "response.created" type: Literal["response.created"] = "response.created"
@json_schema_type
class OpenAIResponseObjectStreamResponseCompleted(BaseModel):
response: OpenAIResponseObject
type: Literal["response.completed"] = "response.completed"
@json_schema_type
class OpenAIResponseObjectStreamResponseOutputItemAdded(BaseModel):
response_id: str
item: OpenAIResponseOutput
output_index: int
sequence_number: int
type: Literal["response.output_item.added"] = "response.output_item.added"
@json_schema_type
class OpenAIResponseObjectStreamResponseOutputItemDone(BaseModel):
response_id: str
item: OpenAIResponseOutput
output_index: int
sequence_number: int
type: Literal["response.output_item.done"] = "response.output_item.done"
@json_schema_type @json_schema_type
class OpenAIResponseObjectStreamResponseOutputTextDelta(BaseModel): class OpenAIResponseObjectStreamResponseOutputTextDelta(BaseModel):
content_index: int content_index: int
@ -190,14 +214,132 @@ class OpenAIResponseObjectStreamResponseOutputTextDelta(BaseModel):
@json_schema_type @json_schema_type
class OpenAIResponseObjectStreamResponseCompleted(BaseModel): class OpenAIResponseObjectStreamResponseOutputTextDone(BaseModel):
response: OpenAIResponseObject content_index: int
type: Literal["response.completed"] = "response.completed" text: str # final text of the output item
item_id: str
output_index: int
sequence_number: int
type: Literal["response.output_text.done"] = "response.output_text.done"
@json_schema_type
class OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta(BaseModel):
delta: str
item_id: str
output_index: int
sequence_number: int
type: Literal["response.function_call_arguments.delta"] = "response.function_call_arguments.delta"
@json_schema_type
class OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone(BaseModel):
arguments: str # final arguments of the function call
item_id: str
output_index: int
sequence_number: int
type: Literal["response.function_call_arguments.done"] = "response.function_call_arguments.done"
@json_schema_type
class OpenAIResponseObjectStreamResponseWebSearchCallInProgress(BaseModel):
item_id: str
output_index: int
sequence_number: int
type: Literal["response.web_search_call.in_progress"] = "response.web_search_call.in_progress"
@json_schema_type
class OpenAIResponseObjectStreamResponseWebSearchCallSearching(BaseModel):
item_id: str
output_index: int
sequence_number: int
type: Literal["response.web_search_call.searching"] = "response.web_search_call.searching"
@json_schema_type
class OpenAIResponseObjectStreamResponseWebSearchCallCompleted(BaseModel):
item_id: str
output_index: int
sequence_number: int
type: Literal["response.web_search_call.completed"] = "response.web_search_call.completed"
@json_schema_type
class OpenAIResponseObjectStreamResponseMcpListToolsInProgress(BaseModel):
sequence_number: int
type: Literal["response.mcp_list_tools.in_progress"] = "response.mcp_list_tools.in_progress"
@json_schema_type
class OpenAIResponseObjectStreamResponseMcpListToolsFailed(BaseModel):
sequence_number: int
type: Literal["response.mcp_list_tools.failed"] = "response.mcp_list_tools.failed"
@json_schema_type
class OpenAIResponseObjectStreamResponseMcpListToolsCompleted(BaseModel):
sequence_number: int
type: Literal["response.mcp_list_tools.completed"] = "response.mcp_list_tools.completed"
@json_schema_type
class OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta(BaseModel):
delta: str
item_id: str
output_index: int
sequence_number: int
type: Literal["response.mcp_call.arguments.delta"] = "response.mcp_call.arguments.delta"
@json_schema_type
class OpenAIResponseObjectStreamResponseMcpCallArgumentsDone(BaseModel):
arguments: str # final arguments of the MCP call
item_id: str
output_index: int
sequence_number: int
type: Literal["response.mcp_call.arguments.done"] = "response.mcp_call.arguments.done"
@json_schema_type
class OpenAIResponseObjectStreamResponseMcpCallInProgress(BaseModel):
item_id: str
output_index: int
sequence_number: int
type: Literal["response.mcp_call.in_progress"] = "response.mcp_call.in_progress"
@json_schema_type
class OpenAIResponseObjectStreamResponseMcpCallFailed(BaseModel):
sequence_number: int
type: Literal["response.mcp_call.failed"] = "response.mcp_call.failed"
@json_schema_type
class OpenAIResponseObjectStreamResponseMcpCallCompleted(BaseModel):
sequence_number: int
type: Literal["response.mcp_call.completed"] = "response.mcp_call.completed"
OpenAIResponseObjectStream = Annotated[ OpenAIResponseObjectStream = Annotated[
OpenAIResponseObjectStreamResponseCreated OpenAIResponseObjectStreamResponseCreated
| OpenAIResponseObjectStreamResponseOutputItemAdded
| OpenAIResponseObjectStreamResponseOutputItemDone
| OpenAIResponseObjectStreamResponseOutputTextDelta | OpenAIResponseObjectStreamResponseOutputTextDelta
| OpenAIResponseObjectStreamResponseOutputTextDone
| OpenAIResponseObjectStreamResponseFunctionCallArgumentsDelta
| OpenAIResponseObjectStreamResponseFunctionCallArgumentsDone
| OpenAIResponseObjectStreamResponseWebSearchCallInProgress
| OpenAIResponseObjectStreamResponseWebSearchCallSearching
| OpenAIResponseObjectStreamResponseWebSearchCallCompleted
| OpenAIResponseObjectStreamResponseMcpListToolsInProgress
| OpenAIResponseObjectStreamResponseMcpListToolsFailed
| OpenAIResponseObjectStreamResponseMcpListToolsCompleted
| OpenAIResponseObjectStreamResponseMcpCallArgumentsDelta
| OpenAIResponseObjectStreamResponseMcpCallArgumentsDone
| OpenAIResponseObjectStreamResponseMcpCallInProgress
| OpenAIResponseObjectStreamResponseMcpCallFailed
| OpenAIResponseObjectStreamResponseMcpCallCompleted
| OpenAIResponseObjectStreamResponseCompleted, | OpenAIResponseObjectStreamResponseCompleted,
Field(discriminator="type"), Field(discriminator="type"),
] ]

View file

@ -433,12 +433,10 @@ class OpenAIResponsesImpl:
store: bool | None, store: bool | None,
text: OpenAIResponseText, text: OpenAIResponseText,
tools: list[OpenAIResponseInputTool] | None, tools: list[OpenAIResponseInputTool] | None,
max_infer_iters: int | None, max_infer_iters: int,
) -> OpenAIResponseObject: ) -> OpenAIResponseObject:
# Implement tool execution loop - handle ALL inference rounds including the first
n_iter = 0 n_iter = 0
messages = ctx.messages.copy() messages = ctx.messages.copy()
current_response = None
while True: while True:
# Do inference (including the first one) # Do inference (including the first one)
@ -450,13 +448,13 @@ class OpenAIResponsesImpl:
temperature=ctx.temperature, temperature=ctx.temperature,
response_format=ctx.response_format, response_format=ctx.response_format,
) )
current_response = OpenAIChatCompletion(**inference_result.model_dump()) completion = OpenAIChatCompletion(**inference_result.model_dump())
# Separate function vs non-function tool calls # Separate function vs non-function tool calls
function_tool_calls = [] function_tool_calls = []
non_function_tool_calls = [] non_function_tool_calls = []
for choice in current_response.choices: for choice in completion.choices:
if choice.message.tool_calls and tools: if choice.message.tool_calls and tools:
for tool_call in choice.message.tool_calls: for tool_call in choice.message.tool_calls:
if self._is_function_tool_call(tool_call, tools): if self._is_function_tool_call(tool_call, tools):
@ -468,7 +466,7 @@ class OpenAIResponsesImpl:
if function_tool_calls: if function_tool_calls:
# For function tool calls, use existing logic and return immediately # For function tool calls, use existing logic and return immediately
current_output_messages = await self._process_response_choices( current_output_messages = await self._process_response_choices(
chat_response=current_response, chat_response=completion,
ctx=ctx, ctx=ctx,
tools=tools, tools=tools,
) )
@ -476,7 +474,7 @@ class OpenAIResponsesImpl:
break break
elif non_function_tool_calls: elif non_function_tool_calls:
# For non-function tool calls, execute them and continue loop # For non-function tool calls, execute them and continue loop
for choice in current_response.choices: for choice in completion.choices:
tool_outputs, tool_response_messages = await self._execute_tool_calls_only(choice, ctx) tool_outputs, tool_response_messages = await self._execute_tool_calls_only(choice, ctx)
output_messages.extend(tool_outputs) output_messages.extend(tool_outputs)
@ -485,19 +483,19 @@ class OpenAIResponsesImpl:
messages.extend(tool_response_messages) messages.extend(tool_response_messages)
n_iter += 1 n_iter += 1
if n_iter >= (max_infer_iters or 10): if n_iter >= max_infer_iters:
break break
# Continue with next iteration of the loop # Continue with next iteration of the loop
continue continue
else: else:
# No tool calls - convert response to message and we're done # No tool calls - convert response to message and we're done
for choice in current_response.choices: for choice in completion.choices:
output_messages.append(await _convert_chat_choice_to_response_message(choice)) output_messages.append(await _convert_chat_choice_to_response_message(choice))
break break
response = OpenAIResponseObject( response = OpenAIResponseObject(
created_at=current_response.created, created_at=completion.created,
id=f"resp-{uuid.uuid4()}", id=f"resp-{uuid.uuid4()}",
model=model, model=model,
object="response", object="response",
@ -549,7 +547,6 @@ class OpenAIResponsesImpl:
messages = ctx.messages.copy() messages = ctx.messages.copy()
while True: while True:
# Do inference (including the first one) - streaming
current_inference_result = await self.inference_api.openai_chat_completion( current_inference_result = await self.inference_api.openai_chat_completion(
model=ctx.model, model=ctx.model,
messages=messages, messages=messages,