feat(api): implementa routers /policies y /violations (listado + filtros)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,23 @@
|
||||
"""Router stub de /policies — se implementa en una task posterior."""
|
||||
"""Router /policies: listado de políticas y de sus versiones."""
|
||||
|
||||
from fastapi import APIRouter
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, HTTPException
|
||||
|
||||
from agentforge_core.api.deps import PolicyStoreDep
|
||||
from agentforge_core.domain.policy import PolicyDefinition, PolicyVersionMeta
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("", response_model=list[PolicyDefinition])
|
||||
def list_policies(store: PolicyStoreDep) -> list[PolicyDefinition]:
|
||||
return store.list_policies()
|
||||
|
||||
|
||||
@router.get("/{name}/versions", response_model=list[PolicyVersionMeta])
|
||||
def list_versions(name: str, store: PolicyStoreDep) -> list[PolicyVersionMeta]:
|
||||
try:
|
||||
return store.list_versions(name)
|
||||
except FileNotFoundError as exc:
|
||||
raise HTTPException(status_code=404, detail=str(exc)) from exc
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
"""Router stub de /violations — se implementa en una task posterior."""
|
||||
"""Router /violations: listado filtrable por trace_id y severidad."""
|
||||
|
||||
from fastapi import APIRouter
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Annotated, Literal
|
||||
from uuid import UUID
|
||||
|
||||
from fastapi import APIRouter, Query
|
||||
|
||||
from agentforge_core.api.deps import SettingsDep
|
||||
from agentforge_core.api.persistence import read_violations
|
||||
from agentforge_core.domain.guardrail import GuardrailViolation
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("", response_model=list[GuardrailViolation])
|
||||
def list_violations(
|
||||
settings: SettingsDep,
|
||||
trace_id: Annotated[UUID | None, Query()] = None,
|
||||
severity: Annotated[Literal["info", "warning", "block"] | None, Query()] = None,
|
||||
) -> list[GuardrailViolation]:
|
||||
items = read_violations(settings.data_dir)
|
||||
if trace_id is not None:
|
||||
items = [v for v in items if v.trace_id == trace_id]
|
||||
if severity is not None:
|
||||
items = [v for v in items if v.severity == severity]
|
||||
return items
|
||||
|
||||
Reference in New Issue
Block a user