find_agent_v2.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from __future__ import annotations
  2. from fastapi import APIRouter, BackgroundTasks, HTTPException, Query, Request, status
  3. from api.schemas.find_agent_v2 import CreateFindAgentV2TestBody
  4. from api.services.find_agent_v2 import execute_test_run, get_run_detail, list_runs, prepare_test_run
  5. router = APIRouter(prefix="/api/find-agent-v2", tags=["find-agent-v2"])
  6. @router.get("/runs")
  7. def runs(
  8. status_filter: str | None = Query(default=None, alias="status"),
  9. keyword: str | None = Query(default=None, max_length=256),
  10. limit: int = Query(default=30, ge=1, le=100),
  11. offset: int = Query(default=0, ge=0),
  12. ) -> dict:
  13. return list_runs(status=status_filter, keyword=keyword, limit=limit, offset=offset)
  14. @router.get("/runs/{run_id}")
  15. def run_detail(run_id: str) -> dict:
  16. result = get_run_detail(run_id)
  17. if result is None:
  18. raise HTTPException(status_code=404, detail="find_agent_v2 run not found")
  19. return result
  20. @router.post("/tests", status_code=status.HTTP_202_ACCEPTED)
  21. def create_test(
  22. body: CreateFindAgentV2TestBody,
  23. request: Request,
  24. background_tasks: BackgroundTasks,
  25. ) -> dict:
  26. try:
  27. prepared = prepare_test_run(body.demand_word, request.state.current_user)
  28. except LookupError as exc:
  29. raise HTTPException(status_code=404, detail=str(exc)) from exc
  30. except ValueError as exc:
  31. raise HTTPException(status_code=422, detail=str(exc)) from exc
  32. background_tasks.add_task(execute_test_run, prepared["run_id"])
  33. return {"accepted": True, **prepared}