Repository navigation
Normalize max reasoning effort for Codex routing - #1744
diegosouzapw merged 2 commits into
Conversation
There was a problem hiding this comment.
Code Review
This pull request standardizes the "max" reasoning effort tier by mapping it to "xhigh" across the Codex executor, Claude-to-OpenAI translator, and OpenAI Responses translator. It also updates the thinking budget logic and includes comprehensive unit tests for these changes. The reviewer suggested adding string trimming during normalization in the translators to ensure consistency with the Codex implementation and improve robustness against whitespace in client input.
| function normalizeOpenAIReasoningEffort(effort: unknown): string | undefined { | ||
| if (typeof effort !== "string") return undefined; | ||
| const normalized = effort.toLowerCase(); | ||
| if (normalized === "max") return "xhigh"; | ||
| return normalized || undefined; | ||
| } |
There was a problem hiding this comment.
For robustness and consistency with the implementation in open-sse/executors/codex.ts, it is recommended to include .trim() when normalizing the effort string. This ensures that any leading or trailing whitespace provided by the client doesn't bypass the normalization logic.
| function normalizeOpenAIReasoningEffort(effort: unknown): string | undefined { | |
| if (typeof effort !== "string") return undefined; | |
| const normalized = effort.toLowerCase(); | |
| if (normalized === "max") return "xhigh"; | |
| return normalized || undefined; | |
| } | |
| function normalizeOpenAIReasoningEffort(effort: unknown): string | undefined { | |
| if (typeof effort !== "string") return undefined; | |
| const normalized = effort.trim().toLowerCase(); | |
| if (normalized === "max") return "xhigh"; | |
| return normalized || undefined; | |
| } |
| function normalizeResponsesReasoningEffort(value: unknown): string { | ||
| const effort = toString(value).toLowerCase(); | ||
| return effort === "max" ? "xhigh" : effort; | ||
| } |
There was a problem hiding this comment.
To ensure consistency across the codebase and improve robustness against client input variations, consider adding .trim() to the normalization logic here as well. This aligns with the behavior in open-sse/executors/codex.ts.
| function normalizeResponsesReasoningEffort(value: unknown): string { | |
| const effort = toString(value).toLowerCase(); | |
| return effort === "max" ? "xhigh" : effort; | |
| } | |
| function normalizeResponsesReasoningEffort(value: unknown): string { | |
| const effort = toString(value).trim().toLowerCase(); | |
| return effort === "max" ? "xhigh" : effort; | |
| } |
d98ca5a
into
cheaper-inference:release/v3.7.4
|
Thanks for this great contribution! 🎉 It's now officially merged into the release/v3.7.4 branch and will be part of the next release. We appreciate your effort! |
* chore(release): v3.7.4 — version bump, openapi and changelog sync * fix: preserve previous_response_id and conversation_id fields on empty input array (#1729) * fix: bypass UI validation block for optional API keys and fix string fallback typing (#1721) * fix(proxy): disable HTTP keep-alive and pipelining in Undici proxy dispatcher to prevent socket hang up * feat(proxy): implement bulk proxy import via pipe-delimited parser with update-or-create logic * docs: update changelog for v3.7.4 fixes and proxy features * test: update responses store expectations for empty input arrays * feat(pwa): add fullscreen installable PWA with manifest, service worker, and cross-platform app icons. (#1728) Integrated into release/v3.7.4 * Fix image provider validation and Stability image requests (#1726) Integrated into release/v3.7.4 * docs: add PR 1726 and PR 1728 to v3.7.4 changelog * fix(security): replace insecure Math.random with crypto.getRandomValues for fallback UUID generation * fix(migrations): intercept 007 migration to use IF NOT EXISTS logic on fresh installs Fixes #1733 * test: fix typescript compilation errors in unit tests * fix(db): reconcile legacy reasoning cache migration * chore(release): bump to v3.7.4 — changelog, docs, version sync * fix(cc-compatible): preserve Claude Code system skeleton (#1740) Integrated into release/v3.7.4 * docs(changelog): update for PR #1740 merge * docs(changelog): include workflow updates * fix(db): reconcile legacy reasoning cache migration (#1734) Integrated into release/v3.7.4 * Add endpoint tunnel visibility settings (#1743) Integrated into release/v3.7.4 * Normalize max reasoning effort for Codex routing (#1744) Integrated into release/v3.7.4 * Fix Claude Code gateway config helper (#1745) Integrated into release/v3.7.4 * Refresh CLI fingerprint provider profiles (#1746) Integrated into release/v3.7.4 * Integrated into release/v3.7.4 (PR #1742) * docs(changelog): update for PRs 1742-1746 --------- Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com> Co-authored-by: Yash Ghule <y.ghule77@gmail.com> Co-authored-by: backryun <bakryun0718@proton.me> Co-authored-by: dhaern <manker_lol@hotmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Duncan L <leungd@gmail.com>
* chore(release): v3.7.4 — version bump, openapi and changelog sync * fix: preserve previous_response_id and conversation_id fields on empty input array (cheaper-inference#1729) * fix: bypass UI validation block for optional API keys and fix string fallback typing (cheaper-inference#1721) * fix(proxy): disable HTTP keep-alive and pipelining in Undici proxy dispatcher to prevent socket hang up * feat(proxy): implement bulk proxy import via pipe-delimited parser with update-or-create logic * docs: update changelog for v3.7.4 fixes and proxy features * test: update responses store expectations for empty input arrays * feat(pwa): add fullscreen installable PWA with manifest, service worker, and cross-platform app icons. (cheaper-inference#1728) Integrated into release/v3.7.4 * Fix image provider validation and Stability image requests (cheaper-inference#1726) Integrated into release/v3.7.4 * docs: add PR 1726 and PR 1728 to v3.7.4 changelog * fix(security): replace insecure Math.random with crypto.getRandomValues for fallback UUID generation * fix(migrations): intercept 007 migration to use IF NOT EXISTS logic on fresh installs Fixes cheaper-inference#1733 * test: fix typescript compilation errors in unit tests * fix(db): reconcile legacy reasoning cache migration * chore(release): bump to v3.7.4 — changelog, docs, version sync * fix(cc-compatible): preserve Claude Code system skeleton (cheaper-inference#1740) Integrated into release/v3.7.4 * docs(changelog): update for PR cheaper-inference#1740 merge * docs(changelog): include workflow updates * fix(db): reconcile legacy reasoning cache migration (cheaper-inference#1734) Integrated into release/v3.7.4 * Add endpoint tunnel visibility settings (cheaper-inference#1743) Integrated into release/v3.7.4 * Normalize max reasoning effort for Codex routing (cheaper-inference#1744) Integrated into release/v3.7.4 * Fix Claude Code gateway config helper (cheaper-inference#1745) Integrated into release/v3.7.4 * Refresh CLI fingerprint provider profiles (cheaper-inference#1746) Integrated into release/v3.7.4 * Integrated into release/v3.7.4 (PR cheaper-inference#1742) * docs(changelog): update for PRs 1742-1746 --------- Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com> Co-authored-by: Yash Ghule <y.ghule77@gmail.com> Co-authored-by: backryun <bakryun0718@proton.me> Co-authored-by: dhaern <manker_lol@hotmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Duncan L <leungd@gmail.com>
* chore(release): v3.7.4 — version bump, openapi and changelog sync * fix: preserve previous_response_id and conversation_id fields on empty input array (cheaper-inference#1729) * fix: bypass UI validation block for optional API keys and fix string fallback typing (cheaper-inference#1721) * fix(proxy): disable HTTP keep-alive and pipelining in Undici proxy dispatcher to prevent socket hang up * feat(proxy): implement bulk proxy import via pipe-delimited parser with update-or-create logic * docs: update changelog for v3.7.4 fixes and proxy features * test: update responses store expectations for empty input arrays * feat(pwa): add fullscreen installable PWA with manifest, service worker, and cross-platform app icons. (cheaper-inference#1728) Integrated into release/v3.7.4 * Fix image provider validation and Stability image requests (cheaper-inference#1726) Integrated into release/v3.7.4 * docs: add PR 1726 and PR 1728 to v3.7.4 changelog * fix(security): replace insecure Math.random with crypto.getRandomValues for fallback UUID generation * fix(migrations): intercept 007 migration to use IF NOT EXISTS logic on fresh installs Fixes cheaper-inference#1733 * test: fix typescript compilation errors in unit tests * fix(db): reconcile legacy reasoning cache migration * chore(release): bump to v3.7.4 — changelog, docs, version sync * fix(cc-compatible): preserve Claude Code system skeleton (cheaper-inference#1740) Integrated into release/v3.7.4 * docs(changelog): update for PR cheaper-inference#1740 merge * docs(changelog): include workflow updates * fix(db): reconcile legacy reasoning cache migration (cheaper-inference#1734) Integrated into release/v3.7.4 * Add endpoint tunnel visibility settings (cheaper-inference#1743) Integrated into release/v3.7.4 * Normalize max reasoning effort for Codex routing (cheaper-inference#1744) Integrated into release/v3.7.4 * Fix Claude Code gateway config helper (cheaper-inference#1745) Integrated into release/v3.7.4 * Refresh CLI fingerprint provider profiles (cheaper-inference#1746) Integrated into release/v3.7.4 * Integrated into release/v3.7.4 (PR cheaper-inference#1742) * docs(changelog): update for PRs 1742-1746 --------- Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com> Co-authored-by: Yash Ghule <y.ghule77@gmail.com> Co-authored-by: backryun <bakryun0718@proton.me> Co-authored-by: dhaern <manker_lol@hotmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Duncan L <leungd@gmail.com>
* chore(release): v3.7.4 — version bump, openapi and changelog sync * fix: preserve previous_response_id and conversation_id fields on empty input array (cheaper-inference#1729) * fix: bypass UI validation block for optional API keys and fix string fallback typing (cheaper-inference#1721) * fix(proxy): disable HTTP keep-alive and pipelining in Undici proxy dispatcher to prevent socket hang up * feat(proxy): implement bulk proxy import via pipe-delimited parser with update-or-create logic * docs: update changelog for v3.7.4 fixes and proxy features * test: update responses store expectations for empty input arrays * feat(pwa): add fullscreen installable PWA with manifest, service worker, and cross-platform app icons. (cheaper-inference#1728) Integrated into release/v3.7.4 * Fix image provider validation and Stability image requests (cheaper-inference#1726) Integrated into release/v3.7.4 * docs: add PR 1726 and PR 1728 to v3.7.4 changelog * fix(security): replace insecure Math.random with crypto.getRandomValues for fallback UUID generation * fix(migrations): intercept 007 migration to use IF NOT EXISTS logic on fresh installs Fixes cheaper-inference#1733 * test: fix typescript compilation errors in unit tests * fix(db): reconcile legacy reasoning cache migration * chore(release): bump to v3.7.4 — changelog, docs, version sync * fix(cc-compatible): preserve Claude Code system skeleton (cheaper-inference#1740) Integrated into release/v3.7.4 * docs(changelog): update for PR cheaper-inference#1740 merge * docs(changelog): include workflow updates * fix(db): reconcile legacy reasoning cache migration (cheaper-inference#1734) Integrated into release/v3.7.4 * Add endpoint tunnel visibility settings (cheaper-inference#1743) Integrated into release/v3.7.4 * Normalize max reasoning effort for Codex routing (cheaper-inference#1744) Integrated into release/v3.7.4 * Fix Claude Code gateway config helper (cheaper-inference#1745) Integrated into release/v3.7.4 * Refresh CLI fingerprint provider profiles (cheaper-inference#1746) Integrated into release/v3.7.4 * Integrated into release/v3.7.4 (PR cheaper-inference#1742) * docs(changelog): update for PRs 1742-1746 --------- Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com> Co-authored-by: Yash Ghule <y.ghule77@gmail.com> Co-authored-by: backryun <bakryun0718@proton.me> Co-authored-by: dhaern <manker_lol@hotmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Duncan L <leungd@gmail.com>
Summary
maxtoxhighacross Codex-facing translation pathsWhy
Claude Code can emit or imply top-tier effort as
max. Codex now expectsxhigh, somaxleaks cause 400 errors like:Invalid value: 'max'. Supported values are: 'none', 'minimal', 'low', 'medium', 'high', and 'xhigh'.Testing
npx --yes tsx --test tests/unit/translator-openai-responses-req.test.tsPOST /v1/chat/completionsusingreasoning_effort: "max"after patching the running install