fixed
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
from typing import Any
|
||||
|
||||
TOOLS_INSTRUCTIONS = """
|
||||
Ты также домашний ассистент с инструментами. Обязательные правила:
|
||||
- Любой вопрос о таймере, помидоро, задачах или истории — СНАЧАЛА вызывай соответствующий инструмент.
|
||||
- Никогда не выдумывай статус таймера или список задач.
|
||||
- После вызова инструмента кратко объясни результат пользователю по-человечески.
|
||||
- Инструменты: get_pomodoro_status, start_pomodoro, stop_pomodoro, get_pomodoro_history.
|
||||
""".strip()
|
||||
|
||||
DEFAULT_CARD: dict[str, Any] = {
|
||||
"spec": "chara_card_v2",
|
||||
"spec_version": "2.0",
|
||||
"data": {
|
||||
"name": "Домашний ассистент",
|
||||
"description": "Дружелюбный ИИ-помощник для дома. Отвечает на вопросы, даёт советы, помогает с помидоро-таймером.",
|
||||
"personality": "Тёплый, остроумный, по делу. Говорит на русском. Может шутить, но не перегибает.",
|
||||
"scenario": "Пользователь общается с ассистентом дома через веб-интерфейс.",
|
||||
"first_mes": "Привет! Чем займёмся — поболтаем или заведём помидоро?",
|
||||
"mes_example": "",
|
||||
"system_prompt": "",
|
||||
"post_history_instructions": "",
|
||||
"alternate_greetings": [],
|
||||
"tags": ["assistant", "home", "pomodoro"],
|
||||
"creator": "",
|
||||
"creator_notes": "",
|
||||
"character_version": "1.0",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def normalize_card(raw: dict[str, Any]) -> dict[str, Any]:
|
||||
if "data" in raw and isinstance(raw["data"], dict):
|
||||
card = {
|
||||
"spec": raw.get("spec", "chara_card_v2"),
|
||||
"spec_version": raw.get("spec_version", "2.0"),
|
||||
"data": {**DEFAULT_CARD["data"], **raw["data"]},
|
||||
}
|
||||
return card
|
||||
|
||||
if "name" in raw or "description" in raw:
|
||||
return {
|
||||
"spec": "chara_card_v2",
|
||||
"spec_version": "2.0",
|
||||
"data": {**DEFAULT_CARD["data"], **raw},
|
||||
}
|
||||
|
||||
return DEFAULT_CARD.copy()
|
||||
|
||||
|
||||
def build_system_prompt(card: dict[str, Any]) -> str:
|
||||
data = card.get("data", {})
|
||||
parts: list[str] = []
|
||||
|
||||
name = data.get("name", "Ассистент")
|
||||
parts.append(f"Ты — {name}.")
|
||||
|
||||
if data.get("system_prompt"):
|
||||
parts.append(data["system_prompt"])
|
||||
if data.get("description"):
|
||||
parts.append(data["description"])
|
||||
if data.get("personality"):
|
||||
parts.append(f"Характер: {data['personality']}")
|
||||
if data.get("scenario"):
|
||||
parts.append(f"Сценарий: {data['scenario']}")
|
||||
if data.get("post_history_instructions"):
|
||||
parts.append(data["post_history_instructions"])
|
||||
|
||||
parts.append(TOOLS_INSTRUCTIONS)
|
||||
return "\n\n".join(part for part in parts if part.strip())
|
||||
Reference in New Issue
Block a user