| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- from __future__ import annotations
- from fastapi import APIRouter, BackgroundTasks, HTTPException, Query, Request, status
- from api.schemas.find_agent_v2 import CreateFindAgentV2TestBody
- from api.services.find_agent_v2 import execute_test_run, get_run_detail, list_runs, prepare_test_run
- router = APIRouter(prefix="/api/find-agent-v2", tags=["find-agent-v2"])
- @router.get("/runs")
- def runs(
- status_filter: str | None = Query(default=None, alias="status"),
- keyword: str | None = Query(default=None, max_length=256),
- limit: int = Query(default=30, ge=1, le=100),
- offset: int = Query(default=0, ge=0),
- ) -> dict:
- return list_runs(status=status_filter, keyword=keyword, limit=limit, offset=offset)
- @router.get("/runs/{run_id}")
- def run_detail(run_id: str) -> dict:
- result = get_run_detail(run_id)
- if result is None:
- raise HTTPException(status_code=404, detail="find_agent_v2 run not found")
- return result
- @router.post("/tests", status_code=status.HTTP_202_ACCEPTED)
- def create_test(
- body: CreateFindAgentV2TestBody,
- request: Request,
- background_tasks: BackgroundTasks,
- ) -> dict:
- try:
- prepared = prepare_test_run(body.demand_word, request.state.current_user)
- except LookupError as exc:
- raise HTTPException(status_code=404, detail=str(exc)) from exc
- except ValueError as exc:
- raise HTTPException(status_code=422, detail=str(exc)) from exc
- background_tasks.add_task(execute_test_run, prepared["run_id"])
- return {"accepted": True, **prepared}
|