2024-05-13 04:33:47 +00:00
|
|
|
from typing import Callable, Dict, List, Literal
|
2024-05-02 11:56:57 +00:00
|
|
|
|
|
|
|
from pydantic import Field
|
|
|
|
|
2024-05-24 02:57:21 +00:00
|
|
|
from .base import Attributes, BaseModel, dataclass, uuid
|
|
|
|
from .effect import EffectPattern, EffectResult
|
2024-05-25 20:18:40 +00:00
|
|
|
from .planning import Planner
|
2024-05-02 11:56:57 +00:00
|
|
|
|
|
|
|
Actions = Dict[str, Callable]
|
2024-05-16 04:12:06 +00:00
|
|
|
|
|
|
|
|
2024-05-02 11:56:57 +00:00
|
|
|
@dataclass
|
2024-05-13 04:33:47 +00:00
|
|
|
class Item(BaseModel):
|
2024-05-02 11:56:57 +00:00
|
|
|
name: str
|
|
|
|
description: str
|
|
|
|
actions: Actions = Field(default_factory=dict)
|
2024-05-24 02:57:21 +00:00
|
|
|
active_effects: List[EffectResult] = Field(default_factory=list)
|
2024-05-05 22:46:24 +00:00
|
|
|
attributes: Attributes = Field(default_factory=dict)
|
2024-05-24 02:57:21 +00:00
|
|
|
effects: List[EffectPattern] = Field(default_factory=list)
|
2024-05-13 04:33:47 +00:00
|
|
|
items: List["Item"] = Field(default_factory=list)
|
|
|
|
id: str = Field(default_factory=uuid)
|
|
|
|
type: Literal["item"] = "item"
|
2024-05-02 11:56:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
2024-05-27 01:32:03 +00:00
|
|
|
class Character(BaseModel):
|
2024-05-02 11:56:57 +00:00
|
|
|
name: str
|
|
|
|
backstory: str
|
|
|
|
description: str
|
2024-05-25 20:18:40 +00:00
|
|
|
planner: Planner = Field(default_factory=Planner)
|
2024-05-02 11:56:57 +00:00
|
|
|
actions: Actions = Field(default_factory=dict)
|
2024-05-24 02:57:21 +00:00
|
|
|
active_effects: List[EffectResult] = Field(default_factory=list)
|
2024-05-05 22:46:24 +00:00
|
|
|
attributes: Attributes = Field(default_factory=dict)
|
2024-05-13 04:33:47 +00:00
|
|
|
items: List[Item] = Field(default_factory=list)
|
|
|
|
id: str = Field(default_factory=uuid)
|
2024-05-27 01:32:03 +00:00
|
|
|
type: Literal["character"] = "character"
|
2024-05-02 11:56:57 +00:00
|
|
|
|
|
|
|
|
2024-05-19 00:48:18 +00:00
|
|
|
@dataclass
|
|
|
|
class Portal(BaseModel):
|
|
|
|
name: str
|
|
|
|
description: str
|
|
|
|
destination: str
|
|
|
|
actions: Actions = Field(default_factory=dict)
|
|
|
|
attributes: Attributes = Field(default_factory=dict)
|
|
|
|
id: str = Field(default_factory=uuid)
|
|
|
|
type: Literal["portal"] = "portal"
|
|
|
|
|
|
|
|
|
2024-05-02 11:56:57 +00:00
|
|
|
@dataclass
|
2024-05-13 04:33:47 +00:00
|
|
|
class Room(BaseModel):
|
2024-05-02 11:56:57 +00:00
|
|
|
name: str
|
|
|
|
description: str
|
2024-05-27 01:32:03 +00:00
|
|
|
characters: List[Character] = Field(default_factory=list)
|
2024-05-02 11:56:57 +00:00
|
|
|
actions: Actions = Field(default_factory=dict)
|
2024-05-24 02:57:21 +00:00
|
|
|
active_effects: List[EffectResult] = Field(default_factory=list)
|
2024-05-05 22:46:24 +00:00
|
|
|
attributes: Attributes = Field(default_factory=dict)
|
2024-05-13 04:33:47 +00:00
|
|
|
items: List[Item] = Field(default_factory=list)
|
2024-05-19 00:48:18 +00:00
|
|
|
portals: List[Portal] = Field(default_factory=list)
|
2024-05-13 04:33:47 +00:00
|
|
|
id: str = Field(default_factory=uuid)
|
|
|
|
type: Literal["room"] = "room"
|
2024-05-02 11:56:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
2024-05-13 04:33:47 +00:00
|
|
|
class World(BaseModel):
|
2024-05-02 14:20:47 +00:00
|
|
|
name: str
|
2024-05-04 04:18:21 +00:00
|
|
|
order: List[str]
|
2024-05-02 11:56:57 +00:00
|
|
|
rooms: List[Room]
|
|
|
|
theme: str
|
2024-05-13 04:33:47 +00:00
|
|
|
id: str = Field(default_factory=uuid)
|
|
|
|
type: Literal["world"] = "world"
|
2024-05-02 11:56:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
2024-05-13 04:33:47 +00:00
|
|
|
class WorldState(BaseModel):
|
2024-05-02 11:56:57 +00:00
|
|
|
memory: Dict[str, List[str | Dict[str, str]]]
|
|
|
|
step: int
|
2024-05-04 04:18:21 +00:00
|
|
|
world: World
|
2024-05-13 04:33:47 +00:00
|
|
|
id: str = Field(default_factory=uuid)
|
|
|
|
type: Literal["world_state"] = "world_state"
|
2024-05-09 02:11:16 +00:00
|
|
|
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
WorldEntity = Room | Character | Item | Portal
|
2024-05-25 20:18:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
class EntityReference:
|
2024-05-27 01:32:03 +00:00
|
|
|
character: str | None = None
|
2024-05-25 20:18:40 +00:00
|
|
|
item: str | None = None
|
|
|
|
portal: str | None = None
|
|
|
|
room: str | None = None
|