35 lines
1.5 KiB
Python
35 lines
1.5 KiB
Python
from pathlib import Path
|
|
from app.services.interviews.base import PersonaRecord, MemoryDigest
|
|
from app.services.interviews.scenario import ScenarioSubagent, polarity_matrix
|
|
|
|
INSTRUMENT = Path(__file__).resolve().parents[2] / "scripts" / "instruments" / "scenario_v1.yaml"
|
|
|
|
class _Mem:
|
|
def get_digest(self, agent_id, max_chars=2000):
|
|
return MemoryDigest(text="x", available=True)
|
|
|
|
class _LLM:
|
|
def chat_json(self, messages, temperature=0.0, max_tokens=None, **kw):
|
|
return {"ratings": {sid: {
|
|
"desirability": 4, "plausibility": 3, "impact_on_my_group": 5, "fairness": 3,
|
|
"if_woke_up_response": f"act-on-{sid}",
|
|
} for sid in ("S1", "S2", "S3", "S4")}}
|
|
|
|
def test_scenario_administer():
|
|
sub = ScenarioSubagent(llm=_LLM(), memory=_Mem(), instrument_path=INSTRUMENT)
|
|
persona = PersonaRecord(agent_id=1, name="A", persona="p")
|
|
resp = sub.administer(persona)
|
|
assert set(resp.ratings.keys()) == {"S1", "S2", "S3", "S4"}
|
|
assert resp.ratings["S1"].desirability == 4
|
|
|
|
def test_polarity_matrix():
|
|
from app.models.interview import ScenarioResponse, ScenarioRating
|
|
responses = [ScenarioResponse(agent_id=i, ratings={
|
|
"S1": ScenarioRating(desirability=5, plausibility=4, impact_on_my_group=5, fairness=4,
|
|
if_woke_up_response="x"),
|
|
}) for i in range(3)]
|
|
m = polarity_matrix(responses)
|
|
assert "S1" in m
|
|
assert m["S1"]["mean_desirability"] == 5
|
|
assert m["S1"]["n"] == 3
|