| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 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_candidates, get_run_detail, get_search_candidates,
- 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),
- page: int = Query(default=1, ge=1),
- page_size: int = Query(default=30, ge=1, le=100),
- ) -> dict:
- return list_runs(
- status=status_filter, keyword=keyword, page=page, page_size=page_size,
- )
- @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.get("/runs/{run_id}/candidates")
- def run_candidates(run_id: str) -> dict:
- items = get_run_candidates(run_id)
- if items is None:
- raise HTTPException(status_code=404, detail="find_agent_v2 run not found")
- return {"items": items, "count": len(items)}
- @router.get("/runs/{run_id}/searches/{search_id}/candidates")
- def search_candidates(run_id: str, search_id: int) -> dict:
- items = get_search_candidates(run_id, search_id)
- if items is None:
- raise HTTPException(status_code=404, detail="find_agent_v2 search not found")
- return {"items": items, "count": len(items)}
- @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}
|