Skip to content

[Bug]: Resumed threads send reasoning.effort 'none' to gpt-6.1-sol (unsupported) after restart #26863

Closed as not planned

Description

@Dipesh-J

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/desktop

Steps to reproduce

  1. Use a thread with model gpt-6.1-sol with the provider codex
  2. Have the app restarted by updating, when a thread is running.
  3. Observe the provider error on resume.
  4. The same error can appear again on the next continue attempt with different effort levels.

Expected behavior

On resume, T3 should send the user's chosen reasoning effort that gpt-6.1-sol . It should not send none when the model does not support it.

Actual behavior

Provider returns 400 and the turn fails with:

{
  "type": "error",
  "error": {
    "message": "Unsupported value: 'none' is not supported with the 'gpt-6.1-sol' model. Supported values are: 'low', 'medium', 'high', 'xhigh', and 'max'.",
    "type": "invalid_request_error",
    "param": "reasoning.effort",
    "code": "unsupported_value"
  },
  "status": 400
}

And even if we try to context handoff multiple times to rotate to the same provider and model it still fails.

Impact

Blocks work completely

Version or commit

0.1.4-nightly.20261029.3853

Environment

macOS 26.5.2

Logs or stack traces

Provider Error
{"type":"error","error":{"message":"Unsupported value: 'none' is not supported with the 'gpt-6.1-sol' model. Supported values are: 'low', 'medium', 'high', 'xhigh', and 'max'.","type":"invalid_request_error","param":"reasoning.effort","code":"unsupported_value"},"status":400}

Screenshots, recordings, or supporting files

image.png

Workaround

Context Handoff to a new agent or starting a new thread

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    needs-triageIssue needs maintainer review and initial categorization.
    on Oct 29, 2026
  2. juliusmarminge commented on Oct 29, 2026

    @juliusmarminge
    Member

    Thanks for the screenshot. I tried to reproduce this on main (f855f01) and couldn't get 'none' sent:

    • Drove the Codex app-server the way T3 does (thread/start, turn/start, app-server killed mid-turn, then thread/resume and new turns on the same thread) with Codex 0.163.0 and with 0.156.1 (the version T3 installs for the built-in ChatGPT provider). On every resumed turn, reasoning.effort was the effort T3 passed (for example high). When no effort was passed, Codex used the model's default (low on 0.163) or left the field out (0.156.1, which doesn't list gpt-6.1-sol).
    • Checked the API directly: gpt-6.1-sol with reasoning.effort left out works. It returns this exact 400 only when the request literally contains "effort": "none".
    • T3 itself never writes none as a reasoning effort. So the value is coming from the thread's saved selection or from Codex's own config.

    To close the gap, could you share:

    1. Which Codex provider the thread uses: the built-in ChatGPT sign-in, or your own Codex CLI? If it's your own CLI, the output of codex --version.
    2. Whether ~/.codex/config.toml, or a Codex profile you use, sets model_reasoning_effort, and to what.
    3. What the reasoning-effort control in the composer shows for the broken thread, and whether the thread was ever on a different model before gpt-6.1-sol.
    4. The server log lines around one failed "Continue." (in ~/.t3/userdata/logs). Please trim anything private.
  3. Dipesh-J commented on Oct 29, 2026

    @Dipesh-J
    Author

    Hi Julius, I checked the local records. Here’s what I found:

    1. Provider: My own Codex CLI at ~/.local/bin/codex. Logs confirm version 0.165.0 at failure time; codex --version still reports codex-cli 0.165.0.

    2. Codex config: An earlier recorded read of ~/.codex/config.toml confirms it contained:

      model = "gpt-5.1-codex"
      model_reasoning_effort = "none"

      I found no configured profile or custom Codex home. The config now uses high, and a fresh Sol test thread succeeds.

    3. Thread settings: High was selected for the failed “Continue.” turn. Later attempts with Medium also failed. The available thread history starts with Sol; I found no evidence of an earlier different model.

    4. Sanitized logs — all timestamps are UTC on 2026-10-29:

      07:14:14.284 thread/resume response:
        reasoningEffort=none
      
      07:15:22.846 turn/start for "Continue.":
        model=gpt-6.1-sol
        effort=high
        collaborationMode.settings.reasoning_effort=high
      
      07:15:26.301 error:
        HTTP 400, param=reasoning.effort
        Unsupported value: 'none' is not supported with
        the 'gpt-6.1-sol' model.
      
      07:15:26.305 turn/completed:
        failed
      

    Your suspicion about the Codex config was supported: it explicitly contained none. I still couldn’t determine why the effective effort appeared to come from that config despite T3 passing high for the turn.

    A new T3 thread and a separate Codex CLI session both worked afterward. I wouldn’t call this an automatic fix, since the config had also changed. It could be a Codex-side issue involving configuration or resumed-session state, but I haven’t isolated whether the cause is in Codex or T3’s integration.

  4. juliusmarminge commented on Nov 12, 2026

    @juliusmarminge
    Member

    I tried to reproduce this on the current build and could not.

    Reproduced by driving the Codex app-server directly the way T3 does, not through the T3 app itself. Target was origin/main 6ba3de7 (adapter apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts) with codex-cli 0.167.2. Setup: a scratch CODEX_HOME whose config.toml set model_reasoning_effort = "none", which is the reporter's config. A custom HTTP-only Responses provider went through a local logging proxy so each request's reasoning.effort was visible. Steps: initialize with experimentalApi; thread/start with model gpt-6.1-sol and no effort (as codexThreadRuntimeParams sends it); turn/start with effort high and collaborationMode.settings.reasoning_effort high; SIGKILL the app-server mid-turn; start a new app-server; thread/resume; then turn/start 'Continue.' with effort high. Run A (no compaction): thread/start and thread/resume both report reasoningEffort "none", matching the reporter's log. Every request still went out with effort "high" and the resumed turn completed. Run B: same, but thread/compact/start after thread/resume, which T3 sends with no effort. The compaction requests went to gpt-6.1-sol with reasoning.effort "none". Codex retried 5 times, then the turn failed with the reporter's exact error: unsupported_value, 'none' is not supported with the 'gpt-6.1-sol' model, param reasoning.effort. The next turn/start with effort high succeeded. So any thread-level request after resume that does not carry the turn's effort fails, including manual or automatic compaction, which a long resumed thread hits before 'Continue.' proceeds. Scratch, proxy and worktree were removed afterwards.

    Closing as not planned. If it still happens for you, reply with the exact steps and the version you are on and it will be looked at again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.needs-triageIssue needs maintainer review and initial categorization.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions