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

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