from __future__ import annotations from pydantic import BaseModel, Field from typing import List, Dict, Optional from enum import Enum class Emotion(str, Enum): CALM = "calm" HAPPY = "happy" ANXIOUS = "anxious" class Weather(str, Enum): SUNNY = "sunny" RAINY = "rainy" class GlobalMeter(BaseModel): """全体能量条""" value: int = 0 threshold: int = 100 cooldown: int = 0 class WorldEffect(BaseModel): """持续影响效果""" type: str name: str intensity: int = 1 remaining_ticks: int = 5 mood_modifier: int = 0 class AgentState(BaseModel): emotion: Emotion = Emotion.CALM goal: str = "" memory: List[str] = Field(default_factory=list) class WorldState(BaseModel): tick: int = 0 weather: Weather = Weather.SUNNY town_mood: int = Field(default=0, ge=-10, le=10) agents: Dict[str, AgentState] = Field(default_factory=dict) events: List[str] = Field(default_factory=list) global_meter: GlobalMeter = Field(default_factory=GlobalMeter) world_effects: List[WorldEffect] = Field(default_factory=list) class Event(BaseModel): type: str text: str user: str ts: float class StepRequest(BaseModel): events: List[Event] = Field(default_factory=list) class Action(BaseModel): agent_id: str say: str do: str class GlobalEventInfo(BaseModel): """世界级事件信息""" name: str description: str class GlobalEventResult(BaseModel): """世界级事件触发结果""" triggered: bool = False event: Optional[GlobalEventInfo] = None class StepResponse(BaseModel): world_state: WorldState actions: List[Action] global_event: GlobalEventResult = Field(default_factory=GlobalEventResult)