63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
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"
|
|
appearance_tags: str = ""
|
|
appearance_prose: str = ""
|
|
lora_name: str = ""
|
|
lora_weight: float = 0.8
|
|
rp_persona_id: str = ""
|
|
sd_enabled: bool = True
|
|
|
|
|
|
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)
|