Files
LAIC/core/character/character.py
2026-04-29 07:19:21 +03:00

85 lines
3.0 KiB
Python

from pydantic import BaseModel, Field
from typing import List, Optional
from pathlib import Path
import uuid
import json
from datetime import datetime
import os
class Character():
"""Основной класс персонажа"""
def __init__(
self,
name: str,
display_name: str,
char_description: str = "",
avatar_path: Optional[str] = None,
backgrounds: Optional[str] = None,
persona: str = "",
scenario: str = "",
first_message: str = "",
id: Optional[str] = None,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None
):
self.id = id if id is not None else str(uuid.uuid4())
self.name = name
self.display_name = display_name
self.char_description = char_description
self.avatar_path = avatar_path
self.backgrounds = backgrounds
self.persona = persona
self.scenario = scenario
self.first_message = first_message
self.temperature = temperature
self.max_tokens = max_tokens
# Methods:
def to_dict(self):
return {
"id": self.id,
"name": self.name,
"display_name": self.display_name,
"char_description": self.char_description,
"avatar_path": self.avatar_path,
"backgrounds": self.backgrounds,
"persona": self.persona,
"scenario": self.scenario,
"first_message": self.first_message,
"temperature": self.temperature,
"max_tokens": self.max_tokens
}
def save(self):
# Используем абсолютный путь от корня проекта
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
char_path = os.path.join(project_root, "data", "characters", f"{self.id}.json")
with open(char_path, "w", encoding="utf-8") as f:
json.dump(self.to_dict(), f, ensure_ascii=False, indent=2)
@classmethod
def load(cls, char_id):
# Используем абсолютный путь от корня проекта
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
char_path = os.path.join(project_root, "data", "characters", f"{char_id}.json")
with open(char_path, "r", encoding="utf-8") as f:
data = json.load(f)
return cls(
id=data.get("id"),
name=data.get("name", ""),
display_name=data.get("display_name", ""),
char_description=data.get("char_description", ""),
avatar_path=data.get("avatar_path"),
backgrounds=data.get("backgrounds"),
persona=data.get("persona", ""),
scenario=data.get("scenario", ""),
first_message=data.get("first_message", ""),
temperature=data.get("temperature"),
max_tokens=data.get("max_tokens")
)