42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
"""Report polling endpoint."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
|
|
from ..deps import AsyncSessionDep, CurrentUserDep, fetch_document_status_for_user
|
|
|
|
router = APIRouter(tags=["reports"])
|
|
|
|
|
|
@router.get("/api/v1/reports/{document_id}")
|
|
async def get_report(
|
|
session: AsyncSessionDep,
|
|
document_id: UUID,
|
|
user: CurrentUserDep,
|
|
) -> dict[str, object]:
|
|
row = await fetch_document_status_for_user(session, document_id, user.user_id)
|
|
if row is None:
|
|
raise HTTPException(status_code=404, detail="report not found")
|
|
|
|
status = row["status"]
|
|
if status != "done":
|
|
return {
|
|
"document_id": str(document_id),
|
|
"status": status,
|
|
"stage": row["stage"],
|
|
}
|
|
|
|
return {
|
|
"document_id": str(document_id),
|
|
"status": status,
|
|
"filename": row["filename"],
|
|
"markdown": row["markdown"],
|
|
"findings": row["content_json"],
|
|
"model_used": row["model_used"],
|
|
"prompt_tokens": row["prompt_tokens"],
|
|
"eval_tokens": row["eval_tokens"],
|
|
"latency_ms": row["latency_ms"],
|
|
}
|