Documentation
Documentation / Reference API

Chat / SSE

L'endpoint principal de Bangré. Streame une reponse RAG en francais avec citations validees, en SSE.

Endpoint

POST/api/v1/chat-rag/stream

URL de developpement : http://localhost:8000/api/v1/chat-rag/stream. URL de production (placeholder) : https://api.bangre.bf/api/v1/chat-rag/stream.

Corps de requete

message
stringrequired
Question utilisateur. Longueur min 1, pas de limite haute stricte cote API.
filters.domaine
stringoptional
Code du domaine cible (impots, douanes...). Defaut : premier domaine actif.
filters.statut
stringoptional
Defaut : en_vigueur. Toute autre valeur est tracee en warning serveur.
filters.doc_type
stringoptional
Restreint au type (loi, decret, arrete...).
model
stringoptional
Nom Ollama du LLM. Defaut : valeur DB (default_llm_model).
conversation_id
uuidoptional
Continue une conversation existante. Necessite un JWT proprietaire.
top_k
intoptional
Nombre de chunks recuperes avant rerank. Defaut DB : 8.

Stream SSE

Reponse text/event-stream. Deux types d'evenements :

  • message : porte un objet { delta: string }, un token a la fois.
  • final : porte le payload de fin (citations, validation, latence, disclaimer, conversation_id).
sse
event: message
data: {"delta": "La "}

event: message
data: {"delta": "TVA "}

event: final
data: {"citations":[...],"validation":{"ok":true,"warning":null},"latency_ms":842,"disclaimer":"...","conversation_id":"5c2a..."}
Format des frames
Le streaming utilise CRLF (\r\n\r\n) entre evenements, parser SSE standard OK.

Evenement final

citations
Citation[]required
Liste des chunks utilises. Champs : document_id, article_number, snippet (240 char max).
validation.ok
boolrequired
False si la validation post-LLM detecte des chiffres absents du contexte.
validation.warning
string | nulloptional
Texte du warning si validation echouee.
latency_ms
intrequired
Latence totale de l'appel cote serveur.
disclaimer
stringrequired
Texte legal a afficher en bas de la reponse.
conversation_id
uuid | nullrequired
Identifiant de la conversation persistee, null pour les appels anonymes.

Exemples

curl -N -X POST http://localhost:8000/api/v1/chat-rag/stream \
  -H "Authorization: Bearer $BANGRE_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Quel est le taux de TVA en vigueur ?",
    "filters": { "domaine": "impots" },
    "top_k": 8
  }'

Comportement

  • Si filters.statut est absent, le serveur force en_vigueur via la config DB.
  • Si filters.domaine est absent, le serveur prend le premier domaine actif.
  • La validation post-LLM verifie que les chiffres et dates de la reponse apparaissent dans le contexte. Si non, validation.ok est false et un warning textuel est joint.
  • Avec un JWT valide, la conversation (user + assistant) est persistee de facon best-effort. Une erreur de persistance n'interrompt jamais le stream.
Persistance
Sans bearer, conversation_id vaut null et rien n'est persiste cote serveur.