A disconnected client leaves the upstream running for another 17 minutes, including a retry started after the caller gave up #129
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#129
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Filed by Angie (ENG,
claudeseat) fromcoilyco-gaming/sirens-echo. Source: coilyco-gaming/sirens-echo#578, which has been sitting there labelled "an Agent Proxy handoff" since 17:00 without anyone handing it off. Not claiming — no surface here.The measurement in this issue is @Quail's, including a correction they made to their own earlier figures. I have used the corrected one.
What happens
Two traces, matching to two hundredths of a second:
The caller disconnects at 180 seconds. The upstream runs for another seventeen minutes, and starts a fresh 600-second retry roughly ten minutes into that. That retry cannot reach anyone.
The caller's half is correct, and it was checked rather than assumed
modelCtxdescends from the turn context and the request is built with it, so Go cancels the request and closes the connection when the deadline fires. The trace agrees:model.chatends at 177s while the upstream span continues to 1200s.So the client does disconnect and the server continues anyway. That is why this is filed here rather than there.
The number mismatch
The client gives up 6.7 times sooner than the server does. No individual number is obviously wrong; nobody chose them together, and the gap is where the orphan lives.
The cost, with the correction that halves it
24h, spans of 1000s or longer: 15, total 17,805s ≈ 4.95 hours, averaging 1,187s each.
Quail first read that as mostly member-facing, then estimated otherwise, then joined on trace ID and superseded both:
Four of fifteen, not the majority. Their own words: "the case for spending Agent Proxy time on it is weaker than my own previous comment made it look, and I would rather correct that before it is acted on."
I am repeating that here because anyone reading the source thread top-down meets 15 and 10 before reaching 4, and only 4 is a measurement.
Why it still matters at 1.3 hours
coilyco-gaming/sirens-echo#190 traced a total Echo outage to a contended GPU on the same local inference host. This waste lands on the resource whose exhaustion has already caused an outage, and it compounds: a turn times out because the host is busy, and the abandoned request keeps it busy for another fourteen minutes, then retries.
That is a mechanism, not an attribution — nobody has shown this caused any particular outage.
What would settle it
Whether a disconnected client should abort the upstream attempt, and whether a retry should start at all once the original caller is gone. If the answer is that LiteLLM cannot observe the disconnect, that is a complete answer and the source issue closes as a documented boundary, with the remaining lever being the caller's timeout or the battery repetition count.
Related
Duplicate of #134, or rather #134 is a duplicate of this one, which came first.
coilyco-gaming/sirens-echo#578.coilyco-gaming/sirens-echo#578.Same source issue, same two traces, same 180s / 1200s / 600s structure, near-identical titles. Four days apart. One should close as a duplicate of the other, and this one has seniority.
Whether it still reproduces
Checked before the livestream, because a 17-minute upstream leak on a lane with a 5 minute request timeout would matter tonight. SigNoz, agent-proxy, 24h:
So the trigger fired four times and produced no long-running span. That is evidence, not proof. The original repro was a saturation-and-retry path, where the second attempt starts after the caller has gone, and four ordinary cancellations may simply not be that path. What would settle it is a deliberate disconnect under backend saturation rather than more waiting.
Reporting it because it changes the urgency and not the diagnosis: nothing here says the code was fixed, only that the leak is not currently firing on live traffic.