forked from retoor/devplacepy
Update
This commit is contained in:
@@ -206,31 +206,42 @@ async def deepsearch_status(request: Request, uid: str):
|
||||
DeepsearchJobOut.model_validate(_job_payload(job)).model_dump(mode="json")
|
||||
)
|
||||
|
||||
def _report_for(job: dict) -> dict:
|
||||
if job.get("status") != queue.DONE:
|
||||
def _report_from_disk(uid: str) -> dict:
|
||||
path = DEEPSEARCH_DIR / uid / "report.json"
|
||||
try:
|
||||
return json.loads(path.read_text(encoding="utf-8"))
|
||||
except (ValueError, OSError):
|
||||
return {}
|
||||
return job.get("result", {}).get("report", {})
|
||||
|
||||
def _report_for(uid: str, job: dict) -> dict:
|
||||
if job.get("status") == queue.DONE:
|
||||
report = job.get("result", {}).get("report", {})
|
||||
if report:
|
||||
return report
|
||||
if job.get("status") == queue.FAILED:
|
||||
return {}
|
||||
return _report_from_disk(uid)
|
||||
|
||||
def _session_context(request: Request, uid: str, job: dict, session: dict) -> dict:
|
||||
report = _report_for(job)
|
||||
report = _report_for(uid, job)
|
||||
user = get_current_user(request)
|
||||
viewer_is_admin = is_admin(user)
|
||||
done = job.get("status") == queue.DONE
|
||||
done = bool(report) or job.get("status") == queue.DONE
|
||||
return {
|
||||
"uid": uid,
|
||||
"status": job.get("status", ""),
|
||||
"status": queue.DONE if done else job.get("status", ""),
|
||||
"query": report.get("query") or session.get("query"),
|
||||
"depth": int(session.get("depth") or 0),
|
||||
"max_pages": int(session.get("max_pages") or 0),
|
||||
"score": report.get("score"),
|
||||
"confidence": report.get("confidence"),
|
||||
"source_diversity": report.get("source_diversity"),
|
||||
"synthesis": report.get("synthesis", ""),
|
||||
"page_count": report.get("page_count", 0),
|
||||
"chunk_count": report.get("chunk_count", 0),
|
||||
"summary": report.get("summary", ""),
|
||||
"sources": report.get("sources", []),
|
||||
"findings": report.get("findings", []),
|
||||
"gaps": report.get("gaps", []),
|
||||
"timeline": report.get("timeline", []),
|
||||
"chat_ws_url": f"/tools/deepsearch/{uid}/chat" if done else None,
|
||||
"export_md_url": f"/tools/deepsearch/{uid}/export.md" if done else None,
|
||||
@@ -282,10 +293,13 @@ def _control(request: Request, uid: str, state: str):
|
||||
|
||||
def _export_report(uid: str) -> dict | None:
|
||||
job = queue.get_job(uid)
|
||||
if not job or job.get("kind") != "deepsearch" or job.get("status") != queue.DONE:
|
||||
if not job or job.get("kind") != "deepsearch" or job.get("status") == queue.FAILED:
|
||||
return None
|
||||
report = _report_for(uid, job)
|
||||
if not report:
|
||||
return None
|
||||
queue.touch_job(uid, TOUCH_EXTEND_SECONDS)
|
||||
return job.get("result", {}).get("report", {})
|
||||
return report
|
||||
|
||||
@router.get("/{uid}/export.md")
|
||||
async def deepsearch_export_md(request: Request, uid: str):
|
||||
@@ -354,7 +368,10 @@ async def deepsearch_chat_ws(websocket: WebSocket, uid: str):
|
||||
return
|
||||
job = queue.get_job(uid)
|
||||
session = database.get_deepsearch_session(uid)
|
||||
if not job or job.get("kind") != "deepsearch" or job.get("status") != queue.DONE or not session:
|
||||
ready = job and (
|
||||
job.get("status") == queue.DONE or (session or {}).get("status") == "done"
|
||||
)
|
||||
if not job or job.get("kind") != "deepsearch" or not ready or not session:
|
||||
await websocket.close(code=1008)
|
||||
return
|
||||
user = get_current_user(websocket)
|
||||
|
||||
Reference in New Issue
Block a user