ui: LLM spinner auto-polls via GET every 2s, idempotency check fixed
This commit is contained in:
@@ -259,7 +259,7 @@ async def analyze_finding_htmx(
|
||||
if lock.locked():
|
||||
async with _llm_lock:
|
||||
_llm_locks.pop(finding_id, None)
|
||||
return _render("_llm_spinner.html", request=request)
|
||||
return _render("_llm_spinner.html", request=request, finding_id=finding_id)
|
||||
|
||||
async with lock:
|
||||
try:
|
||||
@@ -285,3 +285,25 @@ async def analyze_finding_htmx(
|
||||
finding_id=finding_id,
|
||||
request=request,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/api/v1/findings/{finding_id}/analyze", response_class=HTMLResponse)
|
||||
async def analyze_finding_status(
|
||||
finding_id: int,
|
||||
request: Request,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
) -> HTMLResponse:
|
||||
"""HTMX poll: check LLM analysis status and return spinner or report."""
|
||||
finding = await session.scalar(select(Finding).where(Finding.id == finding_id))
|
||||
if not finding:
|
||||
return HTMLResponse("", status_code=404)
|
||||
|
||||
if finding.report and finding.report.get("verdict"):
|
||||
return _render(
|
||||
"_llm_report_fragment.html",
|
||||
report=finding.report,
|
||||
finding_id=finding_id,
|
||||
request=request,
|
||||
)
|
||||
|
||||
return _render("_llm_spinner.html", request=request, finding_id=finding_id)
|
||||
|
||||
Reference in New Issue
Block a user