Spaces:
Runtime error
Runtime error
Commit History
-
fix(intention): budget de sortie suffisant, nominations reconnues comme du droit
Mesure du classement d'intention par Groq (qwen3.8-27b) sur les 122 messages de tests/fixtures/intent_eval.json : - a 40 jetons de sortie, 2 messages sur 60 revenaient VIDES : le modele depense des jetons invisibles avant son verdict (128 factures pour un verdict de 15), et Groq repond alors 400 json_validate_failed. Ces messages partaient en « juridique » par defaut. Le plafond passe a 256 ; le quota compte l'usage reel. GroqService traduit desormais json_validate_failed en GroqReponseInvalideError : un lot de classement des lois se redecoupe au lieu d'arreter le reclassement comme une panne ; - 3 questions de droit sur 72 partaient en hors sujet : un nom de personne, « les universites d'Etat et leurs recteurs », « who was appointed governor of the Littoral region? ». Le corpus est fait aux deux tiers de decrets de nomination ; les consignes le disent maintenant en toutes lettres. Apres correction, sur les 122 : 121 justes (99,2 %), rappel « juridique » 1,000 (ex…c84fadf -
feat(intention): classement par Groq court et en cache, plus de classement local
Le classement local par embeddings est retire (intent_local.py, intent_examples.py, leurs tests et le prechauffage au demarrage). INTENT_CLASSIFIER accepte « groq » (defaut) ou « llm » (le modele du chat) ; l'ancienne valeur « gemini » est ramenee a « llm », et « local » est refuse avec la raison plutot qu'avec l'erreur generique de pydantic. Le mode groq menage le quota du jour (200 000 jetons, 1 000 requetes) : - consignes courtes (~300 jetons au lieu de ~870 : le chat plafonnait vers 215 questions par jour), schema strict, sortie de 40 jetons ; - deux derniers echanges seulement, 200 caracteres chacun ; - cache des verdicts (2 000 entrees, 24 h) : un message identique ne coute plus de requete ; un repli n'y entre jamais. Quand Groq ne peut pas repondre dans les temps — quota epuise (aucune requete n'est alors envoyee), attente du limiteur au-dela de 0,5 s, delai GROQ_INTENTION_TIMEOUT_S (3 s) depasse, panne — la question part aussitot en « juridique », avec une regle `defaut-g…21d412f -
feat: Mistral pour le chat, Groq pour le routage et le classement, 14 categories
Travail de l'utilisateur, verse tel quel avant les correctifs qui suivent : - MistralService (generation et flux), LLM_PROVIDER=mistral par defaut ; - GroqService : classement d'intention et classement des lois par Groq ; - 14 categories canoniques (migration 013) et script de reclassement ; - alembic/env.py retombe sur settings.DATABASE_URL. Defauts connus, corriges dans les commits suivants : settings non importe dans comparison_service et explanation_service, tests appelant les vraies API, migration 013 sans retour arriere.26dddaf
-
feat(chat): classement de l'intention en local, sans appel a Gemini
Chaque question coutait deux appels a Gemini : le classement (juridique, bavardage, question sur l'assistant, hors sujet) puis la reponse. Le classement prenait 3,6 s en reflexion minimale et une requete sur deux du quota gratuit. Il se fait desormais par EmbeddingGemma, deja en memoire pour la recherche : le message est rapproche d'une banque d'exemples etiquetes (intent_examples.py, questions de droit surtout en mots de tous les jours, noms de personnes et nominations compris). Chaque categorie recoit la moyenne de ses 3 exemples les plus proches ; une categorie non juridique ne l'emporte qu'avec 0,04 d'avance — dans le doute, c'est une question de droit. Un message court qui n'est pas clairement juridique est reclasse avec la question precedente (« et pour un mineur ? ») ; un verdict non juridique est encore contredit si un article du corpus est a 0,42 de similarite ou plus. Mesure sur 122 messages etiquetes (tests/fixtures/intent_eval.json, distincts de la banque), banque seule :…52efadf -
perf(chat): reflexion du modele reglee, la reponse arrive en 12 s au lieu de 37
Mesure sur une question au chat (gemini-3-flash-preview), 37 s au total : classification 8,5 s (232 jetons de reflexion pour 18 de sortie), recherche 0,26 s, reponse 28 s (3 104 jetons de reflexion pour 247 de reponse). La reflexion faisait l'essentiel de l'attente. GEMINI_REFLEXION_REPONSE (« low ») et GEMINI_REFLEXION_CLASSIFICATION (« minimal ») : 12 s, dont 5,5 s de reponse. Vides, le modele choisit, comme avant. N'agit que sur Gemini 3 : les 2.5 reglent un budget et rejetteraient un niveau. Le flux (ask_stream) plafonnait encore a 1 000 jetons : meme piege que la reponse coupee, meme budget desormais. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>148f7c1
-
feat(chat): aiguillage d'intention, le RAG seulement pour le droit
Toute question partait au pipeline RAG, sans exception. A « comment vas tu ? », le modele rendait un pave a rubriques (« Source legale : l'information n'est pas presente dans les documents fournis ») sous un bloc Sources citant un article du Code Minier sans rapport. UN CLASSIFICATEUR DECIDE AVANT LA RECHERCHE. Quatre intentions — juridique, smalltalk, meta, hors_sujet — chacune avec sa reponse. Hors juridique : ni embedding, ni recherche hybride, ni source fabriquee. Le defaut sur toute panne est « juridique », donc le comportement anterieur : une saturation du fournisseur ne fait pas basculer la plateforme en bavardage. DEUX COURT-CIRCUITS SANS APPEL. Un numero d'article, et une salutation dont le message ENTIER est une formule de politesse. Egalite stricte, jamais par sous-chaine : « bonjour, puis-je divorcer ? » part au modele. LES REGLAGES SONT MESURES. INTENT_TIMEOUT_S passe de 3 a 10 s : sur six classifications reelles, mediane 3,3 s, maximum 6,5 s. A 3 s, cinq appels sur six…153dd7c