dream-customs / tests /test_model_led_pact.py
ADJCJH's picture
Deploy Dream Customs dream QA refactor (#16)
19c5492
Raw
History Blame
7.96 kB
from dream_customs.models import FakeTextClient
from dream_customs.pipeline import build_intake, generate_model_led_pact
from dream_customs.prompts import (
dream_brief_prompt,
pact_critique_prompt,
pact_draft_prompt,
pact_rewrite_prompt,
)
from dream_customs.schema import DreamBrief, PactCard, PactCritique
def test_dream_brief_prompt_requires_english_demo_brief():
intake = build_intake(
dream_text="I kept missing an elevator. The buttons melted like wax, and floor 14 froze.",
visual_clues=["Visible text: 14", "Object: melted button"],
mood="Uneasy",
)
prompt = dream_brief_prompt(intake)
assert "English demo" in prompt
assert "anchors" in prompt
assert "visual_evidence" in prompt
assert "Do not diagnose" in prompt
assert "emotional_hypothesis" in prompt
assert "today_bridge" in prompt
assert "safety_flags" in prompt
assert "language" in prompt
assert '"en"' in prompt
assert "Return strict JSON" in prompt
def test_pact_draft_prompt_uses_brief_not_template_fallback():
brief = DreamBrief(
anchors=["elevator", "melted wax", "floor 14"],
emotional_hypothesis="The dream may be protecting a fear of getting stuck.",
today_bridge="Choose one stalled task and name the next small movement.",
visual_evidence=["Visible text: 14"],
)
prompt = pact_draft_prompt(brief, "I want to stop freezing before a task.")
assert "Write natural English" in prompt
assert "Use at least two anchors" in prompt
assert "Do not use template phrases" in prompt
assert "Use visual_evidence if present" in prompt
assert "elevator" in prompt
assert "visitor_name" in prompt
assert "permit_id" in prompt
assert "contraband" in prompt
assert "risk_level" in prompt
assert "alliance_reading" in prompt
assert "practical_suggestion" in prompt
assert "weird_task" in prompt
assert "bedtime_release" in prompt
assert "safety_note" in prompt
def test_pact_critique_prompt_checks_screenshot_regression():
brief = DreamBrief(
anchors=["elevator", "melted wax", "floor 14"],
emotional_hypothesis="The dream may be protecting a fear of getting stuck.",
today_bridge="Choose one stalled task and name the next small movement.",
visual_evidence=["Visible text: 14"],
)
card = PactCard(
visitor_name="The Elevator",
permit_id="DREAM20260608-014",
contraband=["stuck feeling"],
risk_level="low",
alliance_reading="The an elevator is trying to keep you from rushing.",
practical_suggestion="Take the the next small step.",
weird_task="Tap an imaginary floor 14 button.",
bedtime_release="The elevator can rest outside my room tonight.",
)
prompt = pact_critique_prompt(brief, card)
assert "the an" in prompt
assert "the the" in prompt
assert "invented details" in prompt
assert "natural English" in prompt
assert "passes" in prompt
assert "issues" in prompt
assert "rewrite_instruction" in prompt
assert "diagnosis" in prompt
assert "frightening certainty" in prompt
assert "generic wellness" in prompt
assert "missing anchors" in prompt
def test_pact_rewrite_prompt_uses_critique_instruction():
brief = DreamBrief(
anchors=["elevator", "melted wax", "floor 14"],
emotional_hypothesis="The dream may be protecting a fear of getting stuck.",
today_bridge="Choose one stalled task and name the next small movement.",
visual_evidence=["Visible text: 14"],
)
card = PactCard(
visitor_name="The Elevator",
permit_id="DREAM20260608-014",
contraband=["stuck feeling"],
risk_level="low",
alliance_reading="The an elevator is trying to keep you from rushing.",
practical_suggestion="Take the the next small step.",
weird_task="Tap an imaginary floor 14 button.",
bedtime_release="The elevator can rest outside my room tonight.",
)
critique = PactCritique(
passes=False,
issues=["repeated article"],
rewrite_instruction="Rewrite without repeated articles while preserving floor 14.",
)
prompt = pact_rewrite_prompt(brief, card, critique)
assert "Rewrite without repeated articles" in prompt
assert "Return strict JSON" in prompt
assert "floor 14" in prompt
assert "visitor_name" in prompt
assert "permit_id" in prompt
assert "contraband" in prompt
assert "risk_level" in prompt
assert "alliance_reading" in prompt
assert "practical_suggestion" in prompt
assert "weird_task" in prompt
assert "bedtime_release" in prompt
assert "safety_note" in prompt
assert "safe non-diagnostic" in prompt
assert "natural English" in prompt
assert "Do not add objects" in prompt
def test_fake_text_client_supports_model_led_methods():
client = FakeTextClient()
brief = client.generate_brief("brief prompt")
card = client.generate_pact_draft("draft prompt")
critique = client.critique_pact("critique prompt")
assert brief.language == "en"
assert brief.anchors
assert card.visitor_name
assert critique.passes
def test_model_led_pact_rewrites_screenshot_elevator_regression():
class CriticTextClient(FakeTextClient):
def generate_pact_draft(self, prompt):
return PactCard(
visitor_name="An Elevator",
permit_id="DREAM20260608-015",
contraband=["melted buttons", "froze at 14"],
risk_level="medium: handle gently, without treating it as a warning sign",
alliance_reading="I am safe, but the wax is sticky and the floor is cold.",
practical_suggestion="Pick one real task that feels like the an elevator.",
weird_task="I will try to push the floor button with my hand instead of the lever.",
bedtime_release="Tonight, the an elevator and the the button are logged.",
)
def critique_pact(self, prompt):
return PactCritique(
passes=False,
issues=["repeated article", "invented lever"],
rewrite_instruction="Rewrite without repeated articles or the invented lever.",
)
def rewrite_pact(self, prompt):
return PactCard(
visitor_name="The Elevator Stuck at 14",
permit_id="DREAM20260608-015",
contraband=["melted buttons", "floor 14", "the urge to freeze before starting"],
risk_level="medium: handle gently, without treating it as a warning sign",
alliance_reading=(
"The elevator, wax-soft buttons, and frozen 14 can be treated as a small scene "
"about getting stuck before the first move."
),
practical_suggestion="Choose one stalled task and write only the next button-sized action.",
weird_task="Draw floor 14 on a sticky note, tap it once, and spend five minutes on the first step.",
bedtime_release=(
"Tonight, the elevator can stay on floor 14 while tomorrow's first button waits quietly."
),
)
intake = build_intake(
dream_text="I kept missing an elevator. The buttons melted like wax, and the floor number froze at 14.",
visual_clues=["Visible text: 14", "Object: melted elevator button"],
mood="Uneasy",
)
card, html = generate_model_led_pact(intake, "", CriticTextClient())
joined = card.to_plain_text().lower()
assert "the an" not in joined
assert "the the" not in joined
assert "lever" not in joined
assert "floor 14" in joined
assert "melted" in joined or "wax" in joined
assert "Today's Clearance Pass" in html or "Today's Pact" in html