Fixed SD RPG
This commit is contained in:
+17
-11
@@ -45,6 +45,7 @@ def parse_card_v2(data: dict, card_id: str | None = None) -> dict:
|
||||
"first_mes": inner.get("first_mes", ""),
|
||||
"mes_example": inner.get("mes_example", ""),
|
||||
"appearance_tags": _extract_appearance(inner),
|
||||
"appearance_prose": "",
|
||||
"lorebook_json": json.dumps(entries, ensure_ascii=False),
|
||||
"alternate_greetings": alternates,
|
||||
"alternate_greetings_json": json.dumps(alternates, ensure_ascii=False),
|
||||
@@ -120,6 +121,8 @@ def parse_png_card(file_bytes: bytes) -> dict | None:
|
||||
|
||||
|
||||
def build_system_prompt(card: dict) -> str:
|
||||
from services.chat_prompt import ROLEPLAY_GUARDRAILS
|
||||
|
||||
parts = [
|
||||
f"You are {card['name']}. Stay in character.",
|
||||
f"Description: {card['description']}",
|
||||
@@ -129,6 +132,7 @@ def build_system_prompt(card: dict) -> str:
|
||||
if card.get("mes_example"):
|
||||
parts.append(f"Example dialogue:\n{card['mes_example']}")
|
||||
parts.append("Reply only as the character. Do not add image tags.")
|
||||
parts.append(ROLEPLAY_GUARDRAILS)
|
||||
return "\n\n".join(p for p in parts if p.split(": ", 1)[-1].strip())
|
||||
|
||||
|
||||
@@ -141,13 +145,13 @@ async def save_character(card: dict, lora_name: str = "", lora_weight: float = 0
|
||||
|
||||
async with aiosqlite.connect(DB_PATH) as db:
|
||||
await db.execute(
|
||||
"""INSERT OR REPLACE INTO characters
|
||||
(card_id, name, description, personality, scenario, first_mes,
|
||||
mes_example, raw_json, lora_name, lora_weight, appearance_tags, lorebook_json,
|
||||
avatar_path, alternate_greetings_json)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||
"""INSERT INTO characters
|
||||
(card_id, name, description, personality, scenario, first_mes, mes_example,
|
||||
raw_json, lora_name, lora_weight, appearance_tags, appearance_prose, lorebook_json, avatar_path,
|
||||
alternate_greetings_json)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||
(
|
||||
card_id,
|
||||
card["card_id"],
|
||||
card["name"],
|
||||
card["description"],
|
||||
card["personality"],
|
||||
@@ -157,10 +161,11 @@ async def save_character(card: dict, lora_name: str = "", lora_weight: float = 0
|
||||
card["raw_json"],
|
||||
lora_name,
|
||||
lora_weight,
|
||||
card.get("appearance_tags", ""),
|
||||
card["appearance_tags"],
|
||||
card.get("appearance_prose", ""),
|
||||
card["lorebook_json"],
|
||||
card.get("avatar_path", ""),
|
||||
alt_json,
|
||||
card.get("alternate_greetings_json", "[]"),
|
||||
),
|
||||
)
|
||||
await db.commit()
|
||||
@@ -199,8 +204,8 @@ async def delete_character(card_id: str) -> bool:
|
||||
async def update_appearance_tags(card_id: str, appearance_tags: str):
|
||||
async with aiosqlite.connect(DB_PATH) as db:
|
||||
await db.execute(
|
||||
"UPDATE characters SET appearance_tags = ? WHERE card_id = ?",
|
||||
(appearance_tags, card_id),
|
||||
"UPDATE characters SET appearance_tags = ?, appearance_prose = ? WHERE card_id = ?",
|
||||
(appearance_tags, "", card_id),
|
||||
)
|
||||
await db.commit()
|
||||
|
||||
@@ -228,7 +233,7 @@ async def preview_card_file(content: bytes, filename: str) -> dict:
|
||||
|
||||
async def update_character(card_id: str, fields: dict) -> bool:
|
||||
allowed = {"name", "description", "personality", "scenario", "first_mes",
|
||||
"mes_example", "appearance_tags", "lora_name", "lora_weight", "avatar_path",
|
||||
"mes_example", "appearance_tags", "appearance_prose", "lora_name", "lora_weight", "avatar_path",
|
||||
"alternate_greetings_json"}
|
||||
updates = {k: v for k, v in fields.items() if k in allowed}
|
||||
if not updates:
|
||||
@@ -295,6 +300,7 @@ async def import_card_file(
|
||||
"lora_name": lora_name,
|
||||
"lora_weight": lora_weight,
|
||||
"appearance_tags": saved.get("appearance_tags", ""),
|
||||
"appearance_prose": saved.get("appearance_prose", ""),
|
||||
"avatar_path": saved.get("avatar_path", ""),
|
||||
"personality": saved.get("personality", ""),
|
||||
"scenario": saved.get("scenario", ""),
|
||||
|
||||
Reference in New Issue
Block a user