mirror of
https://github.com/hoshikawa2/agent_platform_oci.git
synced 2026-09-07 10:13:46 +00:00
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
import pytest
|
|
|
|
from agent_framework.guardrails.rails import ProactiveOfferRail
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.parametrize("status", ["COLLECTING_PARAMETERS", "AWAITING_CONFIRMATION"])
|
|
async def test_aoferta_bypasses_transaction_continuation_without_llm(monkeypatch, status):
|
|
async def should_not_run(*args, **kwargs):
|
|
raise AssertionError("AOFERTA LLM must not run for transaction continuation")
|
|
|
|
monkeypatch.setattr(
|
|
"agent_framework.guardrails.rails.classify_with_framework_llm",
|
|
should_not_run,
|
|
)
|
|
|
|
decision = await ProactiveOfferRail().evaluate(
|
|
"Para prosseguir, informe valor.",
|
|
{"transaction_status": status},
|
|
)
|
|
|
|
assert decision.allowed is True
|
|
assert decision.code == "AOFERTA"
|
|
assert decision.metadata["mechanism"] == "deterministic_transaction_bypass"
|
|
assert decision.metadata["transaction_status"] == status
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_aoferta_detects_transaction_continuation_from_mcp_results(monkeypatch):
|
|
async def should_not_run(*args, **kwargs):
|
|
raise AssertionError("AOFERTA LLM must not run for transaction continuation")
|
|
|
|
monkeypatch.setattr(
|
|
"agent_framework.guardrails.rails.classify_with_framework_llm",
|
|
should_not_run,
|
|
)
|
|
|
|
decision = await ProactiveOfferRail().evaluate(
|
|
"Você confirma o cancelamento do serviço TIM Fashion?",
|
|
{
|
|
"mcp_results": [
|
|
{
|
|
"tool_name": "cancelar_vas_avulso",
|
|
"awaiting_confirmation": True,
|
|
"transaction_status": "AWAITING_CONFIRMATION",
|
|
}
|
|
]
|
|
},
|
|
)
|
|
|
|
assert decision.allowed is True
|
|
assert decision.metadata["transaction_status"] == "AWAITING_CONFIRMATION"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_aoferta_still_calls_llm_outside_transaction_continuation(monkeypatch):
|
|
calls = []
|
|
|
|
async def fake_classify(*args, **kwargs):
|
|
calls.append((args, kwargs))
|
|
return {"allowed": False, "reason": "oferta proativa"}
|
|
|
|
monkeypatch.setattr(
|
|
"agent_framework.guardrails.rails.classify_with_framework_llm",
|
|
fake_classify,
|
|
)
|
|
|
|
decision = await ProactiveOfferRail().evaluate(
|
|
"Quer aproveitar e cancelar outro serviço?",
|
|
{"transaction_status": "COMPLETED"},
|
|
)
|
|
|
|
assert len(calls) == 1
|
|
assert decision.allowed is False
|
|
assert decision.metadata["mechanism"] == "llm_supervisor"
|