mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-15 19:10:47 +02:00
Co-authored-by: James Brunton <[email protected]> Co-authored-by: EthanHealy01 <[email protected]>
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
"""
|
|
Math Auditor Agent (mathAuditorAgent) — FastAPI routes.
|
|
|
|
Two internal endpoints, called only by the Java MathAuditorOrchestrator:
|
|
|
|
POST /api/v1/ai/math-auditor-agent/examine
|
|
Java sends a FolioManifest (cheap page classification).
|
|
Python returns a Requisition (what Java must extract).
|
|
|
|
POST /api/v1/ai/math-auditor-agent/deliberate
|
|
Java sends Evidence (fulfilled extraction results).
|
|
Python returns a Verdict directly.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
from decimal import Decimal, InvalidOperation
|
|
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
|
|
from stirling.agents.ledger import MathAuditorAgent
|
|
from stirling.api.dependencies import get_math_auditor_agent
|
|
from stirling.contracts.ledger import (
|
|
Evidence,
|
|
FolioManifest,
|
|
Requisition,
|
|
Verdict,
|
|
)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
router = APIRouter(prefix="/api/v1/ai/math-auditor-agent", tags=["math-auditor-agent"])
|
|
|
|
|
|
@router.post("/examine", response_model=Requisition)
|
|
async def examine_endpoint(
|
|
manifest: FolioManifest,
|
|
agent: Annotated[MathAuditorAgent, Depends(get_math_auditor_agent)],
|
|
) -> Requisition:
|
|
"""Round 1: Java presents a FolioManifest; Python declares its Requisition."""
|
|
return await agent.examine(manifest)
|
|
|
|
|
|
@router.post("/deliberate", response_model=Verdict)
|
|
async def deliberate_endpoint(
|
|
evidence: Evidence,
|
|
agent: Annotated[MathAuditorAgent, Depends(get_math_auditor_agent)],
|
|
tolerance: str = Query(default="0.01"),
|
|
) -> Verdict:
|
|
"""Round 2: Java presents fulfilled Evidence; Python returns a Verdict."""
|
|
try:
|
|
tol = Decimal(tolerance)
|
|
if tol < 0:
|
|
raise HTTPException(status_code=400, detail="tolerance must be non-negative")
|
|
except InvalidOperation:
|
|
raise HTTPException(status_code=400, detail=f"Invalid tolerance value: {tolerance!r}")
|
|
|
|
return await agent.audit(evidence, tol)
|