Commit History
-
Supervision : mesurer ce conteneur, pas la machine hôte
Samuel ADONE +1: Claude Opus 5/proc n'est pas isolé dans un conteneur. /proc/stat comptait l'activité de tout le serveur : le tableau annonçait 99,5 % de processeur pendant que ce service dormait. La mesure vient maintenant du compteur cgroup (cpu.stat/usage_usec), rapportée aux cœurs réellement alloués — donc à nous seuls. Repli sur /proc/stat hors conteneur, explicitement étiqueté « machine entière ». Même illusion sur le disque : sans volume persistant attaché, /data vit sur le système de fichiers de l'hôte et statvfs annonçait « 44 040 192 Go », ce qui est exact et sans usage. Au-delà de 4 To on considère le volume comme non dédié : on rapporte ce que ce service occupe réellement, sans prétendre connaître la place restante. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>8f0dcba -
Supervision : mesure nulle ≠ mesure absente, et charge hôte non alarmante
Samuel ADONE +1: Claude Opus 5Le tableau affichait « indisponible » pour le disque persistant du Space : la valeur était testée par sa véracité, or un disque vide mesure zéro octet utilisé — une mesure parfaitement valide. Même confusion possible sur la mémoire et l'empreinte du process. La charge système lue dans /proc/loadavg est celle de la machine hôte, partagée entre Spaces. La rapporter aux cœurs alloués affichait 2,33× en rouge pour une charge qui n'est pas la nôtre et sur laquelle personne ici ne peut agir. Elle reste affichée, sans seuil, explicitement étiquetée. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>0792e02 -
Bac à sable superadmin, accusés de lecture, modération, poste de travail
Samuel ADONE +1: Claude Opus 5Bac à sable : les 20 comptes et 6 groupes `test_` deviennent un festival fictif réservé au superadmin. Ils ne peuvent plus se connecter — l'écran d'accueil les traite comme des numéros inconnus — et disparaissent de l'annuaire, des conversations, des statistiques et du tableau de bord. Le superadmin y écrit au nom d'un compte fictif et peut déclencher la lecture par tout le groupe, pour voir basculer les accusés sans second téléphone. Accusés de lecture : une coche à l'envoi, deux à la remise, deux en cyan à la lecture ; appui long pour la liste nominative. Aucune table d'accusés — /receipts renvoie le last_read_id de chaque membre et le client compare. La version stockée aurait pesé 700 000 lignes à la charge visée. Modération : vocabulaire surveillé (accès gratuit, revente, insultes) en trois passes — normalisation des accents et chiffres-substituts, sous-chaîne sur le texte compacté, distance d'édition bornée. « gr4tuit », « g r a t u i t » et « gratuiit » sont reconnus. Le messag…3e637ac -
Inscription libre, import de tableur, épinglage, signalement, jeu de test
Samuel ADONE +1: Claude Opus 5Inscription : un bénévole crée son compte même si son numéro n'a jamais été enregistré. Le compte naît sans groupe et ne peut pas être superadmin ; les superadmins sont notifiés pour l'affecter. SELF_REGISTRATION=0 restaure la liste blanche seule. Import : POST /api/admin/users/import lit un .xlsx ou un .csv et retrouve seul les colonnes prénom / nom / téléphone (en-têtes français accentués, colonne « Nom complet », numéros abîmés par Excel, séparateur point-virgule, CP1252, absence d'en-tête). Aperçu avant écriture, colonnes corrigeables à la main. Rôles : l'admin de groupe ajoute et retire des bénévoles et épingle les messages ; seul le superadmin distribue le rôle d'admin. Nouveau signalement de compte, distinct du blocage, et recherche d'annuaire par numéro espacé. Stockage : `meta` filtré champ par champ pour qu'aucune image ne puisse être écrite en base, rétention calée sur la cible réelle (500 messages/groupe, 30 jours), requêtes agrégées sur les écrans rechargés en permanenc…2bc5c2a -
first commit
Samuel ADONE5e0d7d2 -
gitignore
Samuel ADONE7616d37
-
Add Pension Reforms Commission report to the corpus
- New PDF (271pp) ingested with a clean title; embeddings regenerated (1169 chunks total). - Citations link only budget-estimate PDFs (hosted online); other docs like this report show as plain text (no broken links). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>bef828f
-
Redesign: Material theme (Roboto, Google-blue) + working light/dark toggle
Theme-driven (Gradio Default light+dark token sets) instead of brittle CSS overrides; toggle flips the .dark class on body and persists in localStorage. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>0de99b0 -
Apple-style dark UI: frosted glass bubbles, SF font, blue accent, pill input
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>222f1e6 -
Robust multi-turn: dual-query retrieval + handle list-format message content
- build_context gathers BM25 candidates from BOTH the current message (topic switches) and the history-combined query (terse follow-ups), re-ranked on the combined query. Fixes follow-ups staying on topic AND topic switches not being polluted by the prior topic. - content_text() normalises Gradio message content (str or list-of-parts) so history is read correctly via UI and API. Verified end-to-end: maternity -> financial follow-up -> education switch -> funding follow-up all behave; car tax declines; deficit correct. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>ca94a0b -
Fix follow-ups: explicit session-cached conversation + balanced decline rule
- Replace ChatInterface with a gr.Blocks chat that holds the conversation in the Chatbot component (per-session cache) and explicitly passes the prior turns to retrieval and the model — so multi-turn is controlled and verifiable (couldn't confirm ChatInterface's history via the API, which strips it). - Retrieval query now carries the last few user turns (not just one), so the topic persists across several follow-ups. - RULE 1 rebalanced: decline only when nothing relevant is present; answer when it is (incl. follow-ups). Verified: maternity -> "financially how does it change?" -> "and paternity leave?" all stay on topic and answer correctly; car tax still declines; revenue/deficit correct. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>74b54ea -
Concise answers for speed: brief replies + num_predict 200 (keeps accuracy)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>6d71be2 -
Bake embeddings + rule-based prompt (decline off-topic, explain figures)
- Precompute chunk embeddings (data/embeddings.npz, LFS) loaded at startup, so re-rank adds only a tiny per-query embed — no background prewarm contending for CPU (that was stalling cold-start queries). - Rewrite the system prompt as ordered rules: RULE 1 decline when no excerpt is on-subject (never misattribute, e.g. car tax -> plastic-bottle levy); RULE 3 explain figures in 2-4 sentences. Verified: car/crypto correctly decline; deficit/revenue/maternity/tobacco correct with figures explained. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>bf82a59 -
Fix grounding: qwen2.5:1.5b + embedding re-rank + topic-relevance prompt
The 0.5b model hallucinated on questions whose answer isn't the top BM25 hit (e.g. invented a "car importation tax" figure, parroted excerpt headers). Fixes: - Re-enable embedding re-rank (auto) — bridges lexical gaps (car tax -> excise/ customs); chunks pre-warmed in a background thread so queries stay fast. - qwen2.5:1.5b: grounds reliably where 1b/0.5b hallucinated (e.g. deficit). - Prompt now requires same-subject excerpts and to decline (not invent) when the topic isn't covered. Verified: car tax correctly declines; maternity/revenue/ deficit/tobacco/motor-vehicle measures all correct. - Restore recall (top_k 4, budget 4000, num_ctx 4096); EMBED_MODEL pulled at boot. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>8f702fb -
Faster model + multi-turn context + responsive UI with linked citations
- Model: qwen2.5:0.5b at temperature 0 with a concise prompt — benchmarked fastest (~3x) AND most accurate (5/5 on number-extraction test) of the small models; greedy decoding fixes the prior wrong-figure issues. - Conversation memory: prior turns now steer both retrieval and the model, so terse follow-ups ("financially how does it change?") stay on topic. - UI: full-width, mobile-responsive single column; indexed-docs list moved to a collapsible accordion at the bottom; citations link to the official PDF at the cited page (#page=N) with the matched excerpt as a hover tooltip. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>7b684b6 -
Add Budget Speech PDF to the corpus
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>8c80221 -
Mauritius Budget 2026-2027 RAG assistant (Ollama + Gradio)
RAG over the National Budget 2026-2027 PDFs: PyMuPDF ingest + chunking, BM25 retrieval with optional Ollama embedding re-rank, streaming answers with document/page citations, and a pure-Python Gradio UI. Self-contained Dockerfile runs Ollama and the app together on port 7860 for HF Spaces. PDFs stored via Git LFS. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>c5f394c