mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-08 00:02:20 +03:00
aa7b3913862cf2f32a5cd7f09c8ffb9be87c19d0
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4a3dcf6b0b |
fix(routing): only let Codex-native bare ids preempt a provider when codex is active (#9447)
* fix(routing): only let Codex-native bare ids preempt a provider when codex is active #9275 widened CODEX_NATIVE_UNPREFIXED_MODELS from a single id to gpt-5.5 plus the gpt-5.6-sol/terra/luna tiers, so bare Codex CLI ids would reach the ChatGPT subscription instead of fanning out to whichever provider won the inference race. The early return it added never consulted the active-provider set, which made the codex-only guard 30 lines below unreachable for every id in the set: if (CODEX_NATIVE_UNPREFIXED_MODELS.has(modelId)) return { provider: "codex", ... } An OpenAI-only install therefore had bare gpt-5.5 routed to codex and failed with 'no active credentials for provider: codex' on a model OpenAI serves, and an install whose codex connection was merely inactive failed identically. This also silently reverted #5887's compatibility boundary. The preference now only PREEMPTS another provider when a codex connection is active. Ids that no other provider catalogs (codex-auto-review) still resolve to codex with no connection at all — there is nothing to preempt and 'no codex credentials' is the honest error. With codex active the preference still beats OpenAI, which is the point of #9275, and an explicit openai/ prefix overrides it either way. Tests: the three assertions that encode the intended #9275 change now expect codex (plus a new one pinning the explicit-prefix override); the rest were already correct and pass again untouched. Adds a regression test for the OpenAI-only case. * docs(changelog): correct fragment id to #9447 * test(routing): seed an active codex connection in the bare-precedence guards The two files #9275 added assert that bare gpt-5.5 / gpt-5.6-sol reach codex, but they ran against an empty database — so they also pinned 'codex wins with no codex connection at all', which is the regression #9447 removes. That put them in direct contradiction with plan3-p0 / chat-helpers / codex-gpt55-routing-5887, which assert openai for the very same input: no implementation could satisfy both, which is why the release could not go green. Seeding an active codex connection keeps the contract these files were written to guard (codex beats openai for a Codex-native bare id) while dropping the accidental 'even with no codex configured' half. Cases that need no connection are left as they were: the tier-only ids and codex-auto-review have no alternative provider to preempt, and the explicit-prefix overrides are unaffected. --------- Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com> |
||
|
|
62415e5e67 |
fix: infer bare models from active synced catalogs (#7028)
* fix: infer bare models from active synced catalogs Bare Codex model IDs from Codex CLI can be newer than the static registry even though synchronized connection catalogs advertise and route them with an explicit prefix. Merge exact active synced-provider candidates into bare-model inference and prefer Codex when that active subscription supports the model, replacing the GPT-5.5-specific preference set from #2054. Constraint: Explicit provider prefixes remain authoritative and unknown GPT models are not guessed as Codex. Rejected: Add gpt-5.6-sol to the hardcoded preference set | repeats #2054 and fails on the next model release. Confidence: high Scope-risk: moderate Directive: Keep bare-model inference aligned with active synchronized connection catalogs. Tested: Prettier; typecheck:core; ESLint; 31 focused routing/database tests; focused c8 run. Not-tested: Full unit suite is blocked locally by DuckDuckGo network timeout and a pre-existing WebDAV path-space URL encoding failure. Related: https://github.com/diegosouzapw/OmniRoute/pull/2054 * fix: preserve stable overlap routing Synchronized catalog discovery should repair unambiguous Codex-only model routing without turning provider inference into a global quota preference. Restore the historical OpenAI default when both providers support a bare model, while retaining automatic Codex routing when only its active catalog advertises a future model. Constraint: Explicit provider prefixes remain authoritative and bare-model inference must remain backward compatible. Rejected: Always prefer Codex when connected | quota optimization belongs in auto routing or an explicit setting, not provider inference. Confidence: high Scope-risk: narrow Directive: Do not change overlapping bare-model precedence without an explicit routing-policy setting. Tested: TDD red run with 3 expected overlap failures; 32 focused tests; typecheck:core; ESLint; Prettier; git diff --check. Related: https://github.com/diegosouzapw/OmniRoute/pull/2054 Related: https://github.com/diegosouzapw/OmniRoute/pull/7028 * test: prove routing across released and future catalogs Exercise the v3.8.48 GPT-5.6 dual-provider catalog directly and add a non-GPT Anthropic model that exists only in synchronized connection data. This documents that the fix covers the released Codex regression and future uniquely attributable models without claiming to resolve intentional multi-provider ambiguity. Constraint: GPT-5.6 remains OpenAI-default when both providers are active. Rejected: Describe the fix as universal model mapping | provider aliases and intentional same-ID ambiguity are separate concerns. Confidence: high Scope-risk: narrow Directive: Keep one non-GPT synchronized-only case so the resolver remains data-driven rather than GPT-specific. Tested: 37 focused routing/catalog/database tests; typecheck:core; ESLint; Prettier; git diff --check. Related: https://github.com/diegosouzapw/OmniRoute/releases/tag/v3.8.48 Related: https://github.com/diegosouzapw/OmniRoute/pull/7028 * Keep PR validation deterministic across shallow checkouts The routing change added one export line to a frozen barrel, so reclaim an existing separator instead of expanding its size. The #6634 regression test now uses in-memory base/head sources that prove both tautology counts grow without assuming origin/main exists in pull-request checkouts. Constraint: GitHub PR jobs use fetch-depth 1 and do not create origin/main. Rejected: Fetch full history in every unit shard | adds repeated network cost and still lets the fixture go stale Confidence: high Scope-risk: narrow Reversibility: clean Directive: Keep test-masking unit fixtures independent of remote Git refs. Tested: npm run lint; npm run check:file-size; npm run typecheck:core; 57 focused test-masking tests Not-tested: Fresh GitHub Actions run pending; full macOS shard has 13 unrelated environment-sensitive failures * Preserve improved branch coverage in the quality gate The now-unblocked coverage pipeline reports 78.11% branch coverage, more than five points above the frozen baseline. Tighten the baseline to the measured value so the ratchet retains that improvement instead of rejecting the PR. Constraint: The blocking quality gate requires baseline tightening when an improvement exceeds tightenSlack. Rejected: Increase the slack or bypass the gate | would discard a verified coverage improvement Confidence: high Scope-risk: narrow Reversibility: clean Directive: Lower this baseline only when a reviewed coverage regression is intentionally accepted. Tested: quality ratchet with the CI-reported 78.11 branch metric; Prettier; git diff --check Not-tested: Fresh GitHub Actions run pending --------- Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> |