Skip to content
Closed
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
38 changes: 34 additions & 4 deletions docs-site/src/content/docs/guides/codex-app-models.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,41 @@ the bare or API-key model list. The row is matched on the field shape a real cat
which filters malformed entries — it does not prove the id came from an upstream response, since
the cache is a user-owned file. See [Exact Codex account selectors](/reference/configuration/routing/#exact-codex-account-selectors).

`gpt-daybreak-blue-latest` follows that observation-only rule for account-qualified rows and is not
added to the bare native allowlist. A separate, explicit `customModels` entry can expose the same
wire id as `openai/gpt-daybreak-blue-latest` through the canonical Codex-login forward provider:

```json
{
"customModels": [
{
"id": "daybreak-codex-forward",
"provider": "openai",
"modelId": "gpt-daybreak-blue-latest"
}
]
}
```

Only that exact provider, endpoint, and model id receive the pinned Sol capability snapshot:
372,000 context, 334,800 automatic compaction, the native reasoning ladder, and native Codex tool
metadata. The request still sends `gpt-daybreak-blue-latest`; opencodex does not rewrite it to Sol,
does not create a bare row, and does not 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.

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
rows in the picker without deleting mappings or disabling exact
`<selector>/<native-openai-model>` routing.

API GPT-5.6 entries use
API GPT-5.6 and Daybreak entries use
1,050,000 context / 922,000 max input, and `*-pro` picker ids resolve to the base wire model with
`reasoning.mode: "pro"` while logs, usage, and picker state keep the virtual id.
The API catalog is fixed to exactly eight ids: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, and their
three Pro virtual ids; there is no generic `gpt-5.6-pro` alias.
The API catalog is fixed to exactly ten ids: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, their three Pro
virtual ids, `daybreak-red-latest`, and `daybreak-blue-latest`; there is no generic
`gpt-5.6-pro` alias.
Compact requests keep the selected tier but send the base model without a reasoning object.

Select the credential route represented by the picker id. Change Pool/Direct on the Providers page;
Expand All @@ -43,6 +67,9 @@ Select the credential route represented by the picker id. Change Pool/Direct on
gpt-5.6-sol # bare Codex-login route via Pool or Direct
<selector>/gpt-5.6-sol # stored Codex account mapped by that selector
openai-apikey/gpt-5.6-sol # API key
openai/gpt-daybreak-blue-latest # explicit Codex-forward custom row (372,000)
<selector>/gpt-daybreak-blue-latest # observed account-qualified native id, when available
openai-apikey/daybreak-blue-latest # separate API-key route (1,050,000 / 922,000)
```

Fresh installs and configs with no saved mode default to Pool. Current configs use marker 2 and
Expand Down Expand Up @@ -102,13 +129,16 @@ metadata instead of an older-template approximation.
| --- | --- |
| Codex login (account-qualified rows disabled) | Bare native ids such as `gpt-5.6-sol`, `gpt-5.6-terra`, and `gpt-5.6-luna`; Pool or Direct is selected through `codexAccountMode`. GPT-5.6 rows use a 372,000-token catalog window. |
| Codex login (account-qualified rows enabled with eligible selectors) | One `<selector>/<native-openai-model>` row per eligible selector and supported native model; each row uses only its mapped account, and bare native rows are hidden from the picker. Native metadata and context windows are preserved. |
| OpenAI (API key) | Exactly eight namespaced rows: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, and the three `*-pro` virtual ids (1,050,000 context; 922,000 max input for all eight) |
| Codex login (explicit Daybreak forward row) | `openai/gpt-daybreak-blue-latest` only when the exact `customModels` row is configured on the canonical `openai` provider. It keeps the Daybreak wire id and uses the pinned Sol capability snapshot (372,000 context; 334,800 automatic compaction). |
| OpenAI (API key) | Exactly ten namespaced rows: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, the three `*-pro` virtual ids, and the two Daybreak aliases (1,050,000 context; 922,000 max input for all ten) |
| OpenRouter | `openrouter/openai/gpt-5.6-sol`, `openrouter/openai/gpt-5.6-terra`, `openrouter/openai/gpt-5.6-luna` (1,050,000) |
| Cursor | Static fallback includes `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra`, and `cursor/gpt-5.6-luna` (1,000,000), plus `cursor/grok-4.5` and `cursor/grok-4.5-fast` (500,000); live account discovery decides which remain visible. |
| xAI | Live discovery is authoritative; the fallback catalog defaults to `xai/grok-4.5` with a 500,000-token window and `low` / `medium` / `high` reasoning controls. |

The pinned GPT-5.6 entries preserve the exact upstream ladder. Sol and Terra expose `low` through
`ultra`; Luna stops at `max`. Sol defaults to `low`, while Terra and Luna default to `medium`.
The explicit Codex-forward Daybreak Blue row inherits Sol's ladder and default without changing its
wire identity.
`ultra` is a client-facing choice for maximum reasoning plus proactive delegation and reaches the
backend as `max`. A picker entry only means the catalog is ready: the connected account or API key
must still be entitled to use that model.
Expand Down
38 changes: 33 additions & 5 deletions docs-site/src/content/docs/ko/guides/codex-app-models.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,38 @@ opencodex는 매핑된 계정별로 `<selector>/<native-openai-model>` 행을
다른 계정으로 전환하지 않고 요청이 실패합니다. 자세한 내용은 [명시적 Codex 계정 selector](/reference/configuration/routing/#exact-codex-account-selectors)를
참고하세요.

계정 한정 행에서 `gpt-daybreak-blue-latest`는 계정 카탈로그에 관측됐을 때만 보존되며 bare native
allowlist에는 추가되지 않습니다. 이와 별개로 canonical Codex 로그인 forward provider에 다음과 같은
명시적 `customModels` 항목을 두면 같은 wire id를 `openai/gpt-daybreak-blue-latest`로 노출할 수 있습니다.

```json
{
"customModels": [
{
"id": "daybreak-codex-forward",
"provider": "openai",
"modelId": "gpt-daybreak-blue-latest"
}
]
}
```

정확히 이 provider, endpoint, model id 조합만 고정된 Sol capability snapshot을 상속합니다. 컨텍스트는
372,000, 자동 압축점은 334,800이며 native reasoning ladder와 Codex tool metadata도 보존됩니다. 요청의
wire id는 계속 `gpt-daybreak-blue-latest`이고 Sol로 다시 쓰지 않으며 bare 행이나 계정 사용 권한을 만들지
않습니다. 별도 과금 경로인 `openai-apikey/daybreak-blue-latest`의 1,050,000 / 922,000 한도는 Codex 로그인
행으로 복사되지 않습니다.

`codexAccountNamespaces` map이 비어 있으면 계정 한정 선택기 행은 꺼집니다. 비어 있지 않은 map에서
`codexAccountPickerEnabled`를 생략하면 이전 버전과의 호환성을 위해 활성화된 것으로 취급됩니다. `false`로
설정하면 매핑을 삭제하거나 명시적 `<selector>/<native-openai-model>` 라우팅을 비활성화하지 않은 채 생성된
qualified 행을 숨기고 선택기에 bare native 행을 복원합니다.

API GPT-5.6 항목은 context 1,050,000 / max input 922,000을
API GPT-5.6과 Daybreak 항목은 context 1,050,000 / max input 922,000을
쓰고, `*-pro` picker id는 로그, 사용량, picker 상태에는 가상 id를 유지한 채 wire에서는 base model과
`reasoning.mode: "pro"`로 풀립니다. API 카탈로그는 `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, 그리고 세 개의
Pro 가상 id까지 정확히 여덟 개로 고정되어 있으며, 일반적인 `gpt-5.6-pro` 별칭은 없습니다. Compact 요청은
`reasoning.mode: "pro"`로 풀립니다. API 카탈로그는 `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, 세 개의
Pro 가상 id, `daybreak-red-latest`, `daybreak-blue-latest`까지 정확히 열 개로 고정되어 있으며,
일반적인 `gpt-5.6-pro` 별칭은 없습니다. Compact 요청은
선택한 tier를 유지하되 reasoning 객체 없이 base model만 보냅니다.

선택기 id로 credential 경로를 명시적으로 선택하세요. Pool/Direct는 Providers 페이지에서 바꾸며,
Expand All @@ -36,6 +59,9 @@ Pro 가상 id까지 정확히 여덟 개로 고정되어 있으며, 일반적인
gpt-5.6-sol # Pool 또는 Direct를 통한 bare Codex 로그인 경로
<selector>/gpt-5.6-sol # 해당 selector에 매핑된 저장된 Codex 계정
openai-apikey/gpt-5.6-sol # API key
openai/gpt-daybreak-blue-latest # 명시적 Codex-forward custom 행 (372,000)
<selector>/gpt-daybreak-blue-latest # 사용 가능할 때 관측되는 계정 한정 native id
openai-apikey/daybreak-blue-latest # 별도 API-key 경로 (1,050,000 / 922,000)
```

새로 설치한 환경과 저장된 모드가 없는 설정은 Pool이 기본값입니다. 현재 설정은 마커 2를 사용하고,
Expand Down Expand Up @@ -81,13 +107,15 @@ GPT-5.6에만 사용합니다. 오래된 템플릿으로 근사하지 않고 모
| --- | --- |
| Codex 로그인(계정 한정 선택기 행 비활성) | `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna` 같은 bare native id를 표시하고 `codexAccountMode`에 따라 Pool 또는 Direct를 사용합니다. GPT-5.6 행의 카탈로그 창은 372,000토큰입니다. |
| Codex 로그인(계정 한정 선택기 행 활성, 유효한 selector 있음) | 유효한 selector와 지원되는 native model의 각 조합마다 `<selector>/<native-openai-model>` 행을 표시합니다. 각 행은 매핑된 계정만 사용하며 bare native 행은 선택기에서 숨깁니다. Native metadata와 context window는 보존됩니다. |
| OpenAI(API key) | 정확히 여덟 개의 네임스페이스 행: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, 그리고 세 개의 `*-pro` 가상 id (모두 컨텍스트 1,050,000; 최대 입력 922,000) |
| Codex 로그인(명시적 Daybreak forward 행) | canonical `openai` provider에 정확한 `customModels` 항목이 있을 때만 `openai/gpt-daybreak-blue-latest`를 표시합니다. Daybreak wire id를 유지하고 고정된 Sol capability snapshot(컨텍스트 372,000; 자동 압축점 334,800)을 사용합니다. |
| OpenAI(API key) | 정확히 열 개의 네임스페이스 행: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, 세 개의 `*-pro` 가상 id, 두 Daybreak 별칭 (모두 컨텍스트 1,050,000; 최대 입력 922,000) |
| OpenRouter | `openrouter/openai/gpt-5.6-sol`, `openrouter/openai/gpt-5.6-terra`, `openrouter/openai/gpt-5.6-luna` (1,050,000) |
| Cursor | 정적 폴백에는 `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra`, `cursor/gpt-5.6-luna` (1,000,000)와 `cursor/grok-4.5`, `cursor/grok-4.5-fast` (500,000)가 들어갑니다. 실시간 계정 탐색이 어떤 항목을 계속 보일지 정합니다. |
| xAI | 실시간 탐색이 기준입니다. 폴백 카탈로그의 기본값은 `xai/grok-4.5`이고, 컨텍스트 500,000과 `low` / `medium` / `high` 추론 제어를 제공합니다. |

고정된 GPT-5.6 항목은 업스트림 ladder를 그대로 보존합니다. Sol과 Terra는 `low`부터 `ultra`까지 노출하고,
Luna는 `max`에서 멈춥니다. Sol의 기본값은 `low`이고, Terra와 Luna의 기본값은 `medium`입니다. `ultra`는
Luna는 `max`에서 멈춥니다. Sol의 기본값은 `low`이고, Terra와 Luna의 기본값은 `medium`입니다. 명시적
Codex-forward Daybreak Blue 행도 wire id를 바꾸지 않은 채 Sol의 ladder와 기본값을 상속합니다. `ultra`는
최대 reasoning과 선제적 delegation을 묶은 클라이언트 선택지이며 백엔드에는 `max`로 전달됩니다. picker 항목이
보인다는 것은 카탈로그가 준비됐다는 뜻일 뿐입니다. 연결된 계정이나 API key에 실제 사용 권한이 있어야
합니다.
Expand Down
2 changes: 1 addition & 1 deletion src/codex/catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Public surface preserved exactly; importers keep using "src/codex/catalog".
export { isMediaGenerationModelId, shouldExposeRoutedModel, readCodexCatalogPath, readCatalog, normalizeRoutedCatalogEntry, catalogModelSlug, filterSupportedNativeSlugs, catalogModelSupportsReasoningSummaries } from "./catalog/parsing";
export type { CatalogModel, MultiAgentMode } from "./catalog/parsing";
export { accountBoundNativeOpenAiSlugs, accountBoundNativeOpenAiSlugsBySelector, CODEX_NATIVE_ALIAS_CATALOG_KIND, NATIVE_OPENAI_MODELS, configuredNativeAliasSlugs, desktopAllowlistSuppressedNativeSlugs, isNativeAliasCatalogEntry, nativeOpenAiContextWindow, disabledNativeSlugs, visibleNativeSlugs, desktopVisibleNativeSlugs, nativeModelRows, applyNativeVisibility, observedAccountBoundNativeEntries, observedAccountBoundNativeOpenAiSlugs, upstreamNativeEntry, nativeOpenAiSlugs, listCatalogNativeSlugs, nativeInputModalities, nativeReasoningEfforts, nativeDefaultReasoningEffort, shouldIncludeAccountBoundNativeOpenAi, shouldIncludeNativeOpenAi } from "./catalog/metadata";
export { accountBoundNativeOpenAiSlugs, accountBoundNativeOpenAiSlugsBySelector, CODEX_NATIVE_ALIAS_CATALOG_KIND, NATIVE_DAYBREAK_BLUE_MODEL, NATIVE_OPENAI_CAPABILITY_ALIAS_MODELS, NATIVE_OPENAI_MODELS, configuredNativeAliasSlugs, desktopAllowlistSuppressedNativeSlugs, isNativeAliasCatalogEntry, isNativeOpenAiCapabilityAliasModel, nativeOpenAiCapabilitySourceSlug, nativeOpenAiContextWindow, disabledNativeSlugs, visibleNativeSlugs, desktopVisibleNativeSlugs, nativeModelRows, applyNativeVisibility, observedAccountBoundNativeEntries, observedAccountBoundNativeOpenAiSlugs, upstreamNativeEntry, nativeOpenAiSlugs, listCatalogNativeSlugs, nativeInputModalities, nativeReasoningEfforts, nativeDefaultReasoningEffort, shouldIncludeAccountBoundNativeOpenAi, shouldIncludeNativeOpenAi } from "./catalog/metadata";
export { isSpawnableCodexCandidate, codexExecInvocation, loadBundledCodexCatalog, materializeBundledCodexCatalog, loadCatalogTemplate } from "./catalog/bundled";
export { nativeEffortClamp, shouldApplyNativeEffortClamp, catalogModelEfforts, codexSupportedReasoningEfforts, clampedDefaultEffort, clampEntryToCodexSupportedEfforts, clampCatalogModelsToCodexSupport } from "./catalog/effort";
export { applyProviderConfigHints, isDatedVariantId, filterCatalogVisibleModels, gatherRoutedModels, clearGatherRoutedModelsInflight, augmentRoutedModelsWithRegistryOpenAiApiRows, augmentRoutedModelsWithMetadata, resolveComboCatalogMember, configuredComboTargetModelsByProvider } from "./catalog/provider-fetch";
Expand Down
3 changes: 2 additions & 1 deletion src/codex/catalog/effort.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import upstreamModelsSnapshot from "../data/upstream-models.json";
import { readCatalog, readCodexCatalogPath } from "./parsing";
import type { CatalogModel, RawEntry } from "./parsing";
import { UPSTREAM_NATIVE_ENTRIES } from "./metadata";
import { nativeOpenAiCapabilitySourceSlug } from "./native-models";
import { loadBundledCodexCatalog } from "./bundled";
import type { BundledCatalogDeps, ReadonlyRawCatalog } from "./bundled";
import { deriveEntry } from "./sync";
Expand Down Expand Up @@ -180,7 +181,7 @@ export function applyReasoningLevels(
}

export function isGpt56NativeSlug(slug: string): boolean {
return !slug.includes("/") && slug.startsWith("gpt-5.6-");
return !slug.includes("/") && nativeOpenAiCapabilitySourceSlug(slug).startsWith("gpt-5.6-");
}

export function ensureGpt56ReasoningLevels(entry: RawEntry): void {
Expand Down
Loading
Loading