5.2 KiB
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)
- Auto-Sync deaktivieren (crontab + /etc/crontab)
- Editieren in /root/homelab-brain/ (= /opt/homelab-brain/)
- NIEMALS direkt in /opt/homelab-ai-bot/ editieren (Bind-Mount)
- git add -A && git commit && git push origin main
- pct exec 116 -- systemctl restart hausmeister-bot
- Logs pruefen: journalctl -u hausmeister-bot -n 20
- 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