from typing import Any from fastapi import APIRouter, HTTPException from pydantic import BaseModel, Field from app.character.service import CharacterService router = APIRouter() class CharacterCardData(BaseModel): name: str = "Ассистент" description: str = "" personality: str = "" scenario: str = "" first_mes: str = "" mes_example: str = "" system_prompt: str = "" post_history_instructions: str = "" tags: list[str] = Field(default_factory=list) creator: str = "" creator_notes: str = "" alternate_greetings: list[str] = Field(default_factory=list) character_version: str = "1.0" class CharacterCardV2(BaseModel): spec: str = "chara_card_v2" spec_version: str = "2.0" data: CharacterCardData @router.get("/character") def get_character() -> dict[str, Any]: return CharacterService().get_card() @router.put("/character") def update_character(payload: CharacterCardV2) -> dict[str, Any]: return CharacterService().save_card(payload.model_dump()) @router.get("/character/prompt") def get_character_prompt() -> dict[str, str]: service = CharacterService() return { "system_prompt": service.get_system_prompt(), "first_mes": service.get_card().get("data", {}).get("first_mes", ""), } @router.post("/character/import") def import_character(payload: dict[str, Any]) -> dict[str, Any]: if not payload: raise HTTPException(status_code=400, detail="Empty card") return CharacterService().save_card(payload)