GPT-6 models get no default reasoning settings leading to 400 on /v1/chat/completions with function tools
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 65/100
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Python
- Estrellas
- 30k
- Forks
- 4.9k
- Merge medio
- 16 h 25 min
- PR fusionados (30 d)
- 220
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de openai/openai-agents-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
openai/openai-agents-python#5348 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Support the OpenAI Decisions APIAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
openai/openai-agents-python#5353 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 Medio día Aptitud para principiantes 70/100
openai/openai-agents-python#5342 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
openai/openai-agents-python#5322 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de openai/openai-agents-python
Issues similares
-
`burr` fails to start when the Python path has a space in itPosiblemente ocupada @enekoreto la tomó hoy. Abiertostatus/needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 5 días
-
gemini 出现了新的域名需要加入Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
-
Dificultad 2/5 Medio día Aptitud para principiantes 72/100
debpalash/VoiceStudio#2903 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
dagster-io/community-integrations#367 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
aws-samples/sample-per-model-bedrock#243 ·
Los mantenedores suelen responder en 1 día