You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.6 KiB
91 lines
3.6 KiB
from __future__ import annotations
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class SocialEdge(BaseModel):
|
|
target_id: int
|
|
strength: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
sentiment: float = Field(default=0.0, ge=-1.0, le=1.0)
|
|
|
|
|
|
class Personality(BaseModel):
|
|
honesty: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
ambition: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
empathy: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
confrontational: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
conformity: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
brand_loyalty: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
price_sensitivity: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
social_proof: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
novelty_seeking: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
|
|
|
|
COMMUNICATION_STYLES = {
|
|
"terse": "You speak in short, blunt sentences. 5-10 words max. No pleasantries. 'Cancelled. Moving on.'",
|
|
"sarcastic": "You use irony and dry humor. You rarely say what you mean directly. 'Oh great, another price hike. What a surprise.'",
|
|
"verbose": "You over-explain. You use qualifiers, caveats, and parentheticals. You think out loud.",
|
|
"question-asker": "You respond to statements with questions. You probe rather than declare. 'But have you actually looked at the alternatives?'",
|
|
"anecdote-teller": "You relate everything to personal stories. 'This reminds me of when Blockbuster...'",
|
|
"data-driven": "You cite numbers, comparisons, facts. You distrust emotional arguments. 'The math doesn't work out.'",
|
|
"emotional": "You lead with feelings. Exclamation marks, dramatic phrasing, personal impact.",
|
|
"passive-aggressive": "You agree on the surface but undermine subtly. 'Sure, if that works for you...'",
|
|
}
|
|
|
|
|
|
class FamilyMember(BaseModel):
|
|
name: str
|
|
relation: str
|
|
age: int
|
|
status: str = "healthy"
|
|
dependency: float = Field(default=0.0, ge=0.0, le=1.0)
|
|
bond_strength: float = Field(default=0.7, ge=0.0, le=1.0)
|
|
|
|
|
|
class FormativeEvent(BaseModel):
|
|
age_at_event: int
|
|
description: str
|
|
lasting_effect: str
|
|
trait_modifier: dict[str, float] = Field(default_factory=dict)
|
|
|
|
|
|
class LifePressure(BaseModel):
|
|
domain: str
|
|
description: str
|
|
severity: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
deadline_day: int | None = None
|
|
created_day: int = 0
|
|
|
|
|
|
class LifeState(BaseModel):
|
|
childhood_summary: str
|
|
formative_events: list[FormativeEvent] = Field(default_factory=list)
|
|
family: list[FamilyMember] = Field(default_factory=list)
|
|
finances: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
career: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
health: float = Field(default=0.5, ge=0.0, le=1.0)
|
|
pressures: list[LifePressure] = Field(default_factory=list)
|
|
life_log: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class AgentPersona(BaseModel):
|
|
id: int
|
|
name: str
|
|
role: str
|
|
age: int
|
|
personality: Personality
|
|
background: str
|
|
goals: list[str] = Field(default_factory=list)
|
|
core_memory: list[str] = Field(default_factory=list)
|
|
working_memory: list[str] = Field(default_factory=list)
|
|
beliefs: list[str] = Field(default_factory=list)
|
|
relationships: dict[str, str] = Field(default_factory=dict)
|
|
resources: dict[str, int] = Field(default_factory=dict)
|
|
location: str = "community"
|
|
faction: str | None = None
|
|
emotional_state: str = "calm"
|
|
social_connections: list[SocialEdge] = Field(default_factory=list)
|
|
communication_style: str = Field(default="emotional")
|
|
knowledge_level: str = Field(default="full")
|
|
life_state: LifeState | None = None
|
|
abandoned_products: set[str] = Field(default_factory=set)
|
|
has_defected: bool = False
|
|
|