Spaces:
Running
Running
File size: 4,020 Bytes
877add7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | """API routes."""
from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException
from app.api.dependencies import get_service
from app.api.schemas import (
BatchInferRequest,
EvidenceQueryRequest,
OrchestrateRequest,
ResetRequest,
StepCandidateRequest,
StepRequest,
)
from app.api.service import APIService
router = APIRouter()
@router.get("/health")
def health() -> dict[str, str]:
return {"status": "ok"}
@router.post("/env/reset")
def env_reset(payload: ResetRequest, service: APIService = Depends(get_service)) -> dict:
try:
return service.reset(**payload.model_dump(mode="json"))
except ValueError as exc:
raise HTTPException(status_code=422, detail=str(exc)) from exc
@router.post("/env/step")
def env_step(payload: StepRequest, service: APIService = Depends(get_service)) -> dict:
return service.step(payload.model_dump(mode="json"))
@router.post("/env/step_candidate")
def env_step_candidate(payload: StepCandidateRequest, service: APIService = Depends(get_service)) -> dict:
result = service.step_candidate(
candidate_id=payload.candidate_id,
confidence=payload.confidence,
rationale_brief=payload.rationale_brief,
)
if result is None:
raise HTTPException(status_code=404, detail=f"Candidate {payload.candidate_id!r} is not legal in this state.")
return result
@router.get("/env/catalog")
def env_catalog(service: APIService = Depends(get_service)) -> dict:
return service.catalog()
@router.get("/env/state")
def env_state(service: APIService = Depends(get_service)) -> dict:
return service.env.get_state()
@router.get("/env/trace")
def env_trace(service: APIService = Depends(get_service)) -> list[dict]:
return service.env.get_trace()
@router.get("/env/legal_actions")
def env_legal_actions(service: APIService = Depends(get_service)) -> list[dict]:
return service.env.get_legal_actions()
@router.get("/env/reward_breakdown")
def env_reward_breakdown(service: APIService = Depends(get_service)) -> dict:
return service.env.get_reward_breakdown()
@router.get("/env/uncertainty")
def env_uncertainty(service: APIService = Depends(get_service)) -> dict:
return service.env.get_uncertainty_report().model_dump(mode="json")
@router.post("/agents/orchestrate")
def agents_orchestrate(
payload: OrchestrateRequest = OrchestrateRequest(),
service: APIService = Depends(get_service),
) -> dict:
return service.orchestrate(coordination_mode=payload.coordination_mode)
@router.post("/policy/infer")
def policy_infer(service: APIService = Depends(get_service)) -> dict:
return service.infer_policy()
@router.post("/policy/batch_infer")
def policy_batch_infer(
payload: BatchInferRequest = BatchInferRequest(),
service: APIService = Depends(get_service),
) -> list[dict]:
return service.batch_infer(batch_size=payload.batch_size)
@router.post("/eval/run_baselines")
def eval_baselines(service: APIService = Depends(get_service)) -> dict:
return service.run_baselines()
@router.post("/eval/run_policy")
def eval_run_policy(service: APIService = Depends(get_service)) -> dict:
return service.run_policy_eval()
@router.post("/eval/run_dosing")
def eval_run_dosing(service: APIService = Depends(get_service)) -> dict:
return service.run_dosing_eval()
@router.get("/metrics/training")
def metrics_training(service: APIService = Depends(get_service)) -> dict:
return service.get_metrics()
@router.get("/cases/sample")
def cases_sample(service: APIService = Depends(get_service)) -> dict:
return service.sample_case()
@router.get("/cases/search")
def cases_search(q: str, service: APIService = Depends(get_service)) -> list[dict]:
return service.search_cases(q)
@router.post("/evidence/query")
def evidence_query(payload: EvidenceQueryRequest, service: APIService = Depends(get_service)) -> list[dict]:
return service.evidence_query(query=payload.query, top_k=payload.top_k)
|