AgentEvalTool/tests/unit/test_exploration_budget.py
sinohqb 53afb9b5d1 feat(campaigns): exploration seed set and budget config per campaign
v0.9 ticket 02. Campaigns now carry an exploration seed set (seed
personas × seed goals — the comparability unit for exploratory
evaluation) and an optional budget override, stored as JSON columns
isomorphic to plan. Empty seeds normalize to null, marking the campaign
as opted out of exploration. resolve_budget merges per-field overrides
into platform defaults; enforcement stays server-side. The create form
gains seed lists and budget inputs (minutes → seconds), submitting null
when left empty.
2026-08-03 17:52:25 +08:00

39 lines
1.2 KiB
Python

"""Unit tests for exploration budget resolution (platform defaults + campaign override)."""
from agenteval.exploration.models import resolve_budget
from agenteval.models import Campaign
def _campaign(**overrides) -> Campaign:
base = {
"name": "c",
"target_id": "t-1",
"window_seconds": 86400,
"plan": [{"scenario_id": "s-1", "offset_seconds": 0, "count": 1}],
}
base.update(overrides)
return Campaign(**base)
def test_platform_defaults_when_no_override():
budget = resolve_budget(_campaign())
assert budget.max_sessions == 8
assert budget.max_turns == 12
assert budget.min_interval_seconds == 30 * 60
def test_partial_override_falls_back_to_defaults():
campaign = _campaign(exploration_budget={"max_sessions": 3})
budget = resolve_budget(campaign)
assert budget.max_sessions == 3
assert budget.max_turns == 12
assert budget.min_interval_seconds == 30 * 60
def test_full_override():
campaign = _campaign(
exploration_budget={"max_sessions": 2, "max_turns": 5, "min_interval_seconds": 600}
)
budget = resolve_budget(campaign)
assert (budget.max_sessions, budget.max_turns, budget.min_interval_seconds) == (2, 5, 600)