Spaces:
Running
Running
File size: 1,947 Bytes
414dc55 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | """Shared enumerations for Case Zero schemas.
These constrain the *shape* of a case (so it stays solvable and the grammars stay
small). The model still invents all creative content - names, motives, prose, and
the specific clues - freely within these buckets.
"""
from __future__ import annotations
from enum import StrEnum
class Difficulty(StrEnum):
GENTLE = "gentle"
STANDARD = "standard"
HARD = "hard"
FIENDISH = "fiendish"
class DiscoveryMethod(StrEnum):
"""How a clue can be obtained. Non-INTERROGATION methods guarantee a clue is
reachable even if no suspect ever volunteers it (the discoverability gate)."""
SEARCH = "search"
INTERROGATION = "interrogation"
FORENSIC = "forensic"
DOCUMENT = "document"
class MotiveCategory(StrEnum):
GREED = "greed"
REVENGE = "revenge"
JEALOUSY = "jealousy"
FEAR = "fear"
AMBITION = "ambition"
LOVE = "love"
CONCEALMENT = "concealment"
LOYALTY = "loyalty"
class Intent(StrEnum):
"""The suspect's chosen posture for a single turn (advisory, model-reported)."""
COOPERATE = "cooperate"
DEFLECT = "deflect"
DENY = "deny"
VOLUNTEER = "volunteer"
BREAK_DOWN = "break_down"
class EvidenceReaction(StrEnum):
"""How the suspect reacts when shown evidence (advisory, model-reported)."""
NONE = "none"
DEFLECT = "deflect"
PANIC = "panic"
CONCEDE = "concede"
class Relevance(StrEnum):
"""Deterministic relevance of presented evidence to a suspect's dossier.
Computed by the engine (never the model). ``BREAKING`` means the evidence is
listed in one of the suspect's ``AnchoredLie.breaks_on`` sets.
"""
NONE = "none"
TANGENTIAL = "tangential"
DIRECT = "direct"
BREAKING = "breaking"
class SubjectType(StrEnum):
SUSPECT = "suspect"
SCENE = "scene"
PROP = "prop"
|