interactive-chat / engine /schemas /character.py
Junhoee's picture
Upload 98 files
f646e0b verified
Raw
History Blame Contribute Delete
1.89 kB
"""์ธ๋ฌผ ์ •์ฒด์„ฑ YAML ์Šคํ‚ค๋งˆ (ENOS) โ€” content/characters.yaml.
kb_query ํ•ญ๋ชฉ์€ pre_kb ์ƒํƒœ(status: pending)๋กœ ํ†ต๊ณผ์‹œํ‚จ๋‹ค.
"""
from __future__ import annotations
from typing import Optional
from pydantic import BaseModel, ConfigDict, Field
class KnowledgeItem(BaseModel):
model_config = ConfigDict(extra="forbid")
value: Optional[str] = None
source: str = "static" # static | kb_query
query: str = ""
status: str = "" # kb_query๋ฉด "pending" (pre_kb)
class Role(BaseModel):
model_config = ConfigDict(extra="forbid")
type: str = ""
description: str = ""
player_controlled: bool = False
perspective: str = ""
class Personality(BaseModel):
model_config = ConfigDict(extra="forbid")
traits: list[str] = Field(default_factory=list)
strengths: list[str] = Field(default_factory=list)
weaknesses: list[str] = Field(default_factory=list)
class Speech(BaseModel):
model_config = ConfigDict(extra="forbid")
style: list[str] = Field(default_factory=list)
tone: list[str] = Field(default_factory=list)
pacing: list[str] = Field(default_factory=list)
class CharacterSheet(BaseModel):
# ์›๋ณธ YAML์— ๋ถ€๊ฐ€ ํ•„๋“œ๊ฐ€ ์žˆ์–ด๋„ ์ฝ˜ํ…์ธ ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋ฐ›์•„๋“ค์ธ๋‹ค (์ฝ๊ธฐ ์ „์šฉ ์›์น™)
model_config = ConfigDict(extra="allow")
id: str
display_name: str
aliases: list[str] = Field(default_factory=list)
role: Role = Field(default_factory=Role)
description: str = ""
personality: Personality = Field(default_factory=Personality)
speech: Speech = Field(default_factory=Speech)
permanent_knowledge: list[KnowledgeItem] = Field(default_factory=list)
immutable_constraints: list[KnowledgeItem] = Field(default_factory=list)
class CharactersFile(BaseModel):
model_config = ConfigDict(extra="allow")
characters: list[CharacterSheet]