mirror of
https://github.com/hoshikawa2/agent_platform_oci.git
synced 2026-09-07 18:23:46 +00:00
bugfixes: router stickness vs transaction workflow parameters
This commit is contained in:
75
tests/test_aoferta_transaction_continuation.py
Normal file
75
tests/test_aoferta_transaction_continuation.py
Normal file
@@ -0,0 +1,75 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user