Commit graph

207 commits

Author SHA1 Message Date
Homelab Cursor
70469cfbc5 rag: Fix toter Code — Immobilien-Wide-Check war nach return unreachbar 2026-03-26 19:04:23 +01:00
Homelab Cursor
0a76bee464 rag: Breitensuche fuer Wohnungen/Immobilien/Kambodscha
- _is_wide_recall_query: erkennt jetzt Wohnung+welche/alle, Kambodscha+Wohnung
- _WIDE_SUBQUERIES_IMMOBILIEN: Arakawa-Wohnungen, Mietvertraege, Kaufvertrag, Hard Title etc.
- handle_rag_search waehlt Subquery-Pool je nach Thema (Immo vs. Versicherung)
2026-03-26 19:00:28 +01:00
Homelab Cursor
00283a6268 llm+rag: RAG-Pflicht fuer Wohnung/Immobilie/Kambodscha; generische Forced-Prompts
- _DOC_KW: wohnung, immobilie, condo, kambodscha, takeo, phnom, haus, ...
- Bei Geo/Wohnung: RAG-Query mit Zusatz-Keywords
- Forced-RAG: Finanz-Fokus vs. allgemeine Unterlagen (Gedaechtnis nicht Prioritaet)
- rag.py: Tool-Prompt Wohnungen/Ausland explizit
2026-03-26 18:53:06 +01:00
Homelab Cursor
031b8d6c65 llm: RAG-Unterlagen — STIL-OVERRIDE und Struktur (Kurzfassung + je Dokument)
Globaler Prompt fordert sonst knappe Antworten; bei forciertem rag_search
jetzt explizit ausfuehrlicher. User-Zeile: strukturierte Kosten-Antwort statt
nur Quellen-Hinweis. Markdown ** um Dateiname entfernt (Telegram).
2026-03-26 18:39:14 +01:00
Homelab Cursor
93aabf3fc5 monitor: CT 115/Shop-VMIDs als erwartet gestoppt unabhängig vom Proxmox-Host-Key
Die API setzt _host je nach homelab.conf (z.B. pve-hetzner); (115,pve-ka-1)
griff dann nicht. Erwartete stopped-VMIDs jetzt host-unabhängig bei status stopped.
2026-03-26 18:31:23 +01:00
Homelab Cursor
40d6badfc7 fix(rag+llm): Kfz-Kosten mit Quelle; kein nackter EUR-Betrag
- Forciertes RAG: Prompt verbietet Ein-Zahl-Antwort; Dateiname Pflicht.
- User-Nachtrag [Quelle: ...] bei forced RAG.
- rag: kostet/wie viel in wide recall; Subqueries Ford Transit / Kfz jährlich.
2026-03-26 17:18:32 +01:00
Homelab Cursor
ae6a50d182 fix(rag+llm): 60 wide treffer, Pfad-Dedup, 100k tool payload
(Nachtrag: vorheriger Commit enthielt nur telegram_bot.)
2026-03-26 17:15:48 +01:00
Homelab Cursor
60d0ef671d fix(rag+tg): mehr Treffer, Pfad-Dedup, keine 4k-Abschneidung
- rag: wide bis 60 Treffer, ES 200, 22 Subqueries, Merge mit Dedup
  pro vollem docnm_kwd (Ordner+Datei getrennt).
- llm: forciertes RAG top_k 60, Tool bis 100k Zeichen.
- telegram: lange Antworten in mehrere Nachrichten (RAG-Listen sichtbar).
2026-03-26 17:15:25 +01:00
Homelab Cursor
dcf70b087b fix(rag): breite Mehrfachsuche + mehr Treffer fuer Uebersichten
- wide_recall: bis 16 ES-Runden mit Sparten-/Gesellschafts-Queries, Merge
  nach Dedup-Key, bis 25 distinct Treffer, groessere Snippets.
- Normale Suche: top_k bis 15, ES bis 150.
- Forciertes RAG: top_k 25, Tool-Payload 32k Zeichen.
- Hinweis: 100% Vollstaendigkeit haengt von Index/OCR ab.
2026-03-26 17:12:13 +01:00
Homelab Cursor
a9d1069728 fix(bot): import rag_mode before build_reply_keyboard 2026-03-26 17:05:36 +01:00
Homelab Cursor
44d80d2a9e feat(bot): Schalter Betriebsart Unterlagen (RAG zuerst)
- Neue Tastaturzeile: Unterlagen AUS/AN zeigt Modus und schaltet um.
- document_mode in ask_with_tools: erzwingt lokales Modell und RAG-Pflicht
  wie bei Doc-Keywords (Session wird bei Suche wie bisher bereinigt).
- Optional: doku:/rag: Prefix fuer einmalige Suche ohne Modus.
- Sprache und Hilfetext ergaenzt.
2026-03-26 17:05:06 +01:00
Homelab Cursor
d771a330c7 fix(routing): yearly costs to local RAG, not Sonar
- Remove standalone "kosten" from WEB_TRIGGERS (matched "jährlichen kosten" and sent Perplexity without tools).
- Add LOCAL_OVERRIDES for jahreskosten/jaehrlich/beitragsrechnung phrases.
- Extend forced-RAG keywords and enrich ES query with Beitrag/Beitragsrechnung for cost questions.
- System hint: extract amounts and periods per hit when possible.
2026-03-26 17:01:43 +01:00
Homelab Cursor
03f70fdda3 fix(rag): larger forced tool payload (12k) + list all insurance Sparten
- Forced rag_search used top_k=10 and tool content up to 12k chars (was 3k, cut off most hits).
- System instruction: enumerate each Sparte/doc type for same insurer, not only first hit.
- rag.py SYSTEM_PROMPT_EXTRA: same rule for multi-hit answers.
2026-03-26 16:56:29 +01:00
Homelab Cursor
7b6543be90 fix(rag): strip session history when forced RAG fires
Poisoned session history (4x wrong answers) overrode RAG results.
Now: when doc keywords trigger forced rag_search, rebuild messages
from scratch with ONLY system prompt + RAG results + question.
No session history = no poisoning.
2026-03-26 16:51:29 +01:00
Homelab Cursor
e5327cd65e fix(rag): force rag_search in code, do not rely on LLM tool-calling
The LLM ignores system injections when session history already
contains insurance answers. Now: when doc keywords detected, call
rag_search directly in Python, inject results as fake tool-call
into messages. LLM only needs to format the answer.
2026-03-26 16:48:21 +01:00
Homelab Cursor
98d0698db0 fix(rag): inject PFLICHT-reminder for doc-keywords to prevent LLM skipping rag_search
When session history already contained insurance/document answers,
the LLM would skip rag_search and hallucinate from memory.
Now: if doc keywords detected, inject system-message reminder AFTER
session history but BEFORE user question, forcing rag_search call.

Fixes #51 follow-up: LVM query returned wrong answer.
2026-03-26 16:38:29 +01:00
Homelab Cursor
59e53a2750 rag: 19/20 E2E-Tests bestanden — Dedup + Anti-Halluzination + Pflicht-Prompt
- Dedup auf Dateinamen-Ebene (Extension + Kopie-Marker ignorieren)
- docnm_kwd boost 1.5→3.0 fuer bessere Ordner-Treffer
- SYSTEM_PROMPT_EXTRA verschaerft: IMMER rag_search bei Dokument-Fragen
- Expliziter Ende-Marker gegen LLM-Halluzination
- MIN_TOP_K=5, Default top_k=8
- Content-Snippet 400→600 Zeichen
Ref: Issue #51
2026-03-26 15:25:52 +01:00
Homelab Cursor
a43c0b913b rag: bessere Treffer + Anti-Halluzination
- top_k min=5, default=8 (LLM kann nicht mehr top_k=3 setzen)
- docnm_kwd boost 1.5→3.0 (Ordner/Dateinamen staerker gewichten)
- Ordnerpfad als Kategorie-Info in Ausgabe
- Content-Snippet 400→600 Zeichen
- SYSTEM_PROMPT_EXTRA: LLM darf keine Details erfinden
- es_size erhoehen fuer breitere Suche
Ref: Issue #51
2026-03-26 15:07:31 +01:00
Homelab Cursor
0e1c7a6ebb llm: Routing-Fix — Dokument-Keywords in LOCAL_OVERRIDES
Versicherung/Vertrag/Steuer/Rente/Dokument etc. routen jetzt lokal
statt zu Sonar, damit rag_search per Tool-Calling aufgerufen wird.
Vorher: aktuell in Frage -> Sonar -> kein Tool-Calling -> kein RAG.
Ref: Issue #51
2026-03-26 14:43:56 +01:00
Homelab Cursor
f9b69ad283 rag: Elasticsearch direkt (Hybrid kNN + deutsch) statt RAGFlow API
- ES 100.109.101.12:1200, Filter kb_id, knn auf q_768_vec
- Query-Embedding via Ollama nomic-embed-text
- Text: content_de, content_ltks, docnm_kwd
- OCR-Heuristik, Deduplizierung nach docnm_kwd
- Ref: Issue #51
2026-03-26 14:34:40 +01:00
Auto-Sync
9d79af7481 Auto-Sync: 2026-03-26 12:30 2026-03-26 12:30:10 +01:00
Homelab Cursor
07b785ece1 docs: GPU-Architektur Doku (STATE.md, RAGFLOW.md)
- STATE.md: Hybrid-Architektur, LLM-Routing, VRAM-Belegung
- RAGFLOW.md: Warnung dass qwen2.5:14b Hauptmodell verdraengt
2026-03-25 21:01:47 +01:00
Homelab Cursor
d2a6391f52 feat(llm): Ollama warmup bei Start - Modelle permanent im VRAM
- warmup_ollama() laedt qwen3:30b-a3b + nomic-embed-text mit keep_alive=-1
- Wird beim Bot-Start in post_init() aufgerufen (via asyncio.to_thread)
- keep_alive=-1 nur ueber native Ollama API (/api/generate) moeglich
- GPU haelt 22.6/24 GB permanent: Text + Embeddings ohne Swap
2026-03-25 20:59:30 +01:00
Homelab Cursor
a0724ba6f1 refactor(llm): GPU-Architektur - Text lokal, Vision Cloud
- MODEL_VISION von qwen3-vl:32b (Ollama) auf openai/gpt-4o-mini (OpenRouter)
- Vision-Modell aus OLLAMA_MODELS entfernt (kein GPU-Swap mehr)
- keep_alive=-1 fuer Ollama: Textmodell bleibt permanent im VRAM
- RTX 3090 wird dedizierter Text+Embedding-Server
- Neue Dienste koennen Ollama mitnutzen ohne Konkurrenz
2026-03-25 20:56:55 +01:00
Homelab Cursor
92898a33e3 fix(llm): kein Fallback auf Textmodell bei Vision-Anfragen
Wenn qwen3-vl:32b timeout hat, wurde bisher auf qwen2.5:14b
(Textmodell) zurueckgefallen. Das kann keine Bilder sehen und
halluziniert stattdessen. Jetzt: allow_fallback=False fuer Vision
und klare Fehlermeldung bei Timeout.
2026-03-25 19:46:35 +01:00
Homelab Cursor
203843dc38 fix(monitor): Flugscanner retries 2->3, retry_delay 3->5 fuer DERP-Relay
Tailscale-Verbindung zu pve-kunde1-1 laeuft ueber DERP Singapore
Relay und faellt intermittierend aus. Max Wartezeit 40s gibt genug
Puffer fuer Reconnects.
2026-03-25 19:41:20 +01:00
Homelab Cursor
90c5f756b9 fix(telegram_bot): restore full file + asyncio.to_thread patch
Datei war auf 68 Bytes gekuerzt (nur 1 Zeile). Wiederhergestellt
mit asyncio.to_thread(monitor.run_check_and_alert) Patch um
Watchdog-Timeout zu verhindern.
2026-03-25 19:13:34 +01:00
45fc61aecb fix(telegram_bot): run monitor.run_check_and_alert in thread to prevent blocking asyncio event loop and watchdog timeout 2026-03-25 18:04:16 +00:00
14cd7a2a7e fix(monitor): reduce Flugscanner health check retries/timeout (4x25s -> 2x10s) to prevent watchdog timeout 2026-03-25 18:04:03 +00:00
a3e397a82a monitor: EXPECTED_STOPPED VMID 115 für pve-ka-1 und pve-ka-3 (Cluster-Doppelmeldung flugscanner-asia-old). 2026-03-25 13:11:23 +00:00
Homelab Cursor
96b6476b1f monitor: HTTP-Checks mit Retries/Timeout; Flugscanner pp-1 toleranter (instabile Verbindung) 2026-03-25 13:09:35 +01:00
Homelab Cursor
ae27710227 monitor: HTTP-Health-Check Flugscanner-Agent (pve-pp-1 :5010) 2026-03-25 12:50:33 +01:00
Homelab Cursor
f815fd5cd3 Action Guard: Bestätigung für kritische Tools (savetv_record, savetv_download, close_issue, create_issue)
- action_guard.py: wrap_handlers, is_confirmation, execute_pending
- telegram_bot: Vor Ausführung Bestätigungsphrase (ja ausführen) erforderlich
- abbruch beendet ausstehende Aktion
2026-03-24 14:11:38 +01:00
Homelab Cursor
dbf2497cd6 Hausmeister Kumpel-Modus: OpenMemory (CT 122) angebunden
- openmemory_client.py: REST-API Client für search/add/list
- tools/openmemory.py: openmemory_add, openmemory_search, Kumpel SYSTEM_PROMPT_EXTRA
- llm.py: OpenMemory-Block in Prompt (Text + Bild)
- homelab.conf: OPENMEMORY Optionen dokumentiert
2026-03-24 14:03:19 +01:00
Auto-Sync
d4c32a38bc Auto-Sync: 2026-03-24 13:45 2026-03-24 13:45:09 +01:00
Homelab Cursor
50320ab46b fix: exclude Loki meta-logs from error-rate check (portainer feedback loop) 2026-03-24 13:38:50 +01:00
Homelab Cursor
43ee006f15 monitoring: error-rate alerts, silence proxmox filter, periodic loop
- loki_client.py: check_error_rate() mit host-spezifischen Schwellen (rss-manager:15, wordpress:10, default:25)
- monitor.py: Error-Rate-Check in check_all(), Silence-Check filtert gestoppte Container via Proxmox-Status
- telegram_bot.py: periodischer _monitor_loop alle 10 Min
- Schliesst #30 und #31
2026-03-24 13:30:58 +01:00
Auto-Sync
076abd5d5e Auto-Sync: 2026-03-23 21:00 2026-03-23 21:00:10 +01:00
Homelab Cursor
656037405d mail: Klassifizierung von OpenRouter auf lokales Ollama (qwen2.5:14b) umgestellt 2026-03-23 20:50:01 +01:00
Homelab Cursor
2e61530055 fix: _delete_telecast() in savetv.py implementiert
Funktion fehlte komplett - Auto-Delete nach Download hat nie funktioniert.
Nutzt GET /STV/M/obj/cRecordOrder/croDelete.cfm?TelecastID=...
2026-03-21 19:12:37 +01:00
Homelab Cursor
b45b377ffe fix: Lock an register_extra_routes uebergeben fuer atomare Progress-Writes
Verhindert Race Condition zwischen api_download und api_download_progress
beim gleichzeitigen Schreiben in .download_progress.json
2026-03-21 19:02:40 +01:00
Homelab Cursor
32da34b3c2 fix: Race Condition bei gleichzeitigen Downloads in savetv_web.py
- Thread-Lock fuer Progress-Datei: verhindert korruptes JSON bei vielen simultanen Downloads
- start_new_session=True in Popen: wget-Prozesse ueberleben Service-Neustarts
- Atomic load+modify+save Pattern via _load_progress_raw/_save_progress_raw
2026-03-21 18:56:11 +01:00
Auto-Sync
38dbefd7c8 Auto-Sync: 2026-03-21 15:30 2026-03-21 15:30:10 +01:00
Homelab Cursor
f630b3d302 fix: Portainer false-positive aus Loki-Fehlerfilter ausschliessen
Portainer loggt regelmaessig "flag evaluation succeeded" auf level=info,
diese Zeilen enthielten aber keine echten Fehler und wurden faelschlicherweise
als Fehler gezaehlt (>300/Tag). Jetzt aus dem regex-Filter ausgeschlossen.
2026-03-21 15:25:21 +01:00
Homelab Cursor
5b37b6ef5c fix: SyntaxError in _send_daily_forecast behoben 2026-03-21 13:46:32 +01:00
Homelab Cursor
47bd67eb97 fix: predict.py ohne interne LLM-Analyse, strukturierter Daten-Report
- Tool gibt strukturierten Report zurueck (kein verschachtelter LLM-Aufruf mehr)
- Klare Hervorhebung: KRITISCH (>=100 Fehler), Erhoeht (>=20), Disk-Trend
- Proxmox: korrekte Passwort/Token-Ermittlung, nur echte pve-Hosts im Fehler-Log
- daily_forecast: LLM analysiert den Report bevor er gesendet wird
2026-03-21 13:44:35 +01:00
Homelab Cursor
4202926830 fix: asyncio Fallback-Loop fuer daily_forecast (kein JobQueue) 2026-03-21 13:20:45 +01:00
Homelab Cursor
c4553b46d7 feat: KI-Systemvorhersage (tools/predict.py) + taegl. 08:00 Job
- tools/predict.py: sammelt Disk-Trends (Prometheus), Fehler-Logs (Loki),
  Container-Status (Proxmox) und laesst lokales LLM eine Prognose erstellen
- telegram_bot.py: daily_forecast Job taegl. 08:00 Uhr, sendet Prognose via Telegram
- llm.py: Forecast-Trigger (vorhersage, prognose, was bahnt sich an etc.) -> lokal
2026-03-21 13:18:20 +01:00
Cursor
5a93736a60 docs: STATE.md + index.md aktualisiert — Ist-Zustand 21.03.2026
Routing, Tools, CT 121 Status, Deploy-Workflow dokumentiert.
CT 121 Open Deep Research als gestoppt markiert.
2026-03-21 13:02:48 +01:00
Cursor
ebe6d21c18 feat(llm): Tiefensuche auf Perplexity Sonar Deep Research umgestellt
Open Deep Research (CT 121 LangGraph) deaktiviert — lieferte schlechte
Qualitaet. Sonar Deep Research ist schneller, zuverlaessiger, mit Quellen.
2026-03-21 12:58:16 +01:00