diff --git a/core/requirements.txt b/core/requirements.txt index 2f5e1fd..6a6395f 100644 --- a/core/requirements.txt +++ b/core/requirements.txt @@ -11,4 +11,5 @@ presidio-analyzer>=2.2,<3.0 presidio-anonymizer>=2.2,<3.0 openai>=1.50,<2.0 PyYAML>=6.0,<7.0 +jsonschema>=4.0,<5.0 nemoguardrails>=0.10,<0.12 diff --git a/core/src/agentforge_core/guardrails/base.py b/core/src/agentforge_core/guardrails/base.py new file mode 100644 index 0000000..36c8dd5 --- /dev/null +++ b/core/src/agentforge_core/guardrails/base.py @@ -0,0 +1,29 @@ +"""Interfaz Protocol del motor de guardrails.""" + +from __future__ import annotations + +from typing import Any, Protocol +from uuid import UUID + +from agentforge_core.domain.guardrail import GuardrailViolation +from agentforge_core.domain.policy import PolicyDefinition + + +class GuardrailEngine(Protocol): + """Motor de validación. Las violaciones se devuelven; el grafo decide bloquear.""" + + name: str + + async def validate_input( + self, + payload: str, + policy: PolicyDefinition, + trace_id: UUID, + ) -> list[GuardrailViolation]: ... + + async def validate_output( + self, + payload: dict[str, Any], + policy: PolicyDefinition, + trace_id: UUID, + ) -> list[GuardrailViolation]: ...