Skip to content

OpenAI GPT-5.6 tool calls fail during ocr review because Chat Completions is used #559

Description

@JH-Wen

OpenCodeReview Version

v1.8.0 (commit: e670b3b, built: 2026-07-28T02:27:56Z)

Operating System

Windows

Installation Method

npm (global)

LLM Provider

OpenAI

Bug Description

When the built-in OpenAI provider is configured with gpt-5.6-terra, ocr review completes the planning phase but fails when a review subtask sends function tools.

The request is sent to /v1/chat/completions. OpenAI then returns a 400 error stating that function tools with reasoning effort are not supported for this model through Chat Completions and that /v1/responses should be used instead.

This is difficult for a new user to diagnose because:

  • gpt-5.6-terra is not included in the built-in OpenAI model presets.
  • The configuration flow does not explain that GPT-5.6 models need the Responses API for the tool-calling workflow used by ocr review.
  • The review plan can complete successfully before the tool-using subtask fails.
  • I could not find a FAQ entry explaining this error or how to configure the Responses API.

The same support is needed for the current GPT-5.6 variants:

  • gpt-5.6-luna
  • gpt-5.6-terra
  • gpt-5.6-sol

Steps to Reproduce

  1. Run ocr config provider.
  2. Select the built-in OpenAI provider and configure an OpenAI API key.
  3. Run ocr config model.
  4. Manually add gpt-5.6-terra, because it is not present in the built-in model list.
  5. Run ocr review on a repository containing reviewable changes.
  6. Wait for the review plan to complete.
  7. Observe that the following tool-using subtask fails with a 400 response from /v1/chat/completions.

Expected Behavior

A user selecting a supported GPT-5.6 model should be able to run ocr review without manually knowing which OpenAI API protocol is required.

Ideally, the built-in OpenAI configuration should:

  • Include gpt-5.6-luna, gpt-5.6-terra, and gpt-5.6-sol.
  • Use the Responses API for these models when no explicit protocol override is configured.
  • Preserve the existing behavior of other OpenAI models and configurations.

At minimum, if the selected provider and model combination cannot support the tool-calling workflow, the configuration or connectivity test should fail early with an actionable message instead of failing after the review plan has completed.

Logs / Error Output

[ocr] Plan completed for path/to/file
[ocr] Subtask error for path/to/file: LLM completion error: POST "https://api.openai.com/v1/chat/completions": 400 Bad Request {
    "message": "Function tools with reasoning_effort are not supported for gpt-5.6-terra 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": null
}

Additional Context

OpenCodeReview already supports the Responses API through the openai-responses protocol, introduced in:

Documentation for the openai-responses protocol is also being tracked in:

However, this capability is not discoverable through the normal built-in OpenAI provider and model-selection flow. The current FAQ also does not provide troubleshooting guidance for this error. This leaves new users without an actionable recovery path after the failure.

One possible solution would be to add the three exact GPT-5.6 model IDs to the built-in OpenAI provider and associate them with the Responses protocol through explicit per-model metadata. Existing models could continue using the provider's current default protocol, and an explicitly configured protocol could continue to take precedence.

Another option would be a separate built-in OpenAI Responses provider, although users selecting the ordinary OpenAI provider could still encounter the same configuration trap.

Setting reasoning_effort to none may bypass this particular API restriction, but it disables reasoning rather than addressing the protocol mismatch. Adding a first-class reasoning_effort setting is not part of this report.

I have not started an implementation yet and would be happy to submit a focused change with tests and documentation after the preferred approach is confirmed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions