Commit graph

63 commits

Author SHA1 Message Date
Homelab Cursor
83fe700bac fix(chatlog): aggressive anti-hallucination prompts and tool descriptions
Live-test showed Grok 4.1 Fast inventing 'mcp_mychatarchive_search_brain'
when asked about Telegram chat history. Fix:
- Tool descriptions explicitly say 'TELEGRAM' and 'NICHT ChatGPT/Memory/RAG'
- SYSTEM_PROMPT_EXTRA lists all 4 exact tool names and forbids inventing
  alternatives like 'mychatarchive' or 'search_brain'
- Forbids using rag_search/openmemory_search/web_search for Telegram-
  related queries
- Demands honest 'no data' over hallucination
2026-05-01 12:24:12 +02:00
Homelab Cursor
bd771a5213 fix(chatlog): explicit routing hints for ARAKAWA apartment codes
Grok 4.1 Fast was eskaliereing 'Stand zur G2010B-Vermietung?' to
perplexity/sonar instead of using chatlog_*. Strengthened
SYSTEM_PROMPT_EXTRA with explicit triggers (G2010B, D1603, ARAKAWA,
Concierge, Bnb, Kaution, Mieter) and a 'NO web search for this' rule.
2026-05-01 12:18:35 +02:00
Homelab Cursor
d82b6f97ef feat(chatlogger): multi-tenant + Jarvis tool integration
Phase 2 of the chatlogger feature.

Multi-tenant:
- chatlogger-bot.service -> chatlogger-bot@.service (systemd template)
- /opt/chatlogger/<instance>.env per bot, all share /opt/chatlogger/chats.db
- existing bot migrated: chatlogger-bot@arakawa.service
- adding a second group bot is now: cp arakawa.env <name>.env, edit token+chats,
  systemctl enable --now chatlogger-bot@<name>

Jarvis (hausmeister-bot) tool:
- homelab-ai-bot/tools/chatlog.py (autodiscovered by tool_loader.py)
- 4 tools: chatlog_list_chats, chatlog_recent, chatlog_search, chatlog_since
- Reads SQLite directly via sys.path += /opt/homelab-brain/chatlogger
- SYSTEM_PROMPT_EXTRA tells the LLM when to use these (Concierge, Airbnb,
  Listing, 'aktueller Stand', 'wer hat zugesagt', 'muss ich reagieren').

Tested live: hausmeister-bot loads 48 tools (44 + 4 new), all chatlog
handlers callable, returns real messages from the @arakawa_concierge_bot
recording of -1003924901022.
2026-05-01 12:13:00 +02:00
root
93c601dfa3 feat(savetv): erweitere Wunschfilm-Liste
Made-with: Cursor
2026-04-26 19:53:23 +02:00
root
196f36372e feat(savetv): Der Clou als geschuetzten Wunschfilm aufnehmen 2026-04-26 19:53:23 +02:00
root
c7250a7ff7 fix(savetv): entferne zu breite Anna-Kinoausnahme 2026-04-26 19:53:23 +02:00
root
ba9c55a916 fix(savetv): auto-download nur fuer Kino-Profil erlauben 2026-04-26 19:53:23 +02:00
Homelab Cursor
0a153457e6 feat(hausmeister): Host-Suppression via ALERT_SUPPRESS_HOSTS
Neue zentrale Moeglichkeit, ganze Proxmox-Hosts temporaer aus allen
Hausmeister-Alerts herauszunehmen, gesteuert ueber homelab.conf.

- homelab.conf: ALERT_SUPPRESS_HOSTS Variable (Komma-Liste)
  initial gesetzt auf pve-ka-1,pve-ka-2,pve-ka-3 (Kambodscha
  ohne Internet seit 2026-04-04)
- core/config.py: Helper get_suppressed_hosts + get_suppressed_container_names
  (letztere mappt Host -> Container-Namen fuer Loki/Silence-Filter)
- tools/predict.py: Filter in _gather_prometheus, _gather_loki, _gather_proxmox
  + sichtbarer Hinweis 'Unterdrueckt: ...' im taeglichen Forecast-Report
- monitor.py: Filter in check_all + format_report (Container, panic,
  error_rate, silence, service_restarts)

Beim naechsten Mal Kambodscha-Internet-Comeback: einfach die drei Eintraege
in ALERT_SUPPRESS_HOSTS entfernen und hausmeister-bot neu starten.
2026-04-24 15:57:14 +02:00
root
c63b3621c0 rag: LLM-Query-Rewrite (Stufe B, gpt-4o-mini) als Default-Modus
Query wird vor ES-Suche durch gpt-4o-mini in 4 DE/EN-Varianten umformuliert
(Synonyme, Fachbegriffe, Zahl-/Kosten-/Summenbegriffe). Dann Multi-Query-Merge
durch _merge_hits_from_queries. Fallback auf Single-Query bei API-Fehler oder
fehlendem Key. 1h-Cache, 8s-Timeout.

Loest ua. Kosten-/Preis-Fragen, die zuvor am Standardpfad gescheitert sind
(Beispiel: "was haben die wohnungen in kambodscha gekostet" findet jetzt
G2010B und D1603 in einem Rutsch).
2026-04-17 21:46:15 +02:00
Homelab Cursor
61faa9fcee RAG Multi-Query DE/EN + OpenAI-Key erneuert
- tools/rag.py: _is_count_list_query + _expand_multilingual fuer Zaehlfragen
  (z.B. >meine 2 Wohnungen in Kambodscha< findet jetzt beide Units)
- homelab.conf: OPENAI_API_KEY erneuert (alter widerrufen)
- Cleanup: Backup-Files entfernt
2026-04-17 21:25:42 +02:00
Auto-Sync
7a37b749f3 Auto-Sync: 2026-04-17 21:15 2026-04-17 21:15:08 +02:00
3776f4ff71 savetv: Archiv-Tool filtert DE/FR-Produktionslaender wie Web-UI 2026-03-31 12:54:30 +00:00
a1fa212da4 fix regex typo: allemagne 2026-03-31 11:24:22 +00:00
218858314d fix: should_exclude_production_country calls load_filminfo_cache 2026-03-31 11:24:16 +00:00
830682945b Add savetv_country_filter: exclude DE/FR production countries from film selection 2026-03-31 11:24:04 +00:00
Homelab Cursor
eb47bcb8d1 feat(savetv): Jellyfin-Filter, Archiv-Cache, Stabilitäts-Fixes
- savetv_web.py: Archiv-Cache mit Hintergrund-Refresh (kein Blockieren bei Save.TV-Login)
- savetv_web.py: Flask threaded=True für parallele Requests
- savetv_web.py: Jellyfin-Duplikate-Filter (Checkbox, default: ein)
- tools/savetv.py: Login-Timeout (8s connect, 20s read) + modernerer User-Agent
- savetv_sync.py: Dateien unter 700 MB werden übersprungen (kein SD-Schrott)
- CT 116: www.save.tv statisch in /etc/hosts → kein DNS-GIL-Block mehr
- CT 116: RAM von 512 MB auf 1 GB erhöht (war der Hauptgrund für Einfrieren)
2026-03-28 20:55:12 +01:00
Homelab Cursor
3b6ee14b37 fix(rag): timeout 45s, RRF rank-map bug fix 2026-03-28 16:54:20 +01:00
Homelab Cursor
a3735bf265 fix(rag): RRF fusion, 512-char snippets, 15 candidates — speed+quality 2026-03-28 16:51:06 +01:00
Homelab Cursor
da0d1cd16c feat(rag): Cross-Encoder Reranking via CT123 bge-reranker-v2-m3 2026-03-28 16:37:56 +01:00
Homelab Cursor
8b78cf0854 rag: docnm_search (Boost 5.0) — Dateinamen als Volltext durchsuchbar (#52)
ES-Index: neues Feld docnm_search (custom analyzer mit path_splitter,
__ und _ werden zu Leerzeichen). docnm_kwd bleibt als Keyword.
Hybrid-Suche nutzt jetzt docnm_search mit Boost 5.0 —
Arakawa/Wohnung/Kambodscha etc. finden direkt ueber den Dateinamen
ohne handverdrahtete Subqueries.

Closes #52
2026-03-27 10:41:00 +01:00
Homelab Cursor
70469cfbc5 rag: Fix toter Code — Immobilien-Wide-Check war nach return unreachbar 2026-03-26 19:04:23 +01:00
Homelab Cursor
0a76bee464 rag: Breitensuche fuer Wohnungen/Immobilien/Kambodscha
- _is_wide_recall_query: erkennt jetzt Wohnung+welche/alle, Kambodscha+Wohnung
- _WIDE_SUBQUERIES_IMMOBILIEN: Arakawa-Wohnungen, Mietvertraege, Kaufvertrag, Hard Title etc.
- handle_rag_search waehlt Subquery-Pool je nach Thema (Immo vs. Versicherung)
2026-03-26 19:00:28 +01:00
Homelab Cursor
00283a6268 llm+rag: RAG-Pflicht fuer Wohnung/Immobilie/Kambodscha; generische Forced-Prompts
- _DOC_KW: wohnung, immobilie, condo, kambodscha, takeo, phnom, haus, ...
- Bei Geo/Wohnung: RAG-Query mit Zusatz-Keywords
- Forced-RAG: Finanz-Fokus vs. allgemeine Unterlagen (Gedaechtnis nicht Prioritaet)
- rag.py: Tool-Prompt Wohnungen/Ausland explizit
2026-03-26 18:53:06 +01:00
Homelab Cursor
40d6badfc7 fix(rag+llm): Kfz-Kosten mit Quelle; kein nackter EUR-Betrag
- Forciertes RAG: Prompt verbietet Ein-Zahl-Antwort; Dateiname Pflicht.
- User-Nachtrag [Quelle: ...] bei forced RAG.
- rag: kostet/wie viel in wide recall; Subqueries Ford Transit / Kfz jährlich.
2026-03-26 17:18:32 +01:00
Homelab Cursor
ae6a50d182 fix(rag+llm): 60 wide treffer, Pfad-Dedup, 100k tool payload
(Nachtrag: vorheriger Commit enthielt nur telegram_bot.)
2026-03-26 17:15:48 +01:00
Homelab Cursor
dcf70b087b fix(rag): breite Mehrfachsuche + mehr Treffer fuer Uebersichten
- wide_recall: bis 16 ES-Runden mit Sparten-/Gesellschafts-Queries, Merge
  nach Dedup-Key, bis 25 distinct Treffer, groessere Snippets.
- Normale Suche: top_k bis 15, ES bis 150.
- Forciertes RAG: top_k 25, Tool-Payload 32k Zeichen.
- Hinweis: 100% Vollstaendigkeit haengt von Index/OCR ab.
2026-03-26 17:12:13 +01:00
Homelab Cursor
03f70fdda3 fix(rag): larger forced tool payload (12k) + list all insurance Sparten
- Forced rag_search used top_k=10 and tool content up to 12k chars (was 3k, cut off most hits).
- System instruction: enumerate each Sparte/doc type for same insurer, not only first hit.
- rag.py SYSTEM_PROMPT_EXTRA: same rule for multi-hit answers.
2026-03-26 16:56:29 +01:00
Homelab Cursor
59e53a2750 rag: 19/20 E2E-Tests bestanden — Dedup + Anti-Halluzination + Pflicht-Prompt
- Dedup auf Dateinamen-Ebene (Extension + Kopie-Marker ignorieren)
- docnm_kwd boost 1.5→3.0 fuer bessere Ordner-Treffer
- SYSTEM_PROMPT_EXTRA verschaerft: IMMER rag_search bei Dokument-Fragen
- Expliziter Ende-Marker gegen LLM-Halluzination
- MIN_TOP_K=5, Default top_k=8
- Content-Snippet 400→600 Zeichen
Ref: Issue #51
2026-03-26 15:25:52 +01:00
Homelab Cursor
a43c0b913b rag: bessere Treffer + Anti-Halluzination
- top_k min=5, default=8 (LLM kann nicht mehr top_k=3 setzen)
- docnm_kwd boost 1.5→3.0 (Ordner/Dateinamen staerker gewichten)
- Ordnerpfad als Kategorie-Info in Ausgabe
- Content-Snippet 400→600 Zeichen
- SYSTEM_PROMPT_EXTRA: LLM darf keine Details erfinden
- es_size erhoehen fuer breitere Suche
Ref: Issue #51
2026-03-26 15:07:31 +01:00
Homelab Cursor
f9b69ad283 rag: Elasticsearch direkt (Hybrid kNN + deutsch) statt RAGFlow API
- ES 100.109.101.12:1200, Filter kb_id, knn auf q_768_vec
- Query-Embedding via Ollama nomic-embed-text
- Text: content_de, content_ltks, docnm_kwd
- OCR-Heuristik, Deduplizierung nach docnm_kwd
- Ref: Issue #51
2026-03-26 14:34:40 +01:00
Auto-Sync
9d79af7481 Auto-Sync: 2026-03-26 12:30 2026-03-26 12:30:10 +01:00
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
Homelab Cursor
2e61530055 fix: _delete_telecast() in savetv.py implementiert
Funktion fehlte komplett - Auto-Delete nach Download hat nie funktioniert.
Nutzt GET /STV/M/obj/cRecordOrder/croDelete.cfm?TelecastID=...
2026-03-21 19:12:37 +01:00
Homelab Cursor
47bd67eb97 fix: predict.py ohne interne LLM-Analyse, strukturierter Daten-Report
- Tool gibt strukturierten Report zurueck (kein verschachtelter LLM-Aufruf mehr)
- Klare Hervorhebung: KRITISCH (>=100 Fehler), Erhoeht (>=20), Disk-Trend
- Proxmox: korrekte Passwort/Token-Ermittlung, nur echte pve-Hosts im Fehler-Log
- daily_forecast: LLM analysiert den Report bevor er gesendet wird
2026-03-21 13:44:35 +01:00
Homelab Cursor
c4553b46d7 feat: KI-Systemvorhersage (tools/predict.py) + taegl. 08:00 Job
- tools/predict.py: sammelt Disk-Trends (Prometheus), Fehler-Logs (Loki),
  Container-Status (Proxmox) und laesst lokales LLM eine Prognose erstellen
- telegram_bot.py: daily_forecast Job taegl. 08:00 Uhr, sendet Prognose via Telegram
- llm.py: Forecast-Trigger (vorhersage, prognose, was bahnt sich an etc.) -> lokal
2026-03-21 13:18:20 +01:00
Cursor
785aa36a35 feat(bot): API-Kosten Tool — OpenRouter Guthaben/Verbrauch per Chat abfragen 2026-03-21 12:13:58 +01:00
Cursor
36d708bee1 refactor(llm): Local-First Routing mit Sonar-Websuche
- Basis: 981118f9 (lokales Qwen3 30B) wiederhergestellt
- Drei Pfade: lokal (qwen3:30b-a3b), Vision (qwen3-vl:32b), Sonar (perplexity/sonar)
- _route_model() fuer sauberes Routing (Web-Keywords -> Sonar, Rest -> lokal)
- /no_think fuer Ollama, Timeout-Fallback auf qwen2.5:14b
- Passthrough-Tools fuer Grafana-Daten
- deep_research TOOLS wieder aktiviert
- Preis-Spaghetti-Logik entfernt
2026-03-21 12:06:00 +01:00
Homelab Cursor
4d38c5302c fix(grafana): Umlaute, °C, saubere Formatierung fuer Temperaturen/Energie/Heizung
- SENSOR_MAP Labels mit echten Umlauten (Außen, Küche, Ölkessel)
- Gradzeichen °C statt nur C
- Listenformat mit Bindestrich statt Einrueckung
- Abschnitte Räume & Außen / Heizung & Puffer
- Energie-Tool mit passenden Einheiten (W, kWh, %)
- SYSTEM_PROMPT_EXTRA: LLM soll Tool-Output 1:1 weitergeben
2026-03-21 02:02:29 +01:00
Cursor
3f4af61389 fix(bot): Einheiten-Falle loesen — min 5 Ergebnisse bei Preisfragen, Gramm/Unze Warnung in Prompt und Suchergebnissen 2026-03-21 00:29:32 +01:00
Cursor
2697e7f283 fix(web_search): kurze Keyword-Queries statt Saetze, language=de, bessere Prompt-Anweisungen 2026-03-21 00:21:17 +01:00
Cursor
f6e9e29ae4 fix(web_search): interne SearXNG-URL nicht als Quelle anzeigen 2026-03-20 23:44:48 +01:00
Cursor
981118f940 feat(bot): Qwen3 30B-A3B lokal (Ollama/RTX3090), web_search bevorzugt, Date-Injection, Thinking-Mode Fix 2026-03-20 23:40:58 +01:00
Homelab Cursor
e0afaff058 feat: harte Qualitaetspruefung fuer Preisrecherche
Bei Preisfragen validiert deep_research jetzt die Antwort auf:
- konkrete Preise mit Waehrung
- Delta in Prozent
- Preisvergleich damals/heute
- mindestens 3 konkrete Quellen-Links

Wenn die Qualitaet zu schwach ist:
1) automatischer Retry mit strikter Anfrage
2) falls weiter unzureichend: klare Fehlermeldung "keine belastbaren Preisdaten gefunden"
2026-03-20 22:17:50 +01:00
Homelab Cursor
6ef208c289 feat: web_search Tool via SearXNG ergaenzen
Issue #35 vervollstaendigt mit schneller Web-Suche (3-10s):
- neues Tool web_search in tools/web_search.py
- SearXNG Endpoint CT121 (intern + Tailscale Fallback)
- strukturierte Treffer mit Snippets + Quellenlinks
- Prompt-Hinweis fuer Routing: web_search vs deep_research
2026-03-20 21:59:33 +01:00
Homelab Cursor
7a3327eb90 fix: deep_research Tool — Logging + allow_clarification=False
- Ausfuehrliches Logging fuer Debugging
- allow_clarification deaktiviert (verhindert Rueckfrage-Deadlock)
- Ergebnis-Schwelle auf 100 Zeichen gesenkt
2026-03-20 21:47:33 +01:00
Homelab Cursor
3f245ffea9 feat: deep_research Tool fuer Hausmeister-Bot
Open Deep Research (CT 121) als neues LLM-Tool.
- LangGraph API auf 10.10.10.121:2024
- SearXNG + OpenRouter als Backend
- Polling-basiert (2-10 Min pro Recherche)
- Report wird fuer Telegram gekuerzt
2026-03-20 21:30:53 +01:00
root
ff11575d4c Save.TV: Film-Download auf pve-hetzner Festplatte (HD, werbefrei, /mnt/savetv Bind-Mount) 2026-03-17 15:49:26 +07:00
root
63d2a64533 Save.TV: Kino-Highlights Erkennung statt Score-basiert, 62 echte Kinofilme identifiziert 2026-03-17 15:14:28 +07:00
root
2fae7af346 Save.TV: LLM sieht jetzt ALLE Archiv-Filme + Prompt nutze-dein-Filmwissen 2026-03-17 15:08:56 +07:00
root
7ac401c3a5 Save.TV: Archiv-Bewertung Tool + _get_archive POST-Fix 2026-03-17 15:05:46 +07:00