# Hausmeister Bot - STATE **Stand:** 25.03.2026 **Status:** Produktiv — Hybrid-Architektur (GPU Text + Cloud Vision) --- ## LLM-Routing (4 Pfade) | Pfad | Trigger | Modell | Endpoint | Kosten | |------|---------|--------|----------|--------| | Lokal Text | Standard | qwen3:30b-a3b | Ollama RTX 3090 | $0.00 | | Lokal Vision | Bild/Foto | qwen3-vl:32b | Ollama RTX 3090 | $0.00 | | Online Suche | preis, gold, news, recherche, ... | perplexity/sonar | OpenRouter | ~$0.005/Anfrage | | Tiefensuche | tiefensuche, tiefenrecherche, ... | perplexity/sonar-deep-research | OpenRouter | ~$0.05-0.20/Anfrage | | Fallback | Ollama Timeout | qwen2.5:14b | Ollama RTX 3090 | $0.00 | ### Local-Override (immer lokal, auch bei Kosten-Keywords) api kosten, guthaben, openrouter, container, status, fehler, logs, feed, backup, memory, mail, seafile, forgejo, grafana, savetv, wordpress, matomo, tailscale ### Tiefensuche Trigger-Woerter tiefensuche, tiefenrecherche, tiefe suche, detailrecherche, ausfuehrliche recherche, vollstaendige recherche, recherchiere genau, analysiere genau, deep research --- ## Tools (40 gesamt, auto-discovery via tool_loader) get_api_costs, get_all_containers, get_container_detail, get_container_logs, get_errors, count_errors, get_silent_hosts, get_feed_stats, get_forgejo_status, create_issue, close_issue, get_grafana_status, get_temperaturen, get_energie, get_heizung, get_mail_summary, get_mail_count, search_mail, get_mails_by_period, get_smart_mail_digest, get_matomo_analytics, get_matomo_trend, memory_read, memory_suggest, session_search, session_summary, get_backup_status, get_server_metrics, get_server_warnings, get_savetv_status, get_savetv_tipps, get_savetv_archive_filme, savetv_record, savetv_download, get_seafile_status, get_service_directory, get_tailscale_status, web_search, get_wordpress_stats, deep_research --- ## CT 121 (deep-research) | Service | Status | Anmerkung | |---------|--------|-----------| | SearXNG (Docker) | aktiv | genutzt von web_search Tool | | Open Deep Research | gestoppt + deaktiviert | ersetzt durch Sonar Deep Research | Grund: Open Deep Research lieferte schlechte Qualitaet bei Preis- und Regionalanfragen (3 Min Wartezeit, kein Ergebnis). Sonar Deep Research liefert in 75s strukturierte Reports mit Quellen. --- ## KI-Server (RTX 3090, ki-server Windows, 100.84.255.83) GPU-Architektur: Text + Embeddings permanent im VRAM, Vision ueber Cloud. Warmup bei Bot-Start via warmup_ollama() mit keep_alive=-1. | Modell | Typ | VRAM | Status | Zweck | |--------|-----|------|--------|-------| | qwen3:30b-a3b | Text, MoE | 22.0 GB | PERMANENT | Standard + Tools, alle Dienste | | nomic-embed-text | Embedding | 0.6 GB | PERMANENT | RAGFlow, Vektorsuche | | qwen2.5:14b | Text | 17.8 GB | on-demand | Timeout-Fallback (verdraengt Hauptmodell!) | | Total | | 22.6 / 24 GB | | | Frueher: qwen3-vl:32b (Vision) lief lokal, konkurrierte mit Text um GPU. Jetzt: Vision via openai/gpt-4o-mini (OpenRouter Cloud). --- ## OpenRouter API (Stand 21.03.2026) Guthaben: $45.00 | Verbraucht: ~$24.50 | Rest: ~$20.50 Verbrauch heute: $1.43 | Woche: $1.81 Modelle: perplexity/sonar, perplexity/sonar-deep-research --- ## Deploy-Workflow (PFLICHT bei jeder Aenderung) 1. Auto-Sync deaktivieren (crontab + /etc/crontab) 2. Editieren in /root/homelab-brain/ (= /opt/homelab-brain/) 3. NIEMALS direkt in /opt/homelab-ai-bot/ editieren (Bind-Mount) 4. git add -A && git commit && git push origin main 5. pct exec 116 -- systemctl restart hausmeister-bot 6. Logs pruefen: journalctl -u hausmeister-bot -n 20 7. Auto-Sync wieder aktivieren --- ## Bekannte Eigenheiten - Local-Override muss VOR Web-Trigger in _route_model stehen - /no_think wird an Ollama-Anfragen angehaengt (schnellere Antworten) - Passthrough-Tools: get_temperaturen, get_energie, get_heizung (Grafana direkt) - tool_loader cached Module — nach Code-Aenderungen Service neu starten - sync_state.py macht git reset --hard FETCH_HEAD — vernichtet nicht gepushte Commits ## 2026-03-28 — Save.TV Pipeline & Stabilitäts-Updates ### Änderungen - **CT 116 RAM**: 512 MB → 1 GB (pct set 116 --memory 1024) - 512 MB war die Ursache für alle Einfrierungen (Swap-Überlast, D-State-Prozesse, Load ~12) - **CT 116 /etc/hosts**: www.save.tv → 172.66.146.119 (statisch) - Ohne diesen Fix blockiert DNS-Lookup (socket.getaddrinfo) den Python-GIL → Flask komplett tot - **savetv_web.py**: Archiv-Cache mit Hintergrund-Refresh - /api/films antwortet jetzt sofort aus Cache, save.tv-Login im Hintergrund-Thread - Flask threaded=True für parallele Requests - **savetv_web.py**: Jellyfin-Duplikate-Filter - Checkbox »Jellyfin-Duplikate ausblenden« (standard: ein) - Filme die schon in Jellyfin sind werden versteckt → keine Doppel-Downloads - **tools/savetv.py**: Login-Timeout (8s connect, 20s read) + moderner User-Agent - **savetv_sync.py**: 700 MB Mindestgröße - Dateien unter 700 MB werden übersprungen (SD-Aufnahmen = Schrott) - Filter passiert auf API-Seite (HEAD-Request), nie auf NAS-Seite ### Pipeline-Architektur Save.TV → Hetzner CT 116 (temp) → Jellyfin-Server 100.77.105.3 → NAS Muldenstein - Sync: stündlich per Cron, 24h ± 30min Delay nach Download-Timestamp - Callback: POST /api/nas_synced nach erfolgreichem Transfer