Commit graph

281 commits

Author SHA1 Message Date
Homelab Cursor
eff739949f backup: kompletter Live-Stand CT116 Bot (3 ungepushte Commits + uncommittete Juni-Edits), Snapshot 2026-06-21 2026-06-21 20:17:54 +02:00
Homelab Cursor
00837a435e fix(bot): Systemvorhersage bei OpenRouter-404 nicht als Erfolg senden
Fallback auf gpt-4o-mini wenn grok fehlschlaegt; klare Fehlermeldung
statt rohem LLM-Fehler-String in Telegram.
2026-05-26 11:06:56 +02:00
Homelab Cursor
4829b012a7 fix(savetv): keine Aufnahme wenn Film bereits in Jellyfin
Der Jellyfin-Abgleich galt nur der Web-UI-Anzeige. Auto- und
manuelle Aufnahmen prüfen jetzt die normalisierte Mediathek.
2026-05-21 16:05:54 +02:00
Homelab Cursor
16667efbed fix(savetv): Batch-Umbenennung für Raw-Backlog und NAS-Skript
Rename lief nur beim Download-Abschluss; POST /api/rename_pending
benennt alle Titel_ID.mp4 auf Hetzner um. savetv_rename_nas.py für
bereits kopierte NAS-Dateien. __ wird zu Bindestrich im Titel.
2026-05-21 15:34:38 +02:00
Homelab Cursor
4c39f51ec3 fix(savetv): Wikidata-Timeout 8s -> 25s fuer Rename/Metadaten 2026-05-21 14:52:55 +02:00
Homelab Cursor
8f491ff36e fix(savetv): NAS-Sync nutzt /api/filelist statt veraltete downloads-IDs 2026-05-21 14:52:49 +02:00
Homelab Cursor
9e4cb33b08 fix: OpenRouter grok-4.1-fast -> grok-4.3 (deprecated 404) 2026-05-21 14:45:08 +02:00
Homelab Cursor
2c8eeb9e8d fix(chatlog): remove 'pink elephant' negative example from prompt
The earlier prompt explicitly named 'mychatarchive' / 'search_brain' as
forbidden, which planted the term in the LLM's memory. Now only the four
real tool names are mentioned positively, plus an instruction to ignore
old session-history that may contain hallucinated tool names.
2026-05-01 12:27:15 +02:00
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
d0cda4691d fix(llm): add chatlogger triggers to _LOCAL_OVERRIDES
Prevents 'aktueller Stand zur G2010B-Vermietung?' from being routed to
perplexity/sonar (which can't tool-call) just because 'aktuelle' is in
_WEB_TRIGGERS. New triggers: concierge, listing, vermietung, kaution,
G2010B/D1603 apartment codes, etc.
2026-05-01 12:20:40 +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
9731068a01 fix(savetv): verhindere parallele NAS-Syncs 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
d0b2c182de fix(ops): dokumentiere Smart-Home-Alert-Fixes und Matomo-Check
- Hausmeister-Bot Matomo-HTTP-Check korrigiert: Matomo laeuft in CT109
  (10.10.10.109), nicht in CT113.
- Smart-Home-Doku ergaenzt: CT143/raspi-broker Error-Rate war durch
  /tmp-tmpfs-Backups, vollen Swap und Telegraf-Noise verursacht.
- Cleanup-Script fuer alte raspi-broker-TARs versioniert, damit /tmp
  im CT143 nicht erneut RAM/Swap fuellt.
2026-04-25 14:50:16 +02:00
Homelab Cursor
50b493c224 feat(hausmeister): pve-pp-1 und pve-pp-2 in Alert-Suppression
- homelab.conf: ALERT_SUPPRESS_HOSTS um pve-pp-1 und pve-pp-2 erweitert
  (Phnom-Penh-Kondo-Cluster: zu instabil, nicht betriebskritisch)
- monitor.py: HTTP_HEALTH_CHECKS bekommen optionalen 'host'-Key.
  Check 'Flugscanner-Agent (pve-pp-1)' wird jetzt uebersprungen, solange
  pve-pp-1 in der Suppress-Liste steht.
2026-04-24 16:01:59 +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
cursor-agent
9889b2df76 fix(savetv): /api/filelist returns dict {files,count} as documented and expected by Jellyfin-Server sync client 2026-04-20 19:21:54 +02:00
Auto-Sync
12cf3e459b Auto-Sync: 2026-04-17 22:00 2026-04-17 22:00:10 +02:00
root
10f3c8323a rag_mode: RAG-first als Default + Persistenz, Router haertet persoenliche Fragen
rag_mode.py:
 - Default fuer neue/unbekannte Chats: RAG-first (True statt False)
 - State wird auf Disk geschrieben (/opt/homelab-ai-bot/data/rag_mode.json),
   ueberlebt Bot-Restarts; threadsicher.

llm.py:
 - _LOCAL_OVERRIDES erweitert um persoenliche Possessiv-/Besitz-Marker:
   wohnung(en), apartment, condo/kondo, immobilie, kambodscha/cambodia,
   phnom penh, arakawa, gekostet, kaufpreis, bezahlt, ausgegeben, ueberweisung,
   meine/mein/meines/..., was haben, wie viel habe ich, ich fuer/für.
   Damit werden klar persoenliche Fragen nie mehr faelschlich an Sonar
   geroutet, selbst wenn Web-Trigger wie "wie viel" im Text vorkommen.

Hintergrund: Eine Frage der Form "wie viel habe ich fuer die Wohnungen in
Kambodscha bezahlt" wurde an Perplexity/Sonar geroutet (Websuche) statt an
RAG, weil der Mode-Schalter durch einen Bot-Restart im RAM verloren ging und
der Router bei "wie viel" sofort MODEL_ONLINE waehlte.
2026-04-17 21:57:42 +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
Auto-Sync
a760e66b73 Auto-Sync: 2026-04-17 05:15 2026-04-17 05:15:09 +02:00
Auto-Sync
cca3d908d6 Auto-Sync: 2026-04-16 02:15 2026-04-16 02:15:09 +02:00
Homelab Cursor
33a5895225 fix: terror-URLs nicht als Fehler zaehlen in Loki-Query 2026-04-15 20:46:32 +02:00
Homelab Cursor
2db5db267c Seafile Health-Check: HTTP-Ping statt Log-Silence
- Seafile (CT 103) als HTTP-Health-Check hinzugefügt (https://seafile.orbitalo.net/api2/ping/)
- Seafile aus SILENCE_IGNORED_HOSTS ausgenommen (Logs nur im Container)
- 3 Retries mit 10s Timeout für robuste Erkennung
2026-04-13 13:42:21 +02:00
Homelab Cursor
bd53ff9094 monitor: CT 103 Intercity-Taxi aus EXPECTED_STOPPED entfernt (läuft als Seafile) 2026-04-13 04:21:22 +02:00
Auto-Sync
4de44a53b6 Auto-Sync: 2026-04-11 14:45 2026-04-11 14:45:18 +02:00
Homelab Cursor
8011145904 feat: Hausmeister-Bot Text-Modell auf Grok 4.1 Fast (OpenRouter) umgestellt
- MODEL_LOCAL: qwen3:30b-a3b (Ollama lokal) -> x-ai/grok-4.1-fast (OpenRouter)
- OLLAMA_MODELS geleert — kein lokales Ollama mehr fuer Text
- warmup_ollama() als No-Op (kein VRAM-Warmup mehr noetig)
- Vision bleibt auf gpt-4o-mini (OpenRouter, kein GPU)
- Ref: Issue #75 Phase 1
2026-04-11 07:33:57 +02:00
Auto-Sync
be84354360 Auto-Sync: 2026-04-09 17:15 2026-04-09 17:15:36 +02:00
Homelab Cursor
c4454e1c4d docs: Jellyfin Infrastruktur vollständig dokumentiert
- SSH-Zugang (michael@192.168.178.149 via lokalem Netz)
- NAS-Struktur: 192.168.178.170/Medien mit allen Mount-Punkten
- Save.TV → Jellyfin Workflow
- Synology NAS Shares und Zugang
- Staging-Ordner Filme zum nachbearbeiten erklaert
- Duplikat-Check Prozess dokumentiert
2026-04-06 16:57:43 +02:00
0ec7ae7407 monitor: HTTP-Checks mit GET statt HEAD
Grafana /api/health ist für GET dokumentiert; HEAD kann 405 liefern.
2026-04-01 09:29:11 +00:00
723196fe64 monitor: Grafana-Healthcheck auf /api/health umstellen
Stabiler als die Root-URL; reduziert False Positives bei kurzzeitigen 5xx auf /.
2026-04-01 09:24:11 +00:00
80b7b0681d monitor: groesszuegigeres Timeout fuer Flugscanner-Agent (Tailscale-KH→DE) 2026-03-31 19:31:39 +00:00
f5c0b5e445 fix(telegram_bot): httpx/httpcore Log-Level auf WARNING (Token nicht mehr in Logs) 2026-03-31 14:30:43 +00:00
1cc27b877f fix(telegram_bot): Forecast ask_with_tools mit tool_handlers; sauberes Task-Shutdown 2026-03-31 13:05:08 +00:00
e08c820f15 hausmeister: LLM in Hintergrund-Task — Polling blockiert nicht mehr (toter Bot)
python-telegram-bot verarbeitet Updates nacheinander, solange der Handler
nicht zurueckkehrt. Die Warteschleife auf ask_with_tools blockierte alle
weiteren Telegram-Updates (kein abbruch, keine Befehle, 'tot').

- Freitext und Sprache: Pipeline in asyncio.create_task ausgelagert
- concurrent_updates(True) zusaetzlich
2026-03-31 13:02:09 +00:00
Auto-Sync
32c6b97a02 Auto-Sync: 2026-03-31 15:00 2026-03-31 15:00:10 +02:00
2cab0af536 hausmeister: schnellere Fortschritts-Meldungen (10s), Folgenachricht bricht LLM ab 2026-03-31 12:58:45 +00:00
3776f4ff71 savetv: Archiv-Tool filtert DE/FR-Produktionslaender wie Web-UI 2026-03-31 12:54:30 +00:00
4aaa206147 savetv: Web-UI API filtert DE/FR-Produktionslaender (Wikidata-Cache) 2026-03-31 12:54:27 +00:00
03f67af781 hausmeister: Forgejo-Fehlerquote-Schwelle (Scanner-Traffic) 2026-03-31 12:54:26 +00:00
Auto-Sync
56959a1219 Auto-Sync: 2026-03-31 14:45 2026-03-31 14:45:09 +02: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