Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

GPT-6 models get no default reasoning settings leading to 400 on /v1/chat/completions with function tools

未关闭
#5,336 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
65/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
python
领域
ai

调研方向

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 内容生成。

描述

enhancement

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-agents 0.19.2 (also present on current main — 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 on model_name.startswith("gpt-5"), so GPT-6 names are not considered reasoning models.
  • _GPT_5_DEFAULT_REASONING_EFFORT_PATTERNS has no GPT-6 entries.
  • get_default_model_settings("gpt-6-sol") therefore returns ModelSettings() and nothing is sent as reasoning_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:

  1. Confirmed defaults: gpt-6-sol, gpt-6-luna, and gpt-6.1-sol (plus dated snapshots) should map to reasoning=Reasoning(effort="none") with verbosity="low", i.e. the same settings already applied to gpt-5.6-luna / gpt-5.6-sol.
  2. 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 without reasoning.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.
  3. Non-reasoning aliases: gpt-6-chat (and gpt-6-chat-latest, if it exists) should return empty ModelSettings, like the gpt-5.x-chat-latest aliases, since they do not accept reasoning.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
星标
30.2k
派生
4.9k
平均合并
12 小时 18 分钟
30 天内合并 PR
148

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

openai/openai-agents-python 的其他 Issue

查看 openai/openai-agents-python 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。