Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "2.44.0"
".": "2.45.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 264
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai/openai-b5b621065906a2579dc180db1236ee3b08a4fca9539accc2fbbf88da0ca3923f.yml
openapi_spec_hash: 45b1b4692b26e714008d8120ccfc7433
config_hash: ef3ce17315a31703e7af0567b3e9738c
configured_endpoints: 271
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai/openai-356010b9b9fd6228b457b8fcfa376cf4928a8f3bd4728e7ba5e4b6b5ef4f5843.yml
openapi_spec_hash: 885864ae98a443166f585f856c464fb2
config_hash: 1f1e3b4050e2cb4bc780ce0b70e2b3e6
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Changelog

## 2.45.0 (2026-07-09)

Full Changelog: [v2.44.0...v2.45.0](https://github.com/openai/openai-python/compare/v2.44.0...v2.45.0)

### Features

* **api:** gpt-5.6-sol updates ([039d1fe](https://github.com/openai/openai-python/commit/039d1feb264a2dca7195ba5028e9fb47a5e04987))


### Bug Fixes

* **api:** restore beta resource accessors ([2dfc130](https://github.com/openai/openai-python/commit/2dfc130b8f0fdb0049e075aac21aaef29482b4e3))


### Chores

* retrigger release automation ([7b61351](https://github.com/openai/openai-python/commit/7b61351b014bb6ca4623ff6cce7f32f45038a92e))

## 2.44.0 (2026-06-24)

Full Changelog: [v2.43.0...v2.44.0](https://github.com/openai/openai-python/compare/v2.43.0...v2.44.0)
Expand Down
191 changes: 191 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,197 @@ Methods:

# Beta

## Responses

Types:

```python
from openai.types.beta import (
BetaApplyPatchTool,
BetaCompactedResponse,
BetaComputerAction,
BetaComputerActionList,
BetaComputerTool,
BetaComputerUsePreviewTool,
BetaContainerAuto,
BetaContainerNetworkPolicyAllowlist,
BetaContainerNetworkPolicyDisabled,
BetaContainerNetworkPolicyDomainSecret,
BetaContainerReference,
BetaCustomTool,
BetaEasyInputMessage,
BetaFileSearchTool,
BetaFunctionShellTool,
BetaFunctionTool,
BetaInlineSkill,
BetaInlineSkillSource,
BetaLocalEnvironment,
BetaLocalSkill,
BetaNamespaceTool,
BetaResponse,
BetaResponseApplyPatchToolCall,
BetaResponseApplyPatchToolCallOutput,
BetaResponseAudioDeltaEvent,
BetaResponseAudioDoneEvent,
BetaResponseAudioTranscriptDeltaEvent,
BetaResponseAudioTranscriptDoneEvent,
BetaResponseCodeInterpreterCallCodeDeltaEvent,
BetaResponseCodeInterpreterCallCodeDoneEvent,
BetaResponseCodeInterpreterCallCompletedEvent,
BetaResponseCodeInterpreterCallInProgressEvent,
BetaResponseCodeInterpreterCallInterpretingEvent,
BetaResponseCodeInterpreterToolCall,
BetaResponseCompactionItem,
BetaResponseCompactionItemParam,
BetaResponseCompletedEvent,
BetaResponseComputerToolCall,
BetaResponseComputerToolCallOutputItem,
BetaResponseComputerToolCallOutputScreenshot,
BetaResponseContainerReference,
BetaResponseContent,
BetaResponseContentPartAddedEvent,
BetaResponseContentPartDoneEvent,
BetaResponseConversationParam,
BetaResponseCreatedEvent,
BetaResponseCustomToolCall,
BetaResponseCustomToolCallInputDeltaEvent,
BetaResponseCustomToolCallInputDoneEvent,
BetaResponseCustomToolCallItem,
BetaResponseCustomToolCallOutput,
BetaResponseCustomToolCallOutputItem,
BetaResponseError,
BetaResponseErrorEvent,
BetaResponseFailedEvent,
BetaResponseFileSearchCallCompletedEvent,
BetaResponseFileSearchCallInProgressEvent,
BetaResponseFileSearchCallSearchingEvent,
BetaResponseFileSearchToolCall,
BetaResponseFormatTextConfig,
BetaResponseFormatTextJSONSchemaConfig,
BetaResponseFunctionCallArgumentsDeltaEvent,
BetaResponseFunctionCallArgumentsDoneEvent,
BetaResponseFunctionCallOutputItem,
BetaResponseFunctionCallOutputItemList,
BetaResponseFunctionShellCallOutputContent,
BetaResponseFunctionShellToolCall,
BetaResponseFunctionShellToolCallOutput,
BetaResponseFunctionToolCall,
BetaResponseFunctionToolCallItem,
BetaResponseFunctionToolCallOutputItem,
BetaResponseFunctionWebSearch,
BetaResponseImageGenCallCompletedEvent,
BetaResponseImageGenCallGeneratingEvent,
BetaResponseImageGenCallInProgressEvent,
BetaResponseImageGenCallPartialImageEvent,
BetaResponseInProgressEvent,
BetaResponseIncludable,
BetaResponseIncompleteEvent,
BetaResponseInjectCreatedEvent,
BetaResponseInjectEvent,
BetaResponseInjectFailedEvent,
BetaResponseInput,
BetaResponseInputAudio,
BetaResponseInputContent,
BetaResponseInputFile,
BetaResponseInputFileContent,
BetaResponseInputImage,
BetaResponseInputImageContent,
BetaResponseInputItem,
BetaResponseInputMessageContentList,
BetaResponseInputMessageItem,
BetaResponseInputText,
BetaResponseInputTextContent,
BetaResponseItem,
BetaResponseLocalEnvironment,
BetaResponseMcpCallArgumentsDeltaEvent,
BetaResponseMcpCallArgumentsDoneEvent,
BetaResponseMcpCallCompletedEvent,
BetaResponseMcpCallFailedEvent,
BetaResponseMcpCallInProgressEvent,
BetaResponseMcpListToolsCompletedEvent,
BetaResponseMcpListToolsFailedEvent,
BetaResponseMcpListToolsInProgressEvent,
BetaResponseOutputAudio,
BetaResponseOutputItem,
BetaResponseOutputItemAddedEvent,
BetaResponseOutputItemDoneEvent,
BetaResponseOutputMessage,
BetaResponseOutputRefusal,
BetaResponseOutputText,
BetaResponseOutputTextAnnotationAddedEvent,
BetaResponsePrompt,
BetaResponseQueuedEvent,
BetaResponseReasoningItem,
BetaResponseReasoningSummaryPartAddedEvent,
BetaResponseReasoningSummaryPartDoneEvent,
BetaResponseReasoningSummaryTextDeltaEvent,
BetaResponseReasoningSummaryTextDoneEvent,
BetaResponseReasoningTextDeltaEvent,
BetaResponseReasoningTextDoneEvent,
BetaResponseRefusalDeltaEvent,
BetaResponseRefusalDoneEvent,
BetaResponseStatus,
BetaResponseStreamEvent,
BetaResponseTextConfig,
BetaResponseTextDeltaEvent,
BetaResponseTextDoneEvent,
BetaResponseToolSearchCall,
BetaResponseToolSearchOutputItem,
BetaResponseToolSearchOutputItemParam,
BetaResponseUsage,
BetaResponseWebSearchCallCompletedEvent,
BetaResponseWebSearchCallInProgressEvent,
BetaResponseWebSearchCallSearchingEvent,
BetaResponsesClientEvent,
BetaResponsesServerEvent,
BetaSkillReference,
BetaTool,
BetaToolChoiceAllowed,
BetaToolChoiceApplyPatch,
BetaToolChoiceCustom,
BetaToolChoiceFunction,
BetaToolChoiceMcp,
BetaToolChoiceOptions,
BetaToolChoiceShell,
BetaToolChoiceTypes,
BetaToolSearchTool,
BetaWebSearchPreviewTool,
BetaWebSearchTool,
)
```

Methods:

- <code title="post /responses?beta=true">client.beta.responses.<a href="./src/openai/resources/beta/responses/responses.py">create</a>(\*\*<a href="src/openai/types/beta/response_create_params.py">params</a>) -> <a href="./src/openai/types/beta/beta_response.py">BetaResponse</a></code>
- <code title="get /responses/{response_id}?beta=true">client.beta.responses.<a href="./src/openai/resources/beta/responses/responses.py">retrieve</a>(response_id, \*\*<a href="src/openai/types/beta/response_retrieve_params.py">params</a>) -> <a href="./src/openai/types/beta/beta_response.py">BetaResponse</a></code>
- <code title="delete /responses/{response_id}?beta=true">client.beta.responses.<a href="./src/openai/resources/beta/responses/responses.py">delete</a>(response_id) -> None</code>
- <code title="post /responses/{response_id}/cancel?beta=true">client.beta.responses.<a href="./src/openai/resources/beta/responses/responses.py">cancel</a>(response_id) -> <a href="./src/openai/types/beta/beta_response.py">BetaResponse</a></code>
- <code title="post /responses/compact?beta=true">client.beta.responses.<a href="./src/openai/resources/beta/responses/responses.py">compact</a>(\*\*<a href="src/openai/types/beta/response_compact_params.py">params</a>) -> <a href="./src/openai/types/beta/beta_compacted_response.py">BetaCompactedResponse</a></code>

### InputItems

Types:

```python
from openai.types.beta.responses import BetaResponseItemList
```

Methods:

- <code title="get /responses/{response_id}/input_items?beta=true">client.beta.responses.input_items.<a href="./src/openai/resources/beta/responses/input_items.py">list</a>(response_id, \*\*<a href="src/openai/types/beta/responses/input_item_list_params.py">params</a>) -> <a href="./src/openai/types/beta/beta_response_item.py">SyncCursorPage[BetaResponseItem]</a></code>

### InputTokens

Types:

```python
from openai.types.beta.responses import InputTokenCountResponse
```

Methods:

- <code title="post /responses/input_tokens?beta=true">client.beta.responses.input_tokens.<a href="./src/openai/resources/beta/responses/input_tokens.py">count</a>(\*\*<a href="src/openai/types/beta/responses/input_token_count_params.py">params</a>) -> <a href="./src/openai/types/beta/responses/input_token_count_response.py">InputTokenCountResponse</a></code>

## Realtime

Types:
Expand Down
40 changes: 40 additions & 0 deletions examples/responses/multi_agent_streaming.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from __future__ import annotations

from openai import OpenAI
from openai.types.beta import BetaResponseOutputItem

PROMPT = """Compare these fictional proposals on speed, cost, reliability, and security.
Proposal Alpha: 2-week launch, $40k, managed vendor, 99.9% SLA, data leaves the VPC.
Proposal Beta: 6-week launch, $70k, self-hosted, 99.5% target, data stays in the VPC.
Delegate each proposal to a separate agent, then compare their evidence and recommend one."""


def agent_name(item: BetaResponseOutputItem) -> str:
return item.agent.agent_name if item.agent else "/root"


client = OpenAI()

stream = client.beta.responses.create(
model="gpt-5.6-sol",
input=PROMPT,
multi_agent={"enabled": True},
stream=True,
betas=["responses_multi_agent=v1"],
)

item_agents: dict[int, str] = {}
labeled_items: set[int] = set()
for event in stream:
if event.type == "response.output_item.added":
item_agents[event.output_index] = agent_name(event.item)
elif event.type == "response.output_text.delta":
name = item_agents.get(event.output_index, "/root")
if event.output_index not in labeled_items:
separator = "\n\n" if labeled_items else ""
role = "Coordinator" if name == "/root" else "Agent"
print(f"{separator}━━━ {role}: {name} ━━━\n")
labeled_items.add(event.output_index)
print(event.delta, end="", flush=True)

print()
46 changes: 46 additions & 0 deletions examples/responses/multi_agent_websocket.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from __future__ import annotations

from openai import OpenAI
from openai.types.beta import BetaResponseOutputItem

PROMPT = """Compare these fictional proposals on speed, cost, reliability, and security.
Proposal Alpha: 2-week launch, $40k, managed vendor, 99.9% SLA, data leaves the VPC.
Proposal Beta: 6-week launch, $70k, self-hosted, 99.5% target, data stays in the VPC.
Delegate each proposal to a separate agent, then compare their evidence and recommend one."""


def agent_name(item: BetaResponseOutputItem) -> str:
return item.agent.agent_name if item.agent else "/root"


client = OpenAI()

with client.beta.responses.connect(
extra_headers={"OpenAI-Beta": "responses_multi_agent=v1"},
) as connection:
connection.send(
{
"type": "response.create",
"model": "gpt-5.6-sol",
"input": PROMPT,
"multi_agent": {"enabled": True},
}
)

item_agents: dict[int, str] = {}
labeled_items: set[int] = set()
for event in connection:
if event.type == "response.output_item.added":
item_agents[event.output_index] = agent_name(event.item)
elif event.type == "response.output_text.delta":
name = item_agents.get(event.output_index, "/root")
if event.output_index not in labeled_items:
separator = "\n\n" if labeled_items else ""
role = "Coordinator" if name == "/root" else "Agent"
print(f"{separator}━━━ {role}: {name} ━━━\n")
labeled_items.add(event.output_index)
print(event.delta, end="", flush=True)
if event.type == "response.completed":
break

print()
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "openai"
version = "2.44.0"
version = "2.45.0"
description = "The official Python library for the openai API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion src/openai/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "openai"
__version__ = "2.44.0" # x-release-please-version
__version__ = "2.45.0" # x-release-please-version
2 changes: 2 additions & 0 deletions src/openai/lib/_parsing/_responses.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ def parse_response(
or output.type == "tool_search_output"
or output.type == "additional_tools"
or output.type == "reasoning"
or output.type == "program"
or output.type == "program_output"
or output.type == "compaction"
or output.type == "mcp_call"
or output.type == "mcp_approval_request"
Expand Down
14 changes: 14 additions & 0 deletions src/openai/resources/beta/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@
ThreadsWithStreamingResponse,
AsyncThreadsWithStreamingResponse,
)
from .responses import (
Responses,
AsyncResponses,
ResponsesWithRawResponse,
AsyncResponsesWithRawResponse,
ResponsesWithStreamingResponse,
AsyncResponsesWithStreamingResponse,
)
from .assistants import (
Assistants,
AsyncAssistants,
Expand All @@ -34,6 +42,12 @@
)

__all__ = [
"Responses",
"AsyncResponses",
"ResponsesWithRawResponse",
"AsyncResponsesWithRawResponse",
"ResponsesWithStreamingResponse",
"AsyncResponsesWithStreamingResponse",
"ChatKit",
"AsyncChatKit",
"ChatKitWithRawResponse",
Expand Down
Loading
Loading