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.
 
 
 
 
 

73 lines
2.3 KiB

from __future__ import annotations
from typing import Literal
from pydantic import BaseModel, Field
class Location(BaseModel):
id: str
name: str
type: Literal["public", "commerce", "governance", "residential", "social"]
description: str
class TimeConfig(BaseModel):
total_days: int = 365
rounds_per_day: int = 3
active_agents_per_round_min: int = 3
active_agents_per_round_max: int = 10
class WorldBlueprint(BaseModel):
name: str
description: str
rules: list[str]
locations: list[Location]
resources: list[str]
initial_tensions: list[str]
time_config: TimeConfig
class WorldMetrics(BaseModel):
stability: float = Field(default=0.5, ge=0.0, le=1.0)
prosperity: float = Field(default=0.5, ge=0.0, le=1.0)
trust: float = Field(default=0.5, ge=0.0, le=1.0)
freedom: float = Field(default=0.5, ge=0.0, le=1.0)
conflict: float = Field(default=0.2, ge=0.0, le=1.0)
brand_sentiment: float = Field(default=0.5, ge=0.0, le=1.0)
purchase_intent: float = Field(default=0.5, ge=0.0, le=1.0)
word_of_mouth: float = Field(default=0.0, ge=0.0, le=1.0)
churn_risk: float = Field(default=0.2, ge=0.0, le=1.0)
adoption_rate: float = Field(default=0.0, ge=0.0, le=1.0)
information_spread: float = Field(default=0.0, ge=0.0, le=1.0)
echo_chamber_index: float = Field(default=0.0, ge=0.0, le=1.0)
rumor_distortion: float = Field(default=0.0, ge=0.0, le=1.0)
class Institution(BaseModel):
name: str
purpose: str
founder_id: int
member_ids: list[int] = Field(default_factory=list)
rules: list[str] = Field(default_factory=list)
created_day: int = 0
class Proposal(BaseModel):
id: str
proposer_id: int
content: str
votes_for: list[int] = Field(default_factory=list)
votes_against: list[int] = Field(default_factory=list)
status: Literal["open", "passed", "rejected"] = "open"
created_round: int = 0
class WorldState(BaseModel):
blueprint: WorldBlueprint
metrics: WorldMetrics = Field(default_factory=WorldMetrics)
institutions: list[Institution] = Field(default_factory=list)
proposals: list[Proposal] = Field(default_factory=list)
day: int = 1
round_in_day: int = 0
active_disputes: list[str] = Field(default_factory=list)
community_rules: list[str] = Field(default_factory=list)