chore(ci): sync main into internal staging - #36288
Merged
yuneng-berri merged 19 commits intoAug 8, 2026
Merged
Conversation
chore(ci): promote internal staging to main
chore(ci): promote internal staging to main
chore(ci): promote internal staging to main
chore(ci): promote internal staging to main
_await_model_servable used poll_timeout (120s), the spend/log read-back budget. A stuck model reload therefore stalled every suite that creates a deployment for two minutes before failing Give create_model a fixed harness middle ground: model_servable_timeout=40s, polled every 2s, with each /v1/models call capped at 5s and clamped to the remaining deadline so one slow GET cannot overrun the wait. Happy path still returns on the first listing. Not derived from proxy general_settings or env Transport.get accepts an optional per-call timeout for that clamp. Unit tests cover the deadline arithmetic and clamp without a live proxy (cherry picked from commit c082a0e)
create_model returned after the first /v1/models hit that listed the model, so chat could still land on a cold gateway worker (numWorkers>1 / peer pod) and 400 Invalid model name. Require continuous listing for the product default add_deployment interval (30s) after first sight so every worker has synced from the DB; first listing still bounded at 40s (cherry picked from commit 7d1ee2f)
Keep the create_model DB-sync wait in the harness; the pure-function unit file is not needed for this PR (cherry picked from commit 8920465)
When less than one full poll interval remained in the first-listing budget, the pre-sleep check returned NotServable without another /v1/models call. Sleep only min(interval, time left) so a model that becomes listable in the last seconds of the timeout still gets a clamped final poll (cherry picked from commit 8439195)
A poll may start with remaining budget and still return after started+timeout if the transport overruns its clamp. Recheck the first-listing deadline after the response so a late listing does not open the continuous DB-sync phase (cherry picked from commit 7ff2bcb)
…ble_timeout test(e2e): bound the post-/model/new servable wait at 40s
* fix(mcp): resolve call_tool by registry without requiring tool map Multi-worker reloads put MCP servers in the registry from the DB but do not re-run tools/list on every process. Gating call_tool on tool_name_to_mcp_server_name_mapping made cold workers 500 with Tool not found after another worker had already listed the tool. Treat a registry match on server id/name/alias as enough; upstream rejects unknown tools * test(e2e): poll MCP register, tools/list, and tools/call across multi-worker lag Stage multi-worker gateways only load MCP servers and tool maps on the process that handled the request. Poll until the server is listed, the tool appears on tools/list, and tools/call is not a cold-worker 500 so key-access and Datadog MCP e2e stop racing the LB * Revert "fix(mcp): resolve call_tool by registry without requiring tool map" This reverts commit 8b56e51. * test(e2e): tighten MCP multi-worker lag classifier Only retry tools/call on gateway shapes Tool <name> not found and server_not_found, not any 500 that mentions tool/server not found, so upstream failures are not retried until the poll deadline * test(e2e): drop unit file for MCP lag classifier The live await_call_tool polls already cover multi-worker lag; a separate string-match unit module is not worth keeping (cherry picked from commit c274cf3)
test(e2e): poll MCP tools across multi-worker lag (#35047)
chore(ci): promote internal staging to main
chore: promote staging to main
chore(ci): promote internal staging to main
chore(ci): promote internal staging to main
chore(ci): promote internal staging to main
chore: promote staging to main
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
yuneng-berri
marked this pull request as ready for review
August 8, 2026 18:14
yucheng-berri
approved these changes
Aug 8, 2026
Contributor
Greptile SummaryThis PR reconciles the E2E model-readiness logic while back-merging main into internal staging.
Confidence Score: 5/5The PR appears safe to merge, with the readiness deadline and transport timeout propagated consistently through all reachable E2E paths. The changed polling path preserves first-listing validation and the write-relative replica propagation barrier, while every reachable transport implementation supports the new timeout argument.
|
| Filename | Overview |
|---|---|
| tests/e2e/proxy_client.py | Introduces typed model-servability outcomes and bounded polling before the existing propagation barrier; no actionable changed-code defect was established. |
| tests/e2e/transport.py | Adds an optional GET timeout override consistently across the protocol, split transport, concrete transport, and underlying HTTP call. |
Reviews (1): Last reviewed commit: "chore(ci): sync main into internal stagi..." | Re-trigger Greptile
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.
TLDR
Problem this solves:
How it solves it:
User Flow
Before: a maintainer promoting internal staging is blocked by a branch conflict
After: the same promotion can proceed with main included in staging's ancestry
Relevant issues
Unblocks #36286
Carries #35020 into internal staging, replacing the unmerged staging counterpart #35012
Linear ticket
Pre-Submission checklist
Screenshots / Proof of Fix
No screenshots apply to this branch-ancestry repair
At commit
09323fcc4a, the merge parents are current internal staging4d9defd573and current main714fff696aValidation completed at
09323fcc4a:Type
Infrastructure
Changes
This back-merges current main into
litellm_internal_staging, making the current main head part of staging's ancestryThe E2E harness conflict keeps #35020's 40-second first-listing deadline and per-request timeout. Staging's newer propagation barrier remains responsible for replica convergence, while the older continuous polling window is disabled to avoid waiting twice
QA runbook
ProxyClient.create_model- model creation keeps the bounded readiness check and waits once for replica propagationSTORE_MODEL_IN_DB=Trueand a reachable database/model/newand immediately invoke it through/chat/completionsFinal Attestation