Skip to content

Spark canonical Responses streams end with adapter_eof when Responses Lite is enabled #3885

Description

@cb8010d6

This was generated by AI during triage.

Client or integration

Codex CLI

Area

Provider adapter

Summary

When Codex routes gpt-5.3-codex-spark through the canonical ChatGPT Responses endpoint, forwarding x-openai-internal-codex-responses-lite: true starts an HTTP 200 SSE response but the upstream stream ends before a terminal event. OpenCodex consequently emits response.incomplete with incomplete_details.reason=adapter_eof and records the request as 502.

Replaying the same request after removing only that header completes normally. The expected behavior is for OpenCodex to suppress Responses Lite only for the Spark wire model while preserving existing metadata forwarding for other canonical models.

Reproduction

  1. Use OpenCodex with the canonical OpenAI Codex-login provider and select gpt-5.3-codex-spark.
  2. Send a streaming Responses request carrying x-openai-internal-codex-responses-lite: true.
  3. Observe HTTP 200 and initial SSE events, followed by response.incomplete with reason adapter_eof; OpenCodex records 502.
  4. Replay the identical request after removing only the Lite header.
  5. Observe a normal response.completed terminal and successful Codex CLI exit.

The source behavior is also present on current dev: an adapter-boundary regression test expecting the Spark header to be absent fails before the proposed fix because the built request still contains true.

A failed WebSocket upgrade is not causal: Codex falls back to HTTP, and the HTTP request completes after the Lite header is removed.

Version

Observed on 2.43.0; source behavior confirmed on dev 2.47.0 at d00615d5696a9c6b7f1a3006181e57569b012920.

Operating system

Windows 10 Pro, build 19045

Provider and model

OpenAI (Codex login) / gpt-5.3-codex-spark

Logs or error output

With x-openai-internal-codex-responses-lite: true:
HTTP 200 -> SSE -> response.incomplete
incomplete_details.reason=adapter_eof
OpenCodex result: 502

Without that header:
HTTP 200 -> SSE -> response.completed
Codex output: SPARK_DROP_LITE_OK

Screenshots and supporting files

The result was reproduced by differential request replay. No credentials, account identifiers, request IDs, or private provider URLs are attached.

Redacted configuration

{
  "providers": {
    "openai": {
      "adapter": "openai-responses",
      "authMode": "forward",
      "baseUrl": "https://chatgpt.com/backend-api/codex"
    }
  }
}

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Activity

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 isn't workingproviderProvider adapters, OpenAI-compat presets, upstream API quirksstreamingSSE, WebSocket, terminal stream frames

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions