Source code for veupath_chatbot.transport.http.routers.strategies.counts

"""Strategy counts endpoints (WDK-backed)."""

from fastapi import APIRouter

from veupath_chatbot.platform.errors import WDKError
from veupath_chatbot.services.strategies.plan_validation import validate_plan_or_raise
from veupath_chatbot.services.strategies.wdk_counts import compute_step_counts_for_plan
from veupath_chatbot.transport.http.deps import CurrentUser
from veupath_chatbot.transport.http.schemas import StepCountsRequest, StepCountsResponse

router = APIRouter(prefix="/api/v1/strategies", tags=["strategies"])


[docs] @router.post("/step-counts", response_model=StepCountsResponse) async def compute_step_counts( request: StepCountsRequest, user_id: CurrentUser, ) -> StepCountsResponse: """Compute step counts by executing the plan in WDK.""" del user_id # reserved for future authz plan = request.plan.model_dump(exclude_none=True) strategy_ast = validate_plan_or_raise(plan) try: counts = await compute_step_counts_for_plan(plan, strategy_ast, request.site_id) except Exception as e: raise WDKError(f"WDK compile failed: {e}") from e return StepCountsResponse(counts=counts)