- 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
82 lines
2.8 KiB
Python
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.
|
|
"""
|