Files
LivingAgents/living_agents/datatypes.py
2025-09-01 06:43:11 +02:00

47 lines
1.4 KiB
Python

from dataclasses import dataclass, field
from typing import Dict, List, Optional, Literal, TypedDict
from datetime import datetime
from uuid import uuid4
class CharacterTemplate(TypedDict):
name: str
observations: List[str]
reflections: List[str]
plans: List[str]
yaml_file: str
@dataclass
class Memory:
"""A single memory object with Stanford's architecture"""
description: str
creation_time: datetime = field(default_factory=datetime.now)
last_accessed: datetime = field(default_factory=datetime.now)
importance_score: int = 5 # 1-10 scale
embedding: Optional[List[float]] = None
memory_type: Literal["observation", "reflection", "plan"] = "observation"
related_memories: List[int] = field(default_factory=list) # IDs of supporting memories
def __post_init__(self):
if self.last_accessed is None:
self.last_accessed = self.creation_time
@dataclass
class Character:
name: str # Still required
age: Optional[int] = None
personality: str = ""
occupation: str = ""
location: str = ""
relationships: Dict[str, str] = field(default_factory=dict)
goals: List[str] = field(default_factory=list)
_id: str = field(default_factory=lambda: str(uuid4())[:8])
def __hash__(self):
return hash(self._id)
def __eq__(self, other):
return isinstance(other, Character) and self._id == other._id