Skip to content

Releases: openai/openai-agents-python

v0.17.4

26 May 08:54
6d5b888

Choose a tag to compare

What's Changed

  • feat: support Realtime custom voice objects by @lionel-oai in #3473
  • fix: #3459 add opt-in recovery for missing function tools by @seratch in #3461
  • fix: apply hardened http client default to MCP SSE transport by @ioleksiuk in #3466
  • fix: use non-None value for output in FunctionSpanData by @rmotgi1227 in #3475
  • fix: add missing entries to span slots by @rmotgi1227 in #3483
  • fix: redact invalid JSON payload in ModelBehaviorError data by @LeSingh1 in #3485
  • fix: export more tracing related functions & types from agents by @rmotgi1227 in #3489
  • fix: export MCPListToolsItem, ToolSearchCallItem, and ToolSearchOutputItem from agents by @rmotgi1227 in #3490

Documentation & Other Changes

  • Release 0.17.4 by @github-actions[bot] in #3505

New Contributors

Full Changelog: v0.17.3...v0.17.4

v0.17.3

19 May 01:27
17f7cae

Choose a tag to compare

What's Changed

  • fix: keep mountpoint credentials out of sandbox commands by @seratch in #3429
  • fix: unify memory optional dependency import errors by @seratch in #3389
  • fix: guard None text in text_message_output and add output guardrail count to RunErrorDetails by @zhoufengen in #3375
  • fix: avoid mutating FunctionTool params_json_schema by @ioleksiuk in #3382
  • fix: avoid mutating codex output schema input by @ioleksiuk in #3385
  • fix: #3357 output schema names for Literal types by @Aphroq in #3358
  • fix: skip wait_for_status when Vercel sandbox is in a terminal state by @cty-ut in #3410
  • fix: filter hosted_tool_call types in remove_all_tools handoff filter by @ioleksiuk in #3386
  • fix: guard None text in ItemHelpers.extract_last_content by @ioleksiuk in #3394
  • fix: log exception when output guardrail raises instead of silently ignoring by @cty-ut in #3411
  • fix: reject relative sandbox workspace roots by @matthewflint in #3422
  • fix: normalize leading question marks in exposed port queries by @matthewflint in #3424
  • fix: #3363 honor short custom voice splitter chunks by @Aphroq in #3364
  • fix: runtime handling updates by @adrianbravo-oai @ioleksiuk in #3451

Documentation & Other Changes

New Contributors

Full Changelog: v0.17.2...v0.17.3

v0.17.2

12 May 03:14
55e4a85

Choose a tag to compare

What's Changed

Documentation & Other Changes

  • docs: clarify max_delay for retries works by @seratch in #3350
  • docs: update translated document pages by @github-actions[bot] in #3351
  • docs: normalize memory docstring cross-references by @seratch in #3370
  • docs: document sandbox archive limits after #3278 release by @Aphroq in #3311
  • docs: update translated document pages by @github-actions[bot] in #3371
  • Release 0.17.2 by @github-actions[bot] in #3368

Full Changelog: v0.17.1...v0.17.2

v0.17.1

11 May 06:56
eada610

Choose a tag to compare

What's Changed

Sandboxes

Tracing

Sessions

Realtime Agents

Other core modules

Extensions

  • fix: avoid duplicating content and signed thinking blocks across parallel tool-call splits (any-llm) by @adityasingh2400 in #3261
  • fix: avoid duplicating content and signed thinking blocks across parallel tool-call splits (litellm) by @adityasingh2400 in #3215
  • fix: #3330 handle string tool trimmer allowlists by @Aphroq in #3331
  • fix: preserve HandoffInputData.input_items in remove_all_tools by @adityasingh2400 in #3253

Documentation & Other Changes

  • docs: updates for v0.17.0 by @seratch in #3188
  • docs: update translated document pages by @github-actions[bot] in #3193
  • docs: add dapr to durable orchestration integrations by @yaron2 in #3292
  • docs: update translated document pages by @github-actions[bot] in #3293
  • docs: update MCP examples by @seratch in #3342
  • test: guard Responses transport extra kwargs with official client by @seratch in #3295
  • chore: improve examples auto-run coverage and artifact handling by @seratch in #3328
  • chore: improve automated example coverage and local service handling by @seratch in #3297
  • Release 0.17.1 by @github-actions[bot] in #3290

New Contributors

Full Changelog: v0.17.0...v0.17.1

v0.17.0

08 May 08:09
0fea7e8

Choose a tag to compare

Key Changes

RealtimeAgent's default is now gpt-realtime-2

Since this version, the default model for RealtimeAgents is gpt-realtime-2: https://developers.openai.com/api/docs/models/gpt-realtime-2

Sandbox local source materialization change

In this version, sandbox local source materialization keeps LocalFile.src and LocalDir.src within the materialization base_dir unless the source path is covered by Manifest.extra_path_grants. The base_dir is the SDK process current working directory when the manifest is applied; relative local sources are resolved from that directory, while absolute local sources must already be inside it or under an explicit grant. This closes a local artifact boundary issue, but it can affect applications that intentionally copy trusted host files or directories from outside that base directory into a sandbox workspace.Expand commentComment on line R24Resolved

To migrate, grant trusted host roots at the manifest level with SandboxPathGrant, preferably as read-only when the sandbox only needs to read those files:

from pathlib import Path

from agents.sandbox import Manifest, SandboxPathGrant
from agents.sandbox.entries import Dir, LocalDir

# This is an absolute host path outside the SDK process base_dir.
TRUSTED_DOCS_ROOT = Path("/opt/my-app/docs")

manifest = Manifest(
    extra_path_grants=(
        # This host root is outside the SDK process base_dir, so the manifest must grant it.
        SandboxPathGrant(path=str(TRUSTED_DOCS_ROOT), read_only=True),
    ),
    entries={
        # No grant is needed for local sources that stay under the SDK process base_dir.
        "fixtures": LocalDir(src=Path("fixtures"), description="Local test fixtures."),
        # This entry reads from the granted host root and copies it into the sandbox workspace.
        "docs": LocalDir(src=TRUSTED_DOCS_ROOT, description="Trusted local documents."),
        # Dir creates a sandbox workspace directory; it does not read from the host filesystem.
        "output": Dir(description="Generated artifacts."),
    },
)

Treat extra_path_grants as trusted application configuration. Do not populate grants from model output or other untrusted manifest input unless your application has already approved those host paths.

What's Changed

  • feat: default realtime sessions to gpt-realtime-2 by @seratch in #3190
  • fix: #3169 constrain local sandbox artifact sources to base dir by @seratch in #3177
  • fix: Responses context-management extra_args collision by @alfozan in #3185

Documentation & Other Changes

  • Release 0.17.0 by @github-actions[bot] in #3191

Full Changelog: v0.16.1...v0.17.0

v0.16.1

07 May 11:01
bd84b65

Choose a tag to compare

What's Changed

Documentation & Other Changes

  • docs: updates for #3147 by @seratch in #3148
  • docs: add 0.16.0 changelog by @seratch in #3153
  • docs: update translated document pages by @github-actions[bot] in #3163
  • docs: document tool execution concurrency by @seratch in #3164
  • docs: update translated document pages by @github-actions[bot] in #3165
  • Release 0.16.1 by @github-actions[bot] in #3167

Full Changelog: v0.16.0...v0.16.1

v0.16.0

07 May 00:27
9f361ba

Choose a tag to compare

Key Changes

Default model change

In this version, the SDK default model is now gpt-5.4-mini instead of gpt-4.1. This could affect agents and runs that do not explicitly set a model. Because the new default is a GPT-5 model, implicit default model settings now include GPT-5 defaults such as reasoning.effort="none" and verbosity="low".

The new default model should work better for most use cases (see the report at #3147), but if you need to keep the previous default model behavior for some reasons, set a model explicitly on the agent or run config like Agent(name="Assistant", model="gpt-4.1"), or set the OPENAI_DEFAULT_MODEL environment variable.

Disable max_turns detection

This version adds a new option max_turns=None to disable the Agents SDK run turn limit while preserving the existing default of DEFAULT_MAX_TURNS (10) when max_turns is omitted.

Tool execution concurrency

This version adds a new SDK-side runtime configuration for local function tool execution concurrency: ToolExecutionConfig(max_function_tool_concurrency=...) on RunConfig, preserves default behavior when unset. The change keeps provider-side ModelSettings.parallel_tool_calls separate from SDK-side local execution scheduling.

Server-prefixed MCP tool naming

This version adds a new option include_server_in_tool_names to MCPConfig. When it is set to True, the SDK includes the MCP server name in the tool name to prevent tool name conflicts with other MCP servers.

agent = Agent(
    name="Assistant",
    mcp_servers=[my_mcp_server],
    mcp_config={"include_server_in_tool_names": True},
)

What's Changed

Documentation & Other Changes

  • docs: update translated document pages by @github-actions[bot] in #3151
  • docs: update translated document pages by @github-actions[bot] in #3160
  • docs: realtime guardrail fallback behavior by @mindbomber in #3157
  • docs: update translated document pages by @github-actions[bot] in #3162
  • Release 0.16.0 by @github-actions[bot] in #3150

New Contributors

Full Changelog: v0.15.3...v0.16.0

v0.15.3

06 May 12:12
e1cb2be

Choose a tag to compare

What's Changed

Documentation & Other Changes

Full Changelog: v0.15.2...v0.15.3

v0.15.2

06 May 00:36
75da8e0

Choose a tag to compare

What's Changed

  • feat: add context management model setting by @seratch in #3128
  • fix: #3123 avoid replaying assistant conversation item IDs for OpenAIConversationsSession by @seratch in #3127
  • fix: redact function tool trace span errors by @Aphroq in #3111
  • fix: redact MCP invalid JSON errors when tool logging is disabled by @Aphroq in #3088
  • fix: reject failed responses stream terminals by @Aphroq in #3107
  • fix: only rewind matching session suffixes by @Aphroq in #3090
  • fix: reject string-like shell commands by @Aphroq in #3092
  • fix: filter custom_tool_call types in remove_all_tools handoff filter by @Quratulain-bilal in #3095
  • fix: make ToolContext hashable to match RunContextWrapper by @ioleksiuk in #3097
  • fix: block disabled function tools before execution by @Aphroq in #3118
  • fix: isolate merged MCP tool metadata by @felmonon in #3114

Documentation & Other Changes

New Contributors

Full Changelog: v0.15.1...v0.15.2

v0.15.1

02 May 02:20
ceb238f

Choose a tag to compare

What's Changed

  • feat: expose Responses WebSocket keepalive options by @seratch in #3080
  • fix: restore UnixLocal PTY terminal signal defaults by @seratch in #3082
  • fix: #3074 restore SIGINT defaults for UnixLocal PTY children by @Aphroq in #3075

Documentation & Other Changes

  • docs: add 0.15 changelog by @seratch in #3058
  • docs: update translated document pages by @github-actions[bot] in #3064
  • docs: improve quickstart documentation for Windows OS users by @seratch in #3071
  • docs: update translated document pages by @github-actions[bot] in #3072
  • test: cover guardrail name fallback to function name by @Quratulain-bilal in #3073
  • chore: harden Dapr Redis integration fixture loading by @Aphroq in #3078
  • Release 0.15.1 by @github-actions[bot] in #3083

New Contributors

Full Changelog: v0.15.0...v0.15.1