Repository navigation
Conversation
fenix007
pushed a commit
to fenix007/OmniRoute
that referenced
this pull request
Sep 4, 2026
Strip unsupported sampling parameters from native Codex Responses passthrough and reject malformed chat message entries before provider translation. Ports upstream PRs cheaper-inference#12585 and cheaper-inference#12644 onto the frozen v3.8.48 base. Co-Authored-By: OpenAI GPT-5 <noreply@openai.com>
diegosouzapw
added a commit
that referenced
this pull request
Sep 17, 2026
) * fix(chat): reject null/non-object entries in messages[] (#12643) A messages array containing null (or any non-object entry, e.g. [null] or [42]) passed every existing entry guard in chat.ts (#5110/#6402/#6407/#6412) and reached downstream translators/session helpers that read `.role` / `.content` directly off each entry (openai-to-claude.ts, sessionManager.ts, contextManager.ts's fixToolPairs), crashing with a raw TypeError and surfacing as an HTTP 500 instead of a clean 400. The route's Zod schema is intentionally wide (z.array(z.unknown())), so this shape check belongs in the handler's guard chain. Adds one more entry-shape guard clause to the same chokepoint, rejecting the request with a clear 400 before any routing or upstream call. Regression test: tests/unit/chat-messages-entry-objects-12643.test.ts PR #12644 (@soroush5) proposed this exact fix but was closed without merging on 2026-09-12; this re-implements it fresh against the current tip using the same guard shape and error message. Originally-proposed-by: @soroush5 in #12644 Co-authored-by: soroush5 <mrsoroushahmadi@gmail.com> * chore(quality): refix the chat.ts ceiling for the merged tree This branch rebaselined src/sse/handlers/chat.ts against an older tip. After merging the current release tip the combined file is 2520 lines, so the 2500 ceiling no longer covers it. The tip alone is already at 2509 — above the 2500 this PR had frozen — so most of the gap is inherited, not introduced here. This PR's own contribution is the +10 of the messages-entry guard itself. Ceiling refixed at the value the gate reports for the merged tree. --------- Co-authored-by: soroush5 <mrsoroushahmadi@gmail.com>
muhamadgalihsaputra
pushed a commit
to niyatna/NiyatnaRoute
that referenced
this pull request
Sep 27, 2026
…rence#12643) (cheaper-inference#13755) * fix(chat): reject null/non-object entries in messages[] (cheaper-inference#12643) A messages array containing null (or any non-object entry, e.g. [null] or [42]) passed every existing entry guard in chat.ts (cheaper-inference#5110/cheaper-inference#6402/cheaper-inference#6407/cheaper-inference#6412) and reached downstream translators/session helpers that read `.role` / `.content` directly off each entry (openai-to-claude.ts, sessionManager.ts, contextManager.ts's fixToolPairs), crashing with a raw TypeError and surfacing as an HTTP 500 instead of a clean 400. The route's Zod schema is intentionally wide (z.array(z.unknown())), so this shape check belongs in the handler's guard chain. Adds one more entry-shape guard clause to the same chokepoint, rejecting the request with a clear 400 before any routing or upstream call. Regression test: tests/unit/chat-messages-entry-objects-12643.test.ts PR cheaper-inference#12644 (@soroush5) proposed this exact fix but was closed without merging on 2026-09-12; this re-implements it fresh against the current tip using the same guard shape and error message. Originally-proposed-by: @soroush5 in cheaper-inference#12644 Co-authored-by: soroush5 <mrsoroushahmadi@gmail.com> * chore(quality): refix the chat.ts ceiling for the merged tree This branch rebaselined src/sse/handlers/chat.ts against an older tip. After merging the current release tip the combined file is 2520 lines, so the 2500 ceiling no longer covers it. The tip alone is already at 2509 — above the 2500 this PR had frozen — so most of the gap is inherited, not introduced here. This PR's own contribution is the +10 of the messages-entry guard itself. Ceiling refixed at the value the gate reports for the merged tree. --------- Co-authored-by: soroush5 <mrsoroushahmadi@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A
messagesarray containingnull(or any non-object entry) passed every entry guard and crashed translators with a rawTypeError, surfacing as HTTP 500. The fix extends the entry-guard family (#5110/#6402/#6407/#6412) with a 400 for non-object entries.Related Issues
Fixes #12643
Validation
node --import tsx/esm --test tests/unit/chat-messages-entry-objects-12643.test.ts— 3 passed (2 fail without the fix, healthy passes both ways)chat-messages-validation-6402+chat-non-string-model-6407— 22 passedrelease/v3.8.51)Tests Added Or Updated
tests/unit/chat-messages-entry-objects-12643.test.ts: null entry, string/number entries → 400 + no upstream call; well-formed → passes the guardchangelog.d/fixes/12643-messages-entry-guard.md: changelog fragmentCoverage Notes
Guard-only change: every new branch (null, non-object, array item) is hit by the new tests.
Reviewer Notes
Follows the exact pattern of the sibling guards in the same function. The route schema (
z.array(z.unknown())) is intentionally left wide — rejection happens here with a clear message, same as #6402.