added docs
This commit is contained in:
@@ -61,6 +61,7 @@ TOOLS_SKIP_CHAT_NOTICE = frozenset({
|
||||
"recall_memories",
|
||||
"get_fitness_summary",
|
||||
"get_fitness_history",
|
||||
"compare_fitness_days",
|
||||
"lookup_food",
|
||||
"lookup_exercise",
|
||||
"calc_fitness_targets",
|
||||
@@ -191,6 +192,51 @@ def format_tool_notice(tool_name: str, raw_result: str) -> str | None:
|
||||
w = data.get("water", {})
|
||||
return f"💪 **Вода** +{w.get('amount_ml')} мл"
|
||||
|
||||
if tool_name == "log_steps" and data.get("ok"):
|
||||
s = data.get("step_log", {})
|
||||
replaced = " (замена за день)" if data.get("replaced") else ""
|
||||
return f"💪 **Шаги** {s.get('steps', 0):,} шаг.{replaced}".replace(",", " ")
|
||||
|
||||
if tool_name == "delete_fitness_log" and data.get("ok"):
|
||||
kind = data.get("kind", "")
|
||||
deleted = data.get("deleted") or {}
|
||||
if kind == "meal":
|
||||
return f"💪 **Удалено** · {deleted.get('description')} · {deleted.get('calories', 0):.0f} ккал"
|
||||
if kind == "water":
|
||||
return f"💪 **Удалено** · вода {deleted.get('amount_ml')} мл"
|
||||
if kind == "steps":
|
||||
return f"💪 **Удалено** · {deleted.get('steps', 0)} шаг."
|
||||
if kind == "workout":
|
||||
return f"💪 **Удалено** · {deleted.get('title')}"
|
||||
log_id = data.get("log_id")
|
||||
return f"💪 **Удалено** · {kind} #{log_id}"
|
||||
|
||||
if tool_name == "update_fitness_log" and data.get("ok"):
|
||||
if data.get("meal"):
|
||||
m = data["meal"]
|
||||
return (
|
||||
f"💪 **Исправлено** · {m.get('description')} · "
|
||||
f"{m.get('calories', 0):.0f} ккал "
|
||||
f"(Б{m.get('protein_g', 0):.0f}/Ж{m.get('fat_g', 0):.0f}/"
|
||||
f"У{m.get('carbs_g', 0):.0f}/Кл{m.get('fiber_g', 0):.0f})"
|
||||
)
|
||||
if data.get("water"):
|
||||
return f"💪 **Исправлено** · вода {data['water'].get('amount_ml')} мл"
|
||||
if data.get("step_log"):
|
||||
return f"💪 **Исправлено** · {data['step_log'].get('steps', 0)} шаг."
|
||||
return "💪 **Запись обновлена**"
|
||||
|
||||
if tool_name == "merge_fitness_logs" and data.get("ok"):
|
||||
kind = data.get("kind", "")
|
||||
merged = data.get("merged") or {}
|
||||
if kind == "meal":
|
||||
return f"💪 **Объединено** · {merged.get('description')} · {merged.get('calories', 0):.0f} ккал"
|
||||
if kind == "water":
|
||||
return f"💪 **Объединено** · вода {merged.get('amount_ml')} мл"
|
||||
if kind == "steps":
|
||||
return f"💪 **Объединено** · {merged.get('steps', 0)} шаг."
|
||||
return "💪 **Записи объединены**"
|
||||
|
||||
if tool_name == "log_weight" and data.get("ok"):
|
||||
m = data.get("metric", {})
|
||||
computed = data.get("computed") or {}
|
||||
|
||||
@@ -55,6 +55,13 @@ _DOMAIN_KEYWORDS: dict[str, tuple[str, ...]] = {
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
DOCUMENT_CITATION_HINT = (
|
||||
"Если пользователь спрашивает по загруженным документам, ГОСТам, ТЗ, инструкциям "
|
||||
"или проектной документации, используй tool search_documents. В ответе указывай "
|
||||
"источники из результата: название документа и source_ref, страницу или раздел. "
|
||||
"Если подходящий фрагмент не найден, скажи об этом явно и не выдумывай пункт документа."
|
||||
)
|
||||
|
||||
|
||||
def _build_messages_for_session(session_id: int, user_id: int) -> list[dict[str, Any]]:
|
||||
db = SessionLocal()
|
||||
@@ -200,6 +207,7 @@ class ChatService:
|
||||
),
|
||||
format_pomodoro_context(status),
|
||||
self._optional_domain("projects", user_query, lambda: projects_snapshot, format_projects_context),
|
||||
DOCUMENT_CITATION_HINT,
|
||||
]
|
||||
return "\n\n".join(part for part in parts if part.strip())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user