Files
ROMFASTSQL/proxmox/lxc171-claude-agent/maria-whatsapp-bridge/ops/env.example
Claude Agent 0ace9f97ac fix(maria): fara "caut informatia" la completari, si trei feluri de raspuns
Din firul testat in grup: la "Urgent este", "Nu m-a contactat nimeni. Cat mai
dureaza?" si "Tot nimic", Maria trimitea de fiecare data "Caut informatia, revin
imediat...", calcula un embedding pe care il arunca, si raspundea acelasi sablon
("am adaugat si asta la M-..."). La intrebarea "cat mai dureaza" nu raspundea deloc,
iar "urgent" nu schimba nimic nicaieri.

- Completarea se decide INAINTEA confirmarii si a cautarii: raspunsul vine instant,
  deci nici promisiune, nici embedding degeaba (~1-2s per mesaj).
- triaj.fel_completare: urgenta / stare / detaliu.
  - urgenta -> escaladarea se marcheaza si suportul primeste un mesaj cu URGENT;
  - stare -> raspuns cu ce stim (de cat timp asteapta) si reamintire catre echipa,
    cel mult una la 15 minute, ca sa nu sune telefonul la fiecare "tot nimic";
  - detaliu -> confirmare scurta, cu formularea rotita.
- Peste 30 de minute fara raspuns Maria o spune pe fata si indruma spre telefon
  (SUPPORT_PHONE), in loc sa repete ca "echipa vede detaliul".
- Gramatica: "acum 10 minute", nu "acum 10 de minute".

Teste: 99 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
2026-09-01 07:19:06 +00:00

83 lines
4.1 KiB
Plaintext

# Configurarea puntii WhatsApp+RAG a lui Maria.
#
# install.sh copiaza acest fisier in ~/.maria-bridge/env cu drepturi 0600.
# Format KEY=value, fara `export`, fara expandare de variabile.
# --- Puntea WhatsApp (whatsapp/index.js) -----------------------------------
BRIDGE_HOST=127.0.0.1
BRIDGE_PORT=8099
# true = raspunde DOAR in chatul cu tine insuti (self-chat). Pune "false" abia
# dupa ce esti multumit de calitatea raspunsurilor — altfel Maria raspunde la
# oricine iti scrie pe numarul legat.
TEST_MODE_SELF_CHAT_ONLY=true
# Grupuri in care Maria raspunde chiar si cu self-chat-only (JID-uri, separate prin
# virgula). JID-ul unui grup se citeste din punte: curl -s localhost:8099/groups
# ATENTIE: nu pune un grup in care raspunde si Echo (LXC 110) — puntea lui nu
# filtreaza `fromMe` in grupuri, deci cei doi boti isi raspund unul altuia la
# nesfarsit. Vezi docs/chatboti-si-punti.md.
ALLOWED_GROUP_JIDS=
# Imaginile primite (capturi cu erori) peste aceasta marime sunt refuzate, fara
# descarcare. O captura de ecran normala are sub 1 MB.
MAX_MEDIA_MB=8
# --- OCR pentru capturile de ecran ------------------------------------------
# Modelul de raspuns e strict text, deci capturile trec prin tesseract inainte de
# RAG (vezi rag/ocr.py). Cere: apt-get install tesseract-ocr tesseract-ocr-ron
OCR_LANGS=ron+eng
OCR_MAX_CHARS=1500
OCR_TIMEOUT_S=60
# --- Ordonare (rank) si pragul de escaladare ---------------------------------
# Chunk-urile se ordoneaza de doua ori — semantic (embeddings) si lexical (BM25) —
# iar clasamentele se fuzioneaza. Vezi rag/rank.py; valorile de mai jos sunt
# calibrate pe indexul real, nu alese din burta.
# Peste RANK_STRONG_COSINE raspundem din documente fara alte conditii; sub
# RANK_WEAK_COSINE escaladam direct; intre ele, raspundem doar daca termenii rari
# din intrebare (coduri de eroare, in general) chiar apar in chunk-urile gasite.
RANK_STRONG_COSINE=0.70
RANK_WEAK_COSINE=0.58
RANK_RECALL_N=12
# Ce fractiune din termenii distinctivi ai intrebarii trebuie sa apara in
# chunk-urile gasite, ca sa salvam un cosinus de mijloc. Un singur termen gasit
# nu e o dovada — vezi ops/calibrate-rank.py.
RANK_MIN_RARE_RATIO=0.5
# --- Escaladare la suport ----------------------------------------------------
# Unde pleaca intrebarile la care Maria NU are raspuns in documente. Fara asta ar
# raspunde generic, ceea ce e mai rau decat sa nu raspunda deloc.
# JID de WhatsApp: "<numar>@s.whatsapp.net" pentru o persoana,
# "<id>@g.us" pentru un grup. Numarul se scrie international, fara "+".
# Gol = escaladarile se scriu doar in ~/.maria-bridge/escalations/, fara notificare.
SUPPORT_JID=
# Numarul spus clientului cand asteapta de peste 30 de minute fara raspuns.
SUPPORT_PHONE=
# --- Backend LLM + embeddings -----------------------------------------------
# Modelul de chat folosit pentru raspunsuri (format compatibil OpenAI
# /v1/chat/completions). Implicit presupune un tunel/proxy local catre acelasi
# backend folosit de Echo (LXC 110) — vezi docs/maria-whatsapp-rag-prototype.md.
LLM_URL=http://127.0.0.1:8091
# Ollama, pentru embeddings (nomic-embed-text).
OLLAMA_URL=http://127.0.0.1:11434
EMBED_MODEL=nomic-embed-text
TOP_K=3
MAX_TOKENS=250
POLL_INTERVAL_S=2
# --- Depozit de documente + sincronizare Google Drive -----------------------
# Tinta rclone pentru dosarul de documente din Drive (pe Windows apare ca
# D:\GoogleDrive\romfast\document_store). Se aduc doar *.txt, *.md, *.xml.
# Gol = sincronizare dezactivata; documentele se administreaza doar manual din
# dashboard. Vezi README.md, "Sincronizare cu Google Drive": autorizarea se face
# cu `rclone authorize` pe o masina cu browser, tokenul se muta aici — fara cont
# de serviciu. Exemplu, cu dosarul fixat pe ID:
# DRIVE_REMOTE=gdrive,root_folder_id=1C4e75zgH1_7ZK-_oBP5ZZBvUPh3iEo1O:
DRIVE_REMOTE=
# --- control -----------------------------------------------------------------
# Fara dashboard propriu: start/stop/restart, documente, reindexare si
# sincronizare Drive se fac din dashboard-ul puntii Discord (discord-bridge/),
# sectiunea "Maria — WhatsApp + RAG" — un singur panou comun, o singura
# autentificare (DASHBOARD_TOKEN din ~/.claude-discord/env).