45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""Tests del CompositeGuardrailEngine."""
|
|
|
|
from uuid import uuid4
|
|
|
|
import pytest
|
|
|
|
from forja_core.domain.policy import PolicyDefinition
|
|
from forja_core.guardrails.composite import CompositeGuardrailEngine
|
|
from forja_core.guardrails.guardrails_ai import GuardrailsAIEngine
|
|
from forja_core.guardrails.nemo import NeMoGuardrailsEngine
|
|
|
|
|
|
@pytest.fixture
|
|
def policy() -> PolicyDefinition:
|
|
return PolicyDefinition(
|
|
name="t",
|
|
version="v1",
|
|
description="t",
|
|
input_validators=[],
|
|
output_validators=[],
|
|
)
|
|
|
|
|
|
async def test_composite_agrega_violaciones_de_todos(policy: PolicyDefinition) -> None:
|
|
engine = CompositeGuardrailEngine(
|
|
[GuardrailsAIEngine(), NeMoGuardrailsEngine(allowed_keywords=["sip"])]
|
|
)
|
|
violations = await engine.validate_input("texto sin tema", policy, uuid4())
|
|
assert isinstance(violations, list)
|
|
# NeMo debe marcar off-topic (warning, no bloqueo)
|
|
assert any(v.validator == "NeMoTopicalRails" for v in violations)
|
|
|
|
|
|
async def test_composite_no_agrega_si_match_topic(policy: PolicyDefinition) -> None:
|
|
engine = CompositeGuardrailEngine(
|
|
[GuardrailsAIEngine(), NeMoGuardrailsEngine(allowed_keywords=["sip"])]
|
|
)
|
|
violations = await engine.validate_input("incidente sip en cscf", policy, uuid4())
|
|
assert not [v for v in violations if v.validator == "NeMoTopicalRails"]
|
|
|
|
|
|
def test_composite_rechaza_lista_vacia() -> None:
|
|
with pytest.raises(ValueError):
|
|
CompositeGuardrailEngine([])
|