From 5eea29f284f1b4eabb84f332a3bfdea53d76b853 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 15 Mar 2026 12:32:45 +0700 Subject: [PATCH] Hausmeister: Fix History-Poisoning + Message-Logging-Reihenfolge + Einzelmessage-Fallback --- homelab-ai-bot/llm.py | 5 ++--- homelab-ai-bot/memory_client.py | 25 +++++++++++++++++++------ homelab-ai-bot/telegram_bot.py | 3 +-- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/homelab-ai-bot/llm.py b/homelab-ai-bot/llm.py index 8aaa22c6..bce6165d 100644 --- a/homelab-ai-bot/llm.py +++ b/homelab-ai-bot/llm.py @@ -391,15 +391,14 @@ def ask_with_tools(question: str, tool_handlers: dict, session_id: str = None) - if session_id: try: import memory_client - history = memory_client.get_session_messages(session_id, limit=20) + history = memory_client.get_session_messages(session_id, limit=10) for msg in history: if msg.get("role") in ("user", "assistant") and msg.get("content"): messages.append({"role": msg["role"], "content": msg["content"]}) except Exception: pass - if not any(m.get("content") == question for m in messages): - messages.append({"role": "user", "content": question}) + messages.append({"role": "user", "content": question}) try: for _round in range(MAX_TOOL_ROUNDS): diff --git a/homelab-ai-bot/memory_client.py b/homelab-ai-bot/memory_client.py index 9848d85a..12203d45 100644 --- a/homelab-ai-bot/memory_client.py +++ b/homelab-ai-bot/memory_client.py @@ -212,25 +212,38 @@ def get_session_summary(session_id: str, limit: int = 20, topic: str = None) -> return "Keine Themen in dieser Session." if topic: - matching = [] + matching_pairs = [] + matching_singles = [] other_topics = [] for q, a in exchanges: combined = q + " " + (a or "") if _topic_matches(combined, topic): - matching.append((q, a)) + matching_pairs.append((q, a)) else: other_topics.append(q[:80]) + # Fallback: einzelne Messages pruefen (falls Pairing unvollstaendig) + if not matching_pairs: + for msg in messages: + content = (msg.get("content") or "").strip() + if content and _topic_matches(content, topic): + role = msg.get("role", "?") + matching_singles.append((role, content[:200])) + lines = [] - if matching: - lines.append("Zum Thema '" + topic + "' (" + str(len(matching)) + " Treffer):") - for i, (q, a) in enumerate(matching, 1): + if matching_pairs: + lines.append("Zum Thema '" + topic + "' (" + str(len(matching_pairs)) + " Treffer):") + for i, (q, a) in enumerate(matching_pairs, 1): line = str(i) + ". Frage: " + q if a: line += "\n Antwort: " + a lines.append(line) + elif matching_singles: + lines.append("Zum Thema '" + topic + "' (" + str(len(matching_singles)) + " relevante Messages):") + for role, content in matching_singles: + lines.append(" [" + role + "] " + content) else: - lines.append("Zum Thema '" + topic + "' wurde in dieser Session nichts direkt besprochen.") + lines.append("Zum Thema '" + topic + "' wurde in dieser Session nichts besprochen.") if other_topics: lines.append("\nSonstige Themen der Session: " + ", ".join(other_topics)) diff --git a/homelab-ai-bot/telegram_bot.py b/homelab-ai-bot/telegram_bot.py index 062bfc99..59624cc5 100644 --- a/homelab-ai-bot/telegram_bot.py +++ b/homelab-ai-bot/telegram_bot.py @@ -308,14 +308,13 @@ async def handle_message(update: Update, ctx: ContextTypes.DEFAULT_TYPE): channel_key = str(update.effective_chat.id) session_id = memory_client.get_or_create_session(channel_key, source="telegram") - if session_id: - memory_client.log_message(session_id, "user", text) await update.message.reply_text("🤔 Denke nach...") try: handlers = context.get_tool_handlers(session_id=session_id) answer = llm.ask_with_tools(text, handlers, session_id=session_id) if session_id: + memory_client.log_message(session_id, "user", text) memory_client.log_message(session_id, "assistant", answer) await update.message.reply_text(answer[:4000], reply_markup=KEYBOARD) except Exception as e: