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 -
Poste de travail : liste et conversation côte à côte au-delà de 1024 px
Samuel ADONE +1: Claude Opus 5L'application entière sort du cadre « téléphone » sur grand écran : la liste des groupes tient un volet de 372 px à gauche, la conversation occupe le reste, et un volet d'accueil s'affiche tant qu'aucun groupe n'est ouvert. Les bulles restent plafonnées à 1000 px de large : c'est la cohabitation des deux volets qui rend la largeur utile, pas l'étirement d'une ligne de texte sur 1600 px. Le bouton « retour » disparaît, la liste étant déjà visible. Sous 1024 px, rien ne change : même cadre, même navigation plein écran. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>ec3b8ae -
Service worker : réseau d'abord pour la feuille de style et le script
Samuel ADONE +1: Claude Opus 5La stratégie « cache d'abord » servait l'ancien fichier à chaque chargement et ne rangeait la nouveauté que pour la visite suivante : après un déploiement, chacun restait une visite en retard — indéfiniment pour qui ne rouvre pas l'application deux fois. C'est ce qui faisait apparaître la mise en page mobile sur un poste de travail malgré le déploiement du tableau de bord. Le cache reste le secours hors-ligne, indispensable quand le réseau du site tombe. Le nom de cache passe à v2 pour purger les entrées périmées. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>d58abe7 -
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 -
Add keep-alive script to stop the Space from sleeping
Samuel ADONE +1: Claude Opus 5Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>f7fa177 -
Fix HF Space metadata: colorTo must be a valid palette color
Samuel ADONE +1: Claude Opus 5Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>f637cee -
first commit
Samuel ADONE5e0d7d2 -
gitignore
Samuel ADONE658ef99 -
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 -
Fix build: pin Ollama, download from GitHub (install script 404s on dropped .tgz)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>b49f1b9 -
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 -
Shrink prefill context (num_ctx 2048, budget 2600, top_k 3) for faster CPU answers
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>a7b3b56 -
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 -
Switch to llama3.2:1b: accurate on numbers, still fast (0.5b gave wrong figures)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>92cbd80 -
Use smaller, faster qwen2.5:0.5b model for free CPU tier
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>72bcb9f -
Add Budget Speech PDF to the corpus
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>8c80221 -
Tune for free CPU tier: smaller ctx, trimmed retrieval, no re-rank, capped tokens
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>429fd32 -
Drop show_api kwarg removed in Gradio 6
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>e5fbc3f -
Install zstd for Ollama (required by its install script on amd64)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>c596df9 -
Trigger rebuild
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>06d19df -
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 -
initial commit
Verified signatured3fa2ab