GPT-6 models get no default reasoning settings leading to 400 on /v1/chat/completions with function tools
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
Start with src/agents/models/default_models.py and read get_default_model_settings() alongside the GPT-5 patterns and helper functions named in the issue. Check existing tests for default settings and add coverage for the confirmed GPT-6 names, unconfirmed variants, and chat aliases. Done when the defaults match the requested behavior and the relevant tests pass.
索引モデルが issue の本文から書いたものです。
説明
Summary
agents.models.default_models.get_default_model_settings() only recognizes GPT-5 model names. For GPT-6 models it returns empty ModelSettings, so no reasoning is sent with the request. GPT-6 models then reject function tool calls on /v1/chat/completions with a 400 unless reasoning_effort is set to "none" (or the call is routed to /v1/responses).
We would like GPT-6 models to receive the same per-model default reasoning treatment as GPT-5 models.
Environment
- SDK:
openai-agents0.19.2 (also present on currentmain—src/agents/models/default_models.py) - Python 3.12
- Model invoked through
OpenAIChatCompletionsModel(/v1/chat/completions), accessed via an OpenAI-compatible gateway that forwards provider errors unchanged
Observed error
Creating an Agent with a GPT-6 model and any function tool (or MCP tool), then running it, fails with:
Error code: 400 - {'error': {'message': "Function tools with reasoning_effort are not
supported for gpt-6-sol in /v1/chat/completions. To use function tools, use
/v1/responses or set reasoning_effort to 'none'.", 'type': 'invalid_request_error',
'param': 'reasoning_effort', 'code': None}}
The same agent code works with gpt-5.6-luna, because that name is covered by _GPT_5_DEFAULT_REASONING_EFFORT_PATTERNS and the SDK sends reasoning={"effort": "none"} by default.
Minimal reproduction sketch:
from agents import Agent, Runner, function_tool
@function_tool
def get_weather(city: str) -> str:
"""Get the weather for a city."""
return "sunny"
# Fails: agent.model_settings == ModelSettings() -> no reasoning sent -> 400
agent = Agent(name="test", model="gpt-6-sol", tools=[get_weather])
Runner.run_sync(agent, "What's the weather in Paris?")
# Works: explicit reasoning makes the provider accept the tool call
from agents import ModelSettings
from openai.types.shared.reasoning import Reasoning
agent = Agent(
name="test",
model="gpt-6-sol",
tools=[get_weather],
model_settings=ModelSettings(reasoning=Reasoning(effort="none")),
)
The second case succeeding confirms gpt-6-sol accepts reasoning_effort: "none" on /v1/chat/completions — the model just never receives it by default.
Root cause
In src/agents/models/default_models.py:
gpt_5_reasoning_settings_required()gates onmodel_name.startswith("gpt-5"), so GPT-6 names are not considered reasoning models._GPT_5_DEFAULT_REASONING_EFFORT_PATTERNShas no GPT-6 entries.get_default_model_settings("gpt-6-sol")therefore returnsModelSettings()and nothing is sent asreasoning_effort; the provider applies its own default, which GPT-6 rejects in combination with function tools on/v1/chat/completions.
Requested change
Extend the existing default-reasoning machinery to the GPT-6 family, mirroring the GPT-5 structure:
- Confirmed defaults:
gpt-6-sol,gpt-6-luna, andgpt-6.1-sol(plus dated snapshots) should map toreasoning=Reasoning(effort="none")withverbosity="low", i.e. the same settings already applied togpt-5.6-luna/gpt-5.6-sol. - Unconfirmed variants: for GPT-6 names whose supported efforts are not yet confirmed (e.g.
gpt-6,gpt-6-astra), keep the existing policy of the family verbosity default withoutreasoning.effort— the same way unconfirmed GPT-5 variants (e.g.gpt-5-mini) are handled today. Maintainers can fill in confirmed efforts as they become known. - Non-reasoning aliases:
gpt-6-chat(andgpt-6-chat-latest, if it exists) should return emptyModelSettings, like thegpt-5.x-chat-latestaliases, since they do not acceptreasoning.effort.
The functions involved are the ones our application relies on: get_default_model_settings (used by Agent's model_settings default factory and by agents.run_internal.turn_preparation), get_default_model, gpt_5_reasoning_settings_required, and is_gpt_5_default.
Workaround we are using
Setting model_settings=ModelSettings(reasoning=Reasoning(effort="none")) explicitly on every GPT-6 agent. This works but duplicates what the SDK already does per-model for GPT-5, and it silently pins the effort even for models where a different default would be preferable — which is exactly what get_default_model_settings exists to avoid.
- 主要言語
- Python
- スター
- 30k
- フォーク
- 4.9k
- 平均マージ
- 18時間 13分
- マージ済み PR(30日)
- 215
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
openai/openai-agents-python のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
openai/openai-agents-python#5348 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
openai/openai-agents-python#5353 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 3/5 半日 初心者へのやさしさ 70/100
openai/openai-agents-python#5342 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
Finished tool call is dropped when a parallel tool's guardrail trips対応中かも @jbeckwith-oai が 7 日前に担当しました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
openai/openai-agents-python#5327 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
openai/openai-agents-python#5322 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
openai/openai-agents-python の issue をすべて見る
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 72/100
-
[Bug]: Importing weave changes the process-wide locale対応中かも @himanshu748 が今日担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
-
UX
難易度 1/5 1時間未満 初心者へのやさしさ 72/100
mediajunkie/piper-morgan-product#2008 · コメント 2 件 ·