Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions docs-site/src/content/docs/guides/codex-app-models.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,23 @@ or grant account entitlement. The separately billed
`openai-apikey/daybreak-blue-latest` API row is a different route and its 1,050,000 / 922,000 limits
are never copied into the Codex-login row.

For custom Astra and Daybreak rows on that canonical `openai` Codex-forward destination,
explicit `reasoningEfforts` are bounded by the model's pinned Codex capabilities. A custom
`["none", "minimal", "low"]` becomes `["low"]` in the catalog; a nonempty list with no
supported values also falls back to the native default as a single choice. An explicit `[]`
stays empty and has no advertised default. A declared default is retained only if it belongs to
the resulting list; otherwise the native default is used when present, then the first surviving
choice. Stored custom configuration is unchanged, and repeated syncs do not add `max` back to a
narrow custom list.

This requires the exact provider, destination, and capability-backed model identity. An arbitrary
gateway such as `YYLJ/gpt-6-astra` does not inherit native capabilities from its name. Its explicit
custom ladder continues to override discovered provider metadata under the normal routed rules.
Codex's native Astra `ultra` choice is retained: it is a client delegation mode converted to a
supported wire effort, distinct from the [API model's effort list](https://developers.openai.com/api/docs/models/gpt-6-astra).
Catalog normalization does not rewrite existing thread settings or establish support for a
particular installed Desktop version.

When the `codexAccountNamespaces` map is empty, account-qualified picker rows are off. If
`codexAccountPickerEnabled` is omitted with a non-empty map, they are treated as enabled for
backward compatibility. Set it to `false` to hide generated qualified rows and restore bare native
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,14 @@ predictions. Explicit provider/model price overrides still take precedence.
| `unsafeAllowNativeLocalExec?` | `boolean` | Cursor legacy boolean, equivalent to `nativeLocalExec: "on"` only when the newer field is unset. |
| `nativeLocalExec?` | `"off" \| "codex-sandbox" \| "on"` | Cursor local-exec policy. `off` is default; `codex-sandbox` currently fails closed like `off`. |

Custom-model `reasoningEfforts` normally override discovered provider metadata. The bounded
exception is an explicit Astra or Daybreak custom row on the canonical `openai` Codex-forward
destination: its advertised list is intersected with that model's pinned native capabilities.
An explicit empty list remains empty with no default; a nonempty incompatible list falls back
to the native default as a single choice. Defaults must belong to the final list. This changes
the catalog projection, not stored configuration or arbitrary gateway models sharing a GPT name.
See [custom native catalog examples](/guides/codex-app-models/).

### Discovered model display names

Use `modelDisplayNames` when a provider returns machine friendly ids but the Codex model picker
Expand Down
8 changes: 8 additions & 0 deletions docs-site/src/content/docs/reference/proxy-formats.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,14 @@ It does not issue an additional inference request. An incomplete response caused
token limit or content filtering retains `length` or `content_filter`, even if it includes tool
output. Other incomplete boundaries return an upstream error instead of claiming a normal finish.

Refusal text stays separate from answer text: JSON completions use nullable `message.refusal`,
and streaming chunks use `delta.refusal`. Native Chat JSON-to-SSE and SSE-to-JSON conversions
preserve that field; native streaming relay preserves the provider's refusal deltas. On translated
Responses streams, refusal parts are buffered until the terminal event and emitted once in their
original output/content order. Compatible repeated or sparse snapshots do not duplicate or erase
text. Contradictory refusal snapshots and buffer overflow produce a typed error without a successful
finish or `[DONE]`. This preserves the upstream refusal; it does not introduce a proxy policy decision.

Because the internal execution path is Responses-based, a provider adapter can impose a narrower
feature set. For example, a request feature that cannot be represented by the selected adapter is
returned as an error instead of silently changing its meaning.
Expand Down
1 change: 1 addition & 0 deletions scripts/test-layout/layout.json
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@
"catalog-vision-sidecar-modalities.test.ts": "codex-integration",
"chat-completions-endpoint.test.ts": "responses",
"chat-json-sse-fallback.test.ts": "responses",
"chat-refusal.test.ts": "responses",
"chatgpt-device-auth.test.ts": "oauth",
"chatgpt-oauth.test.ts": "oauth",
"chatgpt-token-expiry.test.ts": "oauth",
Expand Down
Loading
Loading