Add suitbuilder backend improvements and SSE streaming fix
- Add dedicated streaming proxy endpoint for real-time suitbuilder SSE updates - Implement stable sorting with character_name and name tiebreakers for deterministic results - Refactor locked items to locked slots supporting set_id and spell constraints - Add Mag-SuitBuilder style branch pruning tracking variables - Enhance search with phase updates and detailed progress logging - Update design document with SSE streaming proxy fix details Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
8e70f88de1
commit
e0265e261c
4 changed files with 655 additions and 222 deletions
|
|
@ -222,3 +222,31 @@ No changes needed - ItemPreFilter used at line 969.
|
|||
| Task 5: Add Armor Level Scoring | ✅ Complete | Added armor_score = total_armor // 100 |
|
||||
| Task 6: Add Item Pre-Filtering | ✅ Already Working | No changes needed |
|
||||
| Task 7: AccessorySearcher | Not Started | Future |
|
||||
| Task 8: Fix SSE Streaming Proxy | ✅ Complete | Added dedicated streaming endpoint in main.py |
|
||||
|
||||
---
|
||||
|
||||
## Bug Fixes Applied
|
||||
|
||||
### SSE Streaming Proxy Fix (2026-01-30)
|
||||
|
||||
**Problem:** The generic inventory proxy at `/inv/{path:path}` used `httpx.request()` which buffers the entire response before returning. For SSE streams like suitbuilder search, this caused:
|
||||
- No progress updates reaching the frontend
|
||||
- "Gateway Time-out" after buffering the full 5-minute search
|
||||
|
||||
**Solution:** Added dedicated streaming proxy endpoint `/inv/suitbuilder/search` in `main.py`:
|
||||
```python
|
||||
@app.post("/inv/suitbuilder/search")
|
||||
async def proxy_suitbuilder_search(request: Request):
|
||||
async def stream_response():
|
||||
async with httpx.AsyncClient.stream(...) as response:
|
||||
async for chunk in response.aiter_bytes():
|
||||
yield chunk
|
||||
return StreamingResponse(
|
||||
stream_response(),
|
||||
media_type="text/event-stream",
|
||||
headers={"X-Accel-Buffering": "no"} # Disable nginx buffering
|
||||
)
|
||||
```
|
||||
|
||||
**Result:** Suits now stream to frontend in real-time with scores visible as they're found.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue