Bug: OpenAI GPT-5.6 family fails ALL tool-calling via native OpenAI provider
crewai version: 1.15.1 (confirmed still present as of checking 1.15.2 and 1.15.3 changelogs — neither mentions this)
Summary
Any Agent using an OpenAI GPT-5.6-family model (gpt-5.6-sol, gpt-5.6-terra, or gpt-5.6-luna) fails immediately on the first LLM call if the agent has any tools attached. This makes the entire GPT-5.6 family unusable for agentic workflows in crewAI today.
Error
Error code: 400 - {'error': {'message': "Function tools with reasoning_effort are not supported for gpt-5.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}}
Same error (with the model name substituted) for gpt-5.6-terra and gpt-5.6-luna — confirmed it’s a whole-family issue, not model-specific.
Reproduction
from crewai.llm import LLM
from crewai import Agent, Task, Crew, Process
llm = LLM(model="openai/gpt-5.6-sol", max_completion_tokens=2048, api_key="...")
agent = Agent(role="Tester", goal="test", backstory="test", llm=llm, tools=[<any BaseTool>])
task = Task(description="Just say hello, do not call any tools.", expected_output="A greeting.", agent=agent)
Crew(agents=[agent], tasks=[task], process=Process.sequential).kickoff()
# -> BadRequestError as above
Tried, none resolve it:
- Explicitly passing
reasoning_effort="none"toLLM(...)— same error persists. - Routing through LiteLLM instead of the native provider (
is_litellm=True) — same error, litellm doesn’t route this differently either.
What’s needed
OpenAI’s newer reasoning-tier models (this one specifically) require the Responses API (/v1/responses) for tool/function calling — the legacy Chat Completions endpoint (/v1/chat/completions) rejects tool calls outright for these models regardless of reasoning_effort value. crewai’s native OpenAI provider (crewai/llms/providers/openai/completion.py) appears to always use /v1/chat/completions for tool-calling agents; it would need to route reasoning-tier models needing tools through /v1/responses instead (the class already has some Responses-API-shaped fields — auto_chain_reasoning, reasoning.encrypted_content, max_output_tokens — so there may be partial groundwork already present that just isn’t wired into the tool-calling path).
Separate, smaller issues hit along the way (already worked around app-side, mentioning for completeness)
- GPT-5.6 (and GPT-5.5) reject the legacy
max_tokensparam outright (Unsupported parameter: 'max_tokens'... Use 'max_completion_tokens' instead) when using the native OpenAI provider. LiteLLM auto-translates this; the native provider does not. Not a bug report item sincemax_completion_tokensis a documented field already — just noting it’s easy to hit by surprise. - A Pydantic
BaseModelfield literally namedtitlecollided with the auto-generated JSON-Schema"title"metadata key during OpenAI-strict-mode schema sanitization (pydantic_schema_utils.py), producing"'required' is required to be an array including every key in properties. Extra required key 'title' supplied."Worked around by renaming the field; flagging in case it affects other users with atitlefield on a tool’s args schema.