The static-asset caching middleware used BaseHTTPMiddleware, which has a known Starlette bug: a client disconnecting mid-StreamingResponse (the new live-attribution SSE stream hitting its idle timeout) raced its internal task group and raised "RuntimeError: No response returned", crashing that request. Rewritten as plain ASGI middleware that only touches headers via the raw send callable, removing the race. Also found the real cause of the casting timeouts/405s: the streaming attribution endpoint had its own lock instead of sharing the one the blocking endpoint already used to serialize on the LLM's single slot - letting a stream call and its own blocking fallback fire concurrently, exactly the ghost-request pile-up that lock was built to prevent. Unified onto one lock and added server-side logging for stream failures. The "LLM Thinking" pane now shows the model's actual <think> reasoning instead of the in-progress JSON answer echoed back at the user. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| js | ||
| sections | ||
| vendor | ||
| icon.svg | ||
| index.html | ||
| loader.js | ||
| manifest.webmanifest | ||
| nav.js | ||
| style.css | ||
| sw.js | ||