Repository navigation
Conversation
|
Notes from review, so nobody spends time finding them again: |
Publish fixed wait and refusal reasons in the load ledger, JSON snapshot, metrics and DeepSeek admission logs. Reuse engine_busy, engine_unavailable and memory_pressure from the HTTP errors; closed and stale submissions retain their original errors and share the unavailable counter. Additional codes describe prefix, state-read, cache-budget and backend conditions. Keep HTTP responses and scheduling decisions unchanged. Move the existing submission body to its own module to keep the host within the source limit. Observe only priced request ledgers through their price callback; a page-backed pool has no per-request price. Check shared HTTP and diagnostic names, repeated memory refusals, queue reason counts, preserved closed/stale errors and page-backed observation. With a load producer attached, each host unlock scans queued requests and recomputes wait reasons under the host/load locks before deduplication, including admission callbacks where needed; elapsed overhead is unmeasured.
bed07e4 to
9932998
Compare
|
Row-by-row check of this draft's counters against Shared names hold.
The 19 series (10 waits + 9 refusals) are a fixed set, so the labels stay bounded. 1. DeepSeek-V4.1's three planner reasons never reach the gauge. 2. 3. The new fields are undocumented. This adds 4. Two simplifications.
The draft as it stands (head On your note about |
|
Here is the shape I would agree to, answering the four points from your review note of 5 Nov plus the four findings in my check above. It is a proposal, not a patch: tell me where you want it different and I will rework whichever part you prefer to carry. 1. Where a wait reason comes from (your point 1: The reason should be decided once, on the admission path, and stored on the job; the gauge then only reads integers.
If you would rather not put the reason in the verdict, the alternative is the host asking the planner once per round for the head it did not admit; the verdict is cheaper and cannot race with the round that follows. 2. The codes (your points 2 and 4).
3. The counters (your point 3:
4. The invariant and the docs.
What I can do, whichever way you want it:
Either way the DeepSeek reasons need a test before they can be claimed: a planner test double that returns One thing I can answer now, so it does not wait for the shape: the three shared names in the draft are already the strings the client sees - |
Draft for #2135: one fixed code for every wait and refusal.
The matrix. Only DeepSeek-V4.1 mixes prompt and decode rows in one round window. Every other lane-host family with a prefill step interleaves separate prompt chunks between decode rounds, whole-prompt families hold a lane, and lone drivers and warm or prompt-only jobs never mix.
The codes.
core/wait_reason.zigholds fixedWaitandRefusalcodes. A queued job is labelled by the path holding it, and refusals are counted where they happen./metricsaddsrequests_waiting_by_reason{reason=...}andrequest_refusals_total{reason=...}with every label at 0, and/v1/loadaddswaiting_by_reasonandrefusals.This touches
lane_hostfiles for labels and counts only, with no scheduling change, and needs review by whoever owns that code. Host tests were run on an older main; this head hasn't been built since its rebase. Kept as a draft while we agree with @devopsfortunato, who has claimed #2135.