homelab-brain/homelab-ai-bot/tools/openmemory.py
Homelab Cursor dbf2497cd6 Hausmeister Kumpel-Modus: OpenMemory (CT 122) angebunden
- openmemory_client.py: REST-API Client für search/add/list
- tools/openmemory.py: openmemory_add, openmemory_search, Kumpel SYSTEM_PROMPT_EXTRA
- llm.py: OpenMemory-Block in Prompt (Text + Bild)
- homelab.conf: OPENMEMORY Optionen dokumentiert
2026-03-24 14:03:19 +01:00

82 lines
2.8 KiB
Python

"""OpenMemory Tools — Langfristiges Gedächtnis (CT 122).
Ergänzt tools/memory.py: OpenMemory speichert Erinnerungen/Vorlieben
für den Kumpel-Modus (warnen, erinnern, nachfragen).
"""
import logging
from openmemory_client import add as _om_add, search as _om_search
_log = logging.getLogger("tools.openmemory")
TOOLS = [
{
"type": "function",
"function": {
"name": "openmemory_add",
"description": "Speichert eine langfristige Erinnerung oder Vorliebe in OpenMemory. Nutze dies für: persönliche Fakten, Vorlieben, wichtige Termine, Vereinbarungen die du im Gespräch erfährst. Nicht für technische Homelab-Fakten (dafür memory_suggest).",
"parameters": {
"type": "object",
"properties": {
"text": {"type": "string", "description": "Der zu speichernde Inhalt"},
},
"required": ["text"],
},
},
},
{
"type": "function",
"function": {
"name": "openmemory_search",
"description": "Sucht in OpenMemory nach Erinnerungen/Vorlieben zu einem Thema. Nutze wenn du gezielt nach etwas suchst.",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Suchbegriffe"},
},
"required": ["query"],
},
},
},
]
def _handle_openmemory_add(text, **kw):
if not text or not str(text).strip():
return "Kein Text zum Speichern."
result = _om_add(str(text).strip())
if result:
return "In OpenMemory gespeichert."
return "OpenMemory nicht erreichbar oder Speichern fehlgeschlagen."
def _handle_openmemory_search(query, **kw):
if not query or not str(query).strip():
return "Kein Suchbegriff."
items = _om_search(str(query).strip(), limit=8)
if not items:
return f"Keine OpenMemory-Einträge für '{query}' gefunden."
lines = [f"OpenMemory Suche '{query}':"]
for i in items:
c = (i.get("content") or "").strip()
if c:
lines.append(f"{c}")
return "\n".join(lines)
def get_handlers(session_id=None):
return {
"openmemory_add": _handle_openmemory_add,
"openmemory_search": _handle_openmemory_search,
}
SYSTEM_PROMPT_EXTRA = """
KUMPEL-MODUS (kritischer Freund):
Du kennst den User aus langfristigen Erinnerungen (OpenMemory) und dem strukturierten Gedächtnis.
- ERINNERN: Wenn du weisst dass etwas ansteht (Termin, Plan), erinnere kurz daran wenn es passt.
- WARNEN: Bei riskanten Aktionen (löschen, umkonfigurieren) kurz nachfragen oder warnen.
- NACHFRAGEN: Bei vagen Aussagen ("vielleicht", "irgendwann") optional nachfragen — aber nicht übertreiben.
- Tonalität: Direkt wie ein Kumpel, nicht unterwürfig. Kurz.
"""