Repository navigation
[Bug] Codex 0.153.4 rejects 'minimal'/'none' on gpt-6-astra mapped custom models #3775
Description
Proven native-alias normalization landed; reported gateway case remains open
#3804 (0a4e4bc9bf) normalizes custom reasoning lists only for capability-backed canonical Codex-forward aliases. Arbitrary YYLJ gateway capability and the reported Desktop-version case remain unverified.
Verified against dev 5759d9ea2f1e7281cdc01eb9628f2e0a123fb59c. Original report by @leonclab. The attribution record was added in #3811.
Client or integration
Codex App
Area
Catalog / models
Summary
In the latest Codex Desktop runtime (0.153.4, Darwin arm64), the native binary strictly validates supported reasoning efforts for gpt-6-astra and only permits ['low', 'medium', 'high', 'xhigh', 'max']. Supplying minimal or none causes Codex to immediately reject the request before dispatch with:
Unsupported value: 'minimal' is not supported with the 'gpt-6-astra' model. Supported values are: 'low', 'medium', 'high', 'xhigh', and 'max'.
While OpenCodex logs [opencodex] Removed unsupported reasoning efforts: minimal, none, custom models mapped to Astra (e.g., forward proxy YYLJ/gpt-6-astra with legacy customModels[*].reasoningEfforts containing minimal or none) still have those unsupported efforts preserved in opencodex-catalog.json and turn execution contexts, triggering client-side rejection.
Reproduction
- Configure a custom model in
~/.opencodex/config.jsonpointing to an Astra upstream:
{
"provider": "YYLJ",
"modelId": "gpt-6-astra",
"reasoningEfforts": ["none", "minimal", "low", "medium", "high", "xhigh", "max"]
}- Run
ocx sync. - In Codex Desktop (version 0.153.4), start a turn or assign a subtask with reasoning effort
minimal. - Observe the immediate 400 error:
{"type":"error","error":{"type":"invalid_request_error","code":"unsupported_value","message":"Unsupported value: 'minimal' is not supported with the 'gpt-6-astra' model. Supported values are: 'low', 'medium', 'high', 'xhigh', and 'max'.","param":"reasoning.effort"},"status":400}
Version
@bitkyc08/opencodex 2.43.0
Operating system
macOS 15.5 (Darwin arm64)
Provider and model
custom / gpt-6-astra
Logs or error output
[opencodex] Removed unsupported reasoning efforts: minimal, none
Unsupported value: 'minimal' is not supported with the 'gpt-6-astra' model. Supported values are: 'low', 'medium', 'high', 'xhigh', and 'max'.Redacted configuration
{
"customModels": [
{
"provider": "YYLJ",
"modelId": "gpt-6-astra",
"reasoningEfforts": ["none", "minimal", "low", "medium", "high", "xhigh", "max"]
}
]
}Checks
- I searched existing issues and documentation.
- I removed secrets, tokens, account details, request credentials, and personal data.
Activity
lidge-jun commentedon Sep 6, 2026
리뷰 · 우선순위 71 / 80
이 이슈는 Codex Desktop 0.153.4가 네이티브
gpt-6-astra에 대해 reasoning effort를low / medium / high / xhigh / max만 허용하는데, OpenCodex 쪽 custom model이 Astra로 매핑되면서minimal·none이 카탈로그와 턴 실행 맥락에 남는 버그입니다. 재현은 명확합니다.customModels에modelId: "gpt-6-astra"와 레거시 사다리["none","minimal","low",...]를 넣고ocx sync한 뒤 Desktop에서minimal로 턴을 시작하면, 디스패치 전에 바로unsupported_value400이 납니다. 로그에는[opencodex] Removed unsupported reasoning efforts: minimal, none이 찍히는데도, 리포터 말대로 커스텀 매핑 쪽에는 그 값이 남아 Desktop이 거절합니다. “클램프가 돌았다”는 신호와 “피커/턴에는 아직 있다”는 결과가 같이 보이는 상태입니다.지금
devHEAD는bd1cda99c(package2.44.0,#3768credential 선택 공유까지 들어간 release-244)입니다. 관련 코드는 이미 레포에 있습니다.src/codex/catalog/provider-fetch.ts는 커스텀 행이reasoningEfforts배열을 선언하면 그대로 복사합니다(대략 L2413). 네이티브 별칭이면codexForwardNativeCapabilityAlias도 붙입니다.src/codex/catalog/sync.ts의deriveEntry는 그 별칭이 있으면applyReasoningLevels(..., preserveExact=true)로 사다리를 정확히 보존합니다(대략 L364–L368). 나중에clampCatalogModelsToCodexSupport(sync.tsL1857, 구현은src/codex/catalog/effort.ts)가 “Codex 번들 카탈로그 전체에서 관측한 effort 합집합”으로 전역 클램프를 하고, 제거분은formatClampLogLines(src/codex/runtime.tsL665–L668)로 로그합니다. 문제는 이 전역 합집합이 모델별 Astra 허용 목록이 아니라는 점입니다. 어떤 다른 네이티브가 아직minimal/none을 갖고 있으면 Astra 매핑 커스텀 행에서도 안 깎일 수 있고, 반대로 전역에서 깎여 로그가 나와도 요청 경로·설정 원본·다른 쓰기 경로에 값이 남아 Desktop이 거절할 수 있습니다.더 직접적인 구멍도 있습니다.
nativeEffortClamp/shouldApplyNativeEffortClamp(effort.tsL52–L86)는 요청 model id에/가 있으면 아예 스킵합니다. 그래서YYLJ/gpt-6-astra같은 routed slug는 요청 시점 네이티브 클램프를 못 받습니다. 핀된 업스트림src/codex/data/upstream-models.json의 Astra 사다리는low..max,ultra(defaultlow)인데, 리포터가 본 0.153.4 에러 문구는ultra도 없고minimal/none도 없습니다. 즉 “핀 데이터 / 라이브 Desktop / 커스텀 명시 사다리” 세 층이 어긋쳐 있습니다. types/config 분할로 무효화될 이슈가 아니고, 카탈로그·effort 정합성 버그로 수락 가치가 큽니다. 리포터 버전은 2.43.0이지만 HEAD 2.44.0에서도 위 경로 구조는 그대로라 재확인이 필요합니다.경로
src/codex/catalog/provider-fetch.ts커스텀reasoningEfforts복사 - 명시 사다리를 네이티브 Astra 허용 목록과 교집합하지 않고 그대로 넣음경로
src/codex/catalog/sync.tsderiveEntrypreserveExact -codexForwardNativeCapabilityAlias일 때 커스텀 사다리를 정확히 보존해minimal/none이 카탈로그 행에 남을 수 있음경로
src/codex/catalog/effort.tsclampCatalogModelsToCodexSupport- 전역 Codex 어휘 합집합만 보고 모델별 Astra 허용 목록과 교차하지 않음경로
src/codex/catalog/effort.tsnativeEffortClamp/shouldApplyNativeEffortClamp- routedprovider/modelslug는 요청 시점 클램프에서 제외됨경로
src/codex/data/upstream-models.jsongpt-6-astra- 핀 사다리에ultra가 있는데 0.153.4 에러 문구의 허용 목록과 불일치 가능경로
src/codex/runtime.tsformatClampLogLines- 전역 제거 로그만으로 “커스텀 매핑 행까지 깨끗하다”고 보장하지 못함메인테이너의 판단이 필요한 지점
nativeReasoningEfforts(modelId)또는 라이브 관측 사다리와 교집합”할지, “요청 시점 routed slug에도 native-alias clamp를 적용”할지, 둘 다 할지customModels.reasoningEfforts에 사용자가 넣은minimal/none을 조용히 깎을지, sync/doctor 경고 후 깎을지(설정 원본을 바꿀지 카탈로그 투영만 바꿀지)upstream-models.jsonAstra 사다리(ultra포함)를 0.153.4 실측 목록에 맞춰 내릴지, ultra는 별건으로 둘지ocx sync후opencodex-catalog.json의YYLJ/gpt-6-astra(또는 동등 slug)supported_reasoning_levels에minimal/none이 없음을 단언하는 통합 테스트로 넣을지너의 추천
수락하세요.
codexForwardNativeCapabilityAlias가 켜진 커스텀/포워드 행은 sync 때reasoningEfforts를 네이티브 Astra(또는 해당 alias) 허용 사다리와 반드시 교집합하고, routed slug에도 같은 교집합이 요청 경로에 적용되게 하세요. 전역clampCatalogModelsToCodexSupport만으로 “모델별 Desktop 거절”을 막았다고 보지 마세요. 회귀 테스트는 sync 결과 카탈로그 행에minimal/none이 없고, Desktop이 받는 effort 목록이low..max(필요 시 실측 ultra 정책)만 남는지 고정하면 됩니다. release-244 방향과도 맞고, 작은 범위로 빨리 들어갈 수 있습니다.이 댓글은 grok-bot이 작성했습니다
lidge-jun commentedon Sep 6, 2026
Track 2 delivered a scoped part in #3804: explicit reasoning lists for existing, capability-backed canonical Codex-forward aliases are intersected with the proven native ladder; defaults stay in the resulting list, explicit empty lists remain empty, and repeat sync does not re-add max.
Keeping this issue open: arbitrary gateway capability and the reported Desktop-version-specific behavior have not been verified. The change must not be read as proof that the reported gateway/Desktop case is fixed.
fix(catalog): bound proven native custom reasoning efforts [skip ci]
Merge pull request #4500 from lidge-jun/codex/260913-i3-carry-4467-de…
lidge-jun commentedon Sep 13, 2026
Fixed on dev via #4499, merged inside lane I3's tip #4500 (merge commit 94063d0, verified as an ancestor of origin/dev).
Your report turned out to be the missing evidence rather than a duplicate. #3804 had already bounded canonical
openaiCodex-forward custom Astra rows, but it deliberately left unproven gateways unbounded and said Desktop gateway evidence was still required. Desktop naming'gpt-6-astra'in the 400 — not the provider prefix — is that evidence, which is whyYYLJ/gpt-6-astrawas still failing.The fix intersects an explicit custom
reasoningEffortslist with pinned native metadata whenever the model id carries native capability metadata, gateways included. Two things deliberately did not change: full native identity (Responses Lite, multi-agent, context windows, display names) still requires the canonicalopenaiforward destination, and stored configuration is untouched.For the record, since they look related and are not: #4349 (effort ceilings enforced independently of pins) and #4409 (routed effort ladders from models.dev) do not fix this catalog projection, and request-time
nativeEffortClampstill skips routed slugs.Verified with
client_version=0.153.4discovery bounding bothopenai/gpt-6-astraandYYLJ/gpt-6-astrato["low"]. Closing manually because this merges into dev rather than the default branch.fix(catalog): bound custom native-id effort lists on gateways [skip ci]
fix(catalog): bound proven native custom reasoning efforts [skip ci]
fix(catalog): bound custom native-id effort lists on gateways [skip ci]
Merge pull request lidge-jun#4500 from lidge-jun/codex/260913-i3-carr…