Give saturation its own threshold and cooldown, and ship the burst probe #126
No reviewers
Labels
No labels
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agent-proxy!126
Loading…
Reference in a new issue
No description provided.
Delete branch "saturation-stickiness"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The parts of #111 and #107 that did not actually need a decision from you.
Refs #111. Refs #107. Neither is closed - each keeps the half that is genuinely yours.
#111: the two definitions you asked for
You wrote that "persistently" and "stick" both needed defining. Those are numbers, not a product decision, and the circuit breaker's existing ones are wrong for your case in the same direction:
PROXY_SATURATION_THRESHOLDandPROXY_SATURATION_COOLDOWN. The count is consecutive, so one good turn clears it, and half-open probing still recovers with no human involved.What stays open on #111: the explicit signal. "I would like sirens echo to be able to inform aproxy" is not something a threshold provides, and the two shapes for it - a request header or a small admin pin endpoint - differ enough to be your call. The admin endpoint in particular is a new authenticated write surface on a service that has had none, and
AGENTS.mdsays Ward owns authorization. My reasoning is in the issue comment.#107: the probe, not the run
scripts/burst_probe.pyplusward exec burst-probe. It runs the method from that issue: concurrency 1/5/10/30, three repeats, shortest possible identical prompt,max_tokens: 1.It refuses to start without
--yesand names the exact call count in the refusal:The verdict is deliberately weak where the evidence is weak. A flat run cannot separate "no admission control" from "the backend absorbed the burst", and it says so rather than picking. A shedding run warns that #110 ships the limiter on at 1/s with burst 1 - which would answer 429 to 29 of 30 requests and read as "the proxy sheds" when it measured the limiter I just added. That is the likeliest way to get a confidently wrong answer, so it is in the verdict text, the doc, and a test.
The client side cannot see admission delay at all.
docs/burst-probe.mdsays where the answer lives:queue.waitper trace, which since #105 closes at dequeue and reports admission delay as its own duration.What stays open on #107: the run. Idle GPU, not during an incident, and your decision to spend the tokens.
How to verify
ward exec test- 3 new cases intests/test_saturation.py, 7 intests/test_burst_probe.py(355 passed).test_one_saturation_does_not_stick_by_defaultandtest_saturation_sticks_for_its_own_cooldownpin both numbers, including that it does reopen at 901s rather than sticking forever.test_a_recovered_backend_forgets_its_saturationspins that the count is consecutive.test_it_refuses_to_spend_tokens_without_consentandtest_shedding_verdict_warns_about_the_rate_limiterpin the guards.Risk
Low. The thresholds only apply on the saturation path, which is itself off unless
PROXY_BACKEND_SLOW_AFTERis set. The probe is a script that will not run without an explicit flag.Note
Branched off
saturation-failover(#124), tip of #118 → #119 → #120 → #122 → #123 → #124.Pull request closed