add formating
This commit is contained in:
@@ -16,11 +16,15 @@ from .prompts import ASSISTANT_SYSTEM_PROMPT
|
||||
from .reminders import parse_reminder
|
||||
from .storage import AssistantStorage
|
||||
from .telegram_utils import (
|
||||
edit_markdown,
|
||||
edit_or_reply,
|
||||
escape_markdown_text,
|
||||
get_ai_client,
|
||||
get_storage,
|
||||
get_tz,
|
||||
markdown_code,
|
||||
parse_positive_int,
|
||||
reply_markdown,
|
||||
require_user_id,
|
||||
)
|
||||
from .time_utils import format_local_dt, to_utc_iso, utc_now
|
||||
@@ -80,12 +84,16 @@ def build_agent_tool_prompt(tz: ZoneInfo) -> str:
|
||||
"Ты работаешь как агент с внутренними tools. Пользователь пишет свободным текстом, "
|
||||
"а Telegram-команды ему не нужны.\n"
|
||||
f"Текущее локальное время: {now_local}. Таймзона: {tz.key}.\n\n"
|
||||
"Отвечай СТРОГО одним JSON-объектом без Markdown и без текста вокруг.\n"
|
||||
"Отвечай СТРОГО одним JSON-объектом без Markdown-блока и без текста вокруг.\n"
|
||||
"Если нужно выполнить действие, верни tool_calls. Если действие уже выполнено "
|
||||
"или tool не нужен, верни final.\n\n"
|
||||
"Форматы ответа:\n"
|
||||
'{"tool_calls":[{"name":"create_note","arguments":{"text":"..."}}],"reset_context":false}\n'
|
||||
'{"final":"Короткий ответ пользователю","reset_context":false}\n\n'
|
||||
"Значение final оформляй обычным Markdown, не MarkdownV2. Умеренно используй "
|
||||
"жирный и курсивный текст, списки, ссылки и блоки кода, когда они улучшают "
|
||||
"читаемость. Для короткого простого ответа разметка не обязательна. "
|
||||
"Не добавляй декоративные эмодзи чаще одного раза на сообщение.\n\n"
|
||||
"Доступные tools:\n"
|
||||
"- get_current_datetime {} - узнать текущее локальное и UTC-время.\n"
|
||||
'- remember {"text": string} - сохранить важный долгосрочный факт о пользователе.\n'
|
||||
@@ -389,7 +397,10 @@ async def run_agent_prompt(
|
||||
|
||||
user_id = require_user_id(update)
|
||||
if user_id is None:
|
||||
await update.effective_message.reply_text("Не могу определить пользователя.")
|
||||
await reply_markdown(
|
||||
update.effective_message,
|
||||
"⚠️ **Не могу определить пользователя.**",
|
||||
)
|
||||
return
|
||||
|
||||
storage = get_storage(context)
|
||||
@@ -428,8 +439,10 @@ async def run_agent_prompt(
|
||||
chat_id=chat_id,
|
||||
action=ChatAction.TYPING,
|
||||
)
|
||||
placeholder = await update.effective_message.reply_text(
|
||||
f"Думаю через {ai_client.display_name} / {model}..."
|
||||
placeholder = await reply_markdown(
|
||||
update.effective_message,
|
||||
f"💭 *Думаю через {escape_markdown_text(ai_client.display_name)} / "
|
||||
f"{markdown_code(model)}…*",
|
||||
)
|
||||
|
||||
try:
|
||||
@@ -502,7 +515,7 @@ async def run_agent_prompt(
|
||||
"content": (
|
||||
"Лимит tool-шагов исчерпан. Больше не вызывай tools. "
|
||||
f"Последние результаты tools: {json_dumps(last_tool_results)}. "
|
||||
"Сформулируй короткий финальный ответ пользователю обычным текстом."
|
||||
"Сформулируй короткий финальный ответ пользователю обычным Markdown."
|
||||
),
|
||||
},
|
||||
],
|
||||
@@ -523,13 +536,20 @@ async def run_agent_prompt(
|
||||
hint = (
|
||||
"Проверь YANDEX_CLOUD_FOLDER, YC_API_KEY и доступ к выбранной модели."
|
||||
)
|
||||
await placeholder.edit_text(
|
||||
f"Не получилось вызвать {ai_client.display_name}.\n{exc}\n\n{hint}"
|
||||
await edit_markdown(
|
||||
placeholder,
|
||||
f"⚠️ **Не получилось вызвать "
|
||||
f"{escape_markdown_text(ai_client.display_name)}.**\n\n"
|
||||
f"{escape_markdown_text(exc)}\n\n"
|
||||
f"{escape_markdown_text(hint)}",
|
||||
)
|
||||
return
|
||||
except Exception:
|
||||
logger.exception("Failed to run AI prompt")
|
||||
await placeholder.edit_text("Произошла внутренняя ошибка при запросе к модели.")
|
||||
await edit_markdown(
|
||||
placeholder,
|
||||
"⚠️ **Произошла внутренняя ошибка** при запросе к модели.",
|
||||
)
|
||||
|
||||
|
||||
async def run_ai_prompt(
|
||||
|
||||
Reference in New Issue
Block a user