homelab-brain/homelab-ai-bot/STATE.md

123 lines
5.2 KiB
Markdown

# 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