123 lines
5.2 KiB
Markdown
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
|