Repository navigation
fix(routing): select concrete free model groups #971
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 116 commits
Commits
Show all changes
147 commits
Select commit
Hold shift + click to select a range
8a90464
fix(routing): select concrete free model groups
seonghobae 4a5122b
fix(discovery): remove default network deadlines
seonghobae a367701
fix(groups): preserve exact model identity
seonghobae 684f188
docs(gaps): align routing baseline with no-timeout policy
seonghobae a331beb
docs(gaps): distinguish implementation revision from PR head
seonghobae 5abd66e
fix(routing): cancel raced provider transports
seonghobae 643f02b
fix(discovery): migrate exact model identities
seonghobae 248ed66
fix(routing): finalize race and legacy sync once
seonghobae fec7ac5
fix(discovery): activate refreshed legacy endpoint
seonghobae 85216e7
fix(routing): preserve legacy discovery contracts
seonghobae 5e638a7
fix(discovery): activate migrated legacy agents
seonghobae 0a49fc3
fix(discovery): activate only discovered legacy agents
seonghobae 9348385
fix(discovery): skip manual legacy id collisions
seonghobae 81f3a24
fix(routing): remove readiness network deadlines
seonghobae 94d3ca3
fix(routing): preserve cancellable no-timeout transport
seonghobae f185f90
fix(transport): make unbounded setup cancellable
seonghobae f993c2a
fix(transport): bound cancellable resolver ownership
seonghobae 2183040
fix(discovery): release failed resolver ownership
seonghobae 51a3642
fix(readiness): keep slow probes nonblocking
seonghobae 011083c
fix(discovery): protect operator-owned agent identities
seonghobae dab4246
fix(discovery): preflight durable identity conflicts
seonghobae c4e7ad6
fix(discovery): canonicalize Unicode legacy IDs
seonghobae e2deddf
ci(opencode): wait without a readiness deadline
seonghobae 7f92e44
fix(discovery): preserve historical Unicode agent IDs
seonghobae b7991a8
ci(opencode): stop waiting after gateway exit
seonghobae 5ce6ec5
docs(bytez): correct prefix-free authorization contract
seonghobae 8f0c476
fix(embeddings): quarantine rejected endpoints
seonghobae 60526ba
fix(privacy): enforce OpenRouter ZDR at request time (#953)
seonghobae 375d8c2
fix(embeddings): preserve endpoint quarantine semantics
seonghobae b51f0b1
fix(embeddings): map quarantine to availability
seonghobae 8569a06
fix(ci): bound gateway readiness wait
seonghobae 3124d7a
fix(ci): reserve maintenance runtime after discovery
seonghobae edc243f
fix(ci): reserve full maintenance budget
seonghobae 2bc1b08
fix(ci): keep gateway and inference waits unbounded
seonghobae 5e73d6b
fix(network): remove OpenRouter evidence deadlines
seonghobae e1977a5
fix(network): bound control-plane evidence calls
seonghobae 39c8092
revert: keep control-plane evidence waits unbounded
seonghobae 7e8257a
docs(gap): refresh model-group delivery evidence
seonghobae 117aa18
Merge origin/main into fix/model-group-timeout-openrouter
70cddd8
fix: repair merge-interaction bugs found while validating tests/main …
3ca6b7c
test(responses): fix 3 tests stale after orchestrator/free auto-route…
claude 4d2d5b4
test(provider): cover DeepSeek 502 recovery and no default deadline
seonghobae ef88d16
test: generalize provider retry and inference deadline contract
seonghobae 6bc0834
test: remove model-specific resilience fixture
seonghobae fd593a3
test(routing): retain default connection-deadline contract
seonghobae 6f588c0
ci: repair PR 971 exact-head findings
seonghobae fb6d8ba
ci: fit PR971 repair to slim-runner and publish scope
seonghobae 66d49f0
ci: repair PR971 source-fix workflow parse
seonghobae c1dcff6
test(routing): fail closed on unproven default retries
seonghobae 7f64c80
chore(repair): add PR971 default-retry source fix
seonghobae ce07141
chore(repair): add PR971 default-retry TDD workflow
seonghobae ffafb7c
chore(repair): trigger PR971 default-retry source fix
seonghobae 90838d6
fix(repair): make PR971 exact-head repair transactional
seonghobae 7486a1d
fix(ci): make PR971 repair publishable and least-privileged
seonghobae 92ff90b
ci: retrigger PR971 default retry source fix
seonghobae 5b71340
Merge remote-tracking branch 'origin/main' into fix/model-group-timeo…
claude 65d3c60
chore(repair): retrigger PR971 default-retry source fix
seonghobae 2aa206c
fix(routing): remove unproven default provider retry allocation
claude 039d86c
Merge remote-tracking branch 'origin/fix/model-group-timeout-openrout…
claude e4cacff
ci: run exact-head persisted embedding repair
seonghobae 6c379a4
fix(ci): repair PR971 one-shot YAML and timeout regression
seonghobae 8d19b28
ci: isolate PR971 one-shot repair helper
seonghobae 6fed18c
fix(ci): make PR971 repair workflow parse-safe
seonghobae 56a34ab
fix(embeddings): fix default-timeout OverflowError, recovered-ZDR rev…
claude bfb2e81
fix(discovery): disable failed configured-gateway probes under a pers…
claude a7550d0
fix(embeddings): quarantine a repeatedly incomplete sync member, not …
claude 2c8804a
fix(uptime): bound the background OpenRouter uptime fetch independent…
claude 3832a3e
docs(pr971): record dated review findings and self-modifying workflow…
claude aaa3a68
test(race): preserve failed loser provenance
seonghobae 9aa2eec
fix(race): preserve terminal loser provenance
seonghobae 56127e3
chore(review): stage PR971 exact-head quality repair
seonghobae 79b9cb9
chore(review): run PR971 RED-GREEN owner repair
seonghobae 353cb96
fix(review): fold discovery and provider-diversity regressions into P…
seonghobae 170103c
fix(review): require discovery and failure-domain GREEN
seonghobae 6723792
fix(discovery): bound per-provider model discovery independent of any…
claude 3dd989b
test(discovery): prove bootstrap pool selection is genuinely provider…
claude b415b41
docs(pr971): record the discovery-deadline and bootstrap-diversity fixes
claude 5f45887
Merge remote-tracking branch 'origin/fix/model-group-timeout-openrout…
claude 9b8f609
chore(review): remove now-superseded PR971 review-quality repair work…
claude fff6424
chore(ci): run exact-head review-quality owner repair
seonghobae 109df43
test(review): add PR 971 false-negative regressions
seonghobae be23a2a
chore(ci): add temporary PR 971 repair helper
seonghobae 03b620a
fix(ci): make PR 971 repair workflow parse-safe
seonghobae e3fa6d9
fix(cost_router): restore request_policy and reject mixed-ZDR embeddi…
claude 12967aa
fix(discovery): bound shared metadata fetches and eliminate a ThreadP…
claude c07e67b
fix(ci): publish PR 971 repair with workflow-starting token
seonghobae 4949626
fix(server): fail over terminal-failure batch embedding documents
claude 0d77445
fix(discovery): bound OpenRouter free-endpoint fetch to a fixed 8-wor…
claude 9a2e3a4
Merge remote-tracking branch 'origin/fix/model-group-timeout-openrout…
claude 56785d7
test(review): stage current PR 971 false-negative repairs
seonghobae 3d520fb
ci(review): run current exact-head PR 971 repair
seonghobae fe13068
fix(ci): cancel stale PR971 repair runs
seonghobae 41aaeff
Merge remote-tracking branch 'origin/fix/model-group-timeout-openrout…
claude d932026
Merge remote-tracking branch 'origin/main' into HEAD
claude 9b28bd2
fix(routing): eliminate a ThreadPoolExecutor shutdown-block in endpoi…
claude a3afc80
fix(race): settle futures when review callbacks fail
seonghobae 83582ad
test(race): cover callback failure settlement
seonghobae 742b5d5
docs(changelog): trace endpoint race callback settlement
seonghobae 0247eca
chore(ci): retire stale PR 971 source-fix workflow
seonghobae d388564
chore(ci): remove retired PR 971 source-fix helper
seonghobae 29bc5b7
test: align bootstrap selector oracle comment
seonghobae 59b2fc8
fix(routing): eliminate a ThreadPoolExecutor shutdown-block in provid…
claude d402ec0
Merge remote-tracking branch 'origin/fix/model-group-timeout-openrout…
claude d29198e
test: prove blocked embedding worker cannot hold process exit
seonghobae 7dc5ee7
test: keep single stronger embedding process-exit regression
seonghobae 02389e2
test: reject daemon worker submissions after shutdown
seonghobae 8caf844
ci: run one-shot daemon pool shutdown repair
seonghobae 18a76eb
fix(routing): reject _DaemonWorkerPool submissions after shutdown
claude d87a1cb
Merge remote-tracking branch 'origin/fix/model-group-timeout-openrout…
claude 558c847
docs(changelog): trace daemon pool post-shutdown submit fail-fast fix
claude df9f380
fix(routing): close daemon worker admission before shutdown drain
claude 09f0249
chore(ci): remove obsolete PR971 daemon-pool-shutdown repair workflow
claude 2510766
docs(gap-baseline): record PR 971 merge-resolution and concurrency-bu…
claude b05d028
Merge remote-tracking branch 'origin/fix/model-group-timeout-openrout…
claude 770dada
test(bootstrap): reproduce durable report identity mismatch
seonghobae 7369d48
fix(bootstrap): report persisted selected identities
seonghobae 3acc6cd
test(catalog): reproduce durable report identity mismatch
seonghobae d02c97c
fix(catalog): report persisted selected identities
seonghobae 696fd17
docs(changelog): record durable bootstrap identity contract
seonghobae 121d898
Merge protected main into fix/model-group-timeout-openrouter
seonghobae 2d8e233
docs(gap-baseline): track immutable release + resumable execution gap
claude df587e1
docs(gap-baseline): fix citations Devin Review flagged on the new entry
claude 8b05b83
merge(main): restack PR 971 and repair exact RED fixtures
seonghobae 521e613
fix(actions): remove merge artifact from hourly workflow
seonghobae 6ddc6b4
test(bootstrap): make identity regressions directly executable
seonghobae 1e59d4f
fix(restack): restore complete orchestrator source blob
seonghobae 98aed1a
test(bootstrap): reproduce durable selection-order loss
seonghobae 457ebb3
fix(bootstrap): preserve durable selector order
seonghobae d469085
refactor(bootstrap): remove superseded unordered ID seed
seonghobae eeb9cc1
test(routing): reject ambiguous bootstrap admission
seonghobae 575148b
fix(routing): fail closed on ambiguous bootstrap admission
seonghobae 50b0c86
test(routing): cover equal-price admission boundary
seonghobae 7206c5f
fix(routing): reject unmodeled diversity displacement
seonghobae 838cbcb
test(routing): reject unmodeled full-pool ordering
seonghobae 726911c
docs(gaps): record 2026-09-08 diversity displacement + full-pool orde…
seonghobae d9c2f57
docs(provider-bootstrap): note provider-spread migration for model-gr…
seonghobae 2f02876
fix(discovery): scope OpenRouter ZDR evidence to its provider
seonghobae 1b05c29
merge(main): restack PR #971 onto current main
seonghobae 8c4163f
fix(restack): preserve same-id discovery updates with legacy remap
seonghobae a4ced8f
Merge remote-tracking branch 'origin/main' into restack/971-wt2
seonghobae 59f2659
merge(main): restack PR #971 onto current origin/main
seonghobae 0b4dad7
merge(main): include #1163 active-content sanitization into PR #971
seonghobae b83ee90
fix(routing): restore zero default provider transport retries
seonghobae 7b403e7
test(race): measure post-return shutdown for process-exit contract
seonghobae 901b156
merge(main): restack PR #971 onto origin/main after #1138
seonghobae aa8de80
merge(main): absorb #1174 context-length failover into PR #971
seonghobae 435fb80
Merge remote-tracking branch 'origin/main' into seonghobae/restack-97…
seonghobae File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| ### Fixed | ||
|
|
||
| - Endpoint race observer failures now settle the manually managed `Future` exactly once instead of leaving an unbounded race in a permanent `RUNNING` state. This preserves the prior executor-backed exception semantics while retaining daemon-owned race workers that cannot block interpreter shutdown. Regression coverage exercises callback failures after both successful and failed provider attempts with `deadline_seconds=None`. |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| Stopped treating OpenRouter as a whole-account, ZDR-motivated serving exclusion. `PROVIDER_MODEL_SOURCES`'s `openrouter` entry no longer sets `evidence_only=True`: ZDR eligibility is a route/model-level property, never grounds to block an entire provider account from serving, and OpenRouter was the one provider source with genuinely reliable native pricing/`is_free` evidence, so excluding it directly caused `orchestrator/free`'s previously-documented structural emptiness (ADR 0041). Also fixed a backwards side effect of the old flag: `_apply_discovered_model_evidence` could never mark OpenRouter's own rows `zdr_capable=True` even when they exactly matched OpenRouter's own declared ZDR feed. The provider-neutral evidence-application contract from PR #901 (OpenRouter's feed also crediting matching rows from every other provider) is unchanged. Since OpenRouter can multiplex one model id across several backing providers, `ModelClient` now pins every OpenRouter request made under an active `zdr_only` scope with OpenRouter's own documented `"provider": {"zdr": true}` request-time enforcement, applied at the shared `_send`/`_stream_send`/`_send_raw` transport chokepoints, and at the async Batch API path (`_batch_run`) via the same helper on each uploaded JSONL request body. |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| ### Fixed | ||
|
|
||
| - `ProviderEmbeddingBatchBackend` (`batch_routing.py`) no longer drives its durable job queue through a `concurrent.futures.ThreadPoolExecutor`. That executor's worker threads register with `concurrent.futures.thread`'s own interpreter-exit hook, which unconditionally joins every still-running worker at shutdown regardless of daemon status; combined with this org's default no-deadline `ModelClient.timeout=None` policy, a provider embedding runner that never returned would block process shutdown forever even after `close()`. A private `_DaemonWorkerPool` — a fixed-size pool of `threading.Thread(daemon=True)` workers pulling from a queue, exposing the same `submit()`/`shutdown()` surface — replaces it at every construction site while every durability/claim/recovery/publish guarantee is unchanged. Regression coverage runs a hung provider embedding runner in a separate interpreter and confirms normal process exit after `close()`. | ||
| - `_DaemonWorkerPool.submit()` now fails closed with `RuntimeError` once `shutdown()` has run, matching `ThreadPoolExecutor.submit`'s closed-pool contract, instead of silently queuing a task behind the shutdown sentinels where no worker would ever pick it up. | ||
| - `_DaemonWorkerPool.shutdown()` now closes admission (`self._shutdown = True`) atomically under `_workers_lock` before draining the queue or queuing stop sentinels, instead of draining first. Previously a `submit()` that landed between the drain and the flag being set could enqueue work that survived `cancel_futures=True` and later ran on a worker despite the cancellation. `shutdown()` remains idempotent (a repeated call skips re-draining/re-queuing and only joins the already-captured workers). |
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.