Parlay / tests /test_tom.py
sh4shv4t's picture
feat: streamline parlay for demo mode and add spectator negotiation mechanics
2568517
"""Tests for agent/tom_tracker.py."""
import pytest
from parlay_env.models import BeliefState, HiddenState, PersonaType, TacticalMove
from agent.tom_tracker import ToMTracker
def _initial_belief() -> BeliefState:
return BeliefState(
est_budget=130_000, est_walk_away=135_000,
est_urgency=0.50, est_has_alternative=False, confidence=0.30,
)
def _hidden() -> HiddenState:
return HiddenState(
budget_ceiling=165_000, walk_away_price=125_000,
urgency_score=0.6, has_alternative=True, persona_drifted=False,
)
class TestToMTracker:
def test_initial_belief_stored(self):
tracker = ToMTracker(_initial_belief(), PersonaType.SHARK)
assert len(tracker.history) == 1, f"Expected 1, got {len(tracker.history)}"
assert tracker.current_belief.confidence == 0.30
def test_update_grows_history(self):
tracker = ToMTracker(_initial_belief(), PersonaType.SHARK)
tracker.update(observed_offer=140_000, observed_move=None, utterance="test", turn=1)
assert len(tracker.history) == 2, f"Expected 2, got {len(tracker.history)}"
def test_alternative_signal_in_utterance(self):
tracker = ToMTracker(_initial_belief(), PersonaType.DIPLOMAT)
tracker.update(
observed_offer=None,
observed_move=None,
utterance="We have a competitor offer on the table.",
turn=1,
)
assert tracker.current_belief.est_has_alternative is True, \
"Expected alternative to be detected from utterance"
def test_confidence_increases_over_turns(self):
tracker = ToMTracker(_initial_belief(), PersonaType.SHARK)
first_confidence = tracker.current_belief.confidence
tracker.update(140_000, None, "Let's review the data.", 1)
tracker.update(138_000, None, "What metrics support this?", 2)
assert tracker.current_belief.confidence > first_confidence, \
f"Expected confidence to grow: {first_confidence} -> {tracker.current_belief.confidence}"
def test_drift_event_reduces_confidence(self):
tracker = ToMTracker(_initial_belief(), PersonaType.SHARK)
pre_confidence = tracker.current_belief.confidence
tracker.drift_event(effect_on_urgency=0.3, effect_on_has_alternative=True)
assert tracker.current_belief.confidence < pre_confidence, \
"Expected confidence to drop after drift"
def test_accuracy_returns_zero_to_one(self):
tracker = ToMTracker(_initial_belief(), PersonaType.VETERAN)
acc = tracker.accuracy_against(_hidden())
assert 0.0 <= acc <= 1.0, f"Expected [0,1], got {acc}"
def test_bluffs_detected_increments(self):
tracker = ToMTracker(_initial_belief(), PersonaType.SHARK)
tracker.update(
observed_offer=None,
observed_move=TacticalMove.BATNA_REVEAL,
utterance="We have a competitor offering less.",
turn=1,
)
assert tracker.bluffs_detected >= 1, \
f"Expected bluff to be detected, got {tracker.bluffs_detected}"