From 9edba16a4eecbe46b806cd9f43ee03832b59de4d Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Mon, 27 Apr 2026 17:06:30 +0200 Subject: [PATCH] Improve router --- app.py | 44 ++++++++++---------------------------------- 1 file changed, 10 insertions(+), 34 deletions(-) diff --git a/app.py b/app.py index 9e23314..d989301 100644 --- a/app.py +++ b/app.py @@ -52,35 +52,10 @@ histories = {} session_contexts = {} SYSTEM_PROMPT = """Tu es l'assistant personnel vocal de Laurent. -Tu peux discuter normalement en francais et aider a envoyer des emails via Gmail. - -Quand l'utilisateur veut envoyer un email, collecte les informations manquantes : -destinataire, sujet, contenu. - -Quand tu as toutes les informations pour envoyer un email, reponds uniquement avec ce JSON : -{"action": "envoyer_email", "destinataire": "...", "sujet": "...", "corps": "..."} - -Quand l'utilisateur veut ajouter, memoriser ou modifier un contact email, collecte le nom et l'adresse email. -Quand tu as les deux informations, reponds uniquement avec ce JSON : -{"action": "ajouter_contact", "nom": "...", "email": "..."} - -Tu disposes aussi d'une memoire professionnelle persistante pour les clients, projets, taches, notes et depots Git. -Quand l'utilisateur te demande de noter, memoriser, ajouter ou associer une information professionnelle, reponds uniquement avec un JSON. -Actions disponibles : -{"action": "ajouter_client", "nom": "...", "notes": "...", "statut": "actif"} -{"action": "supprimer_client", "nom": "..."} -{"action": "ajouter_projet", "nom": "...", "client": "...", "statut": "...", "resume": "...", "prochaine_action": "..."} -{"action": "ajouter_tache", "titre": "...", "client": "...", "projet": "...", "details": "...", "echeance": "..."} -{"action": "terminer_tache", "id": 123} -{"action": "ajouter_repo", "nom": "...", "projet": "...", "chemin": "...", "url": "...", "branche": "..."} -{"action": "ajouter_note", "contenu": "...", "sujet": "...", "client": "...", "projet": "...", "type": "note"} -{"action": "interroger_base", "sql": "SELECT ...", "question": "..."} - -Si une phrase contient plusieurs choses a enregistrer, utilise : -{"actions": [{...}, {...}]} - -Quand l'utilisateur demande ce que tu sais d'un client, d'un projet, d'une tache ou d'un depot, utilise chercher_memoire. -Si l'utilisateur dit "pour CLIENT" en ajoutant une tache, renseigne toujours le champ client avec CLIENT. +Tu peux discuter normalement en francais et aider Laurent avec sa memoire professionnelle. +Le routage des actions, des lectures SQL et des confirmations est gere avant toi. +Si tu recois une question generale, reponds naturellement avec le contexte fourni. +Si une information manque pour repondre correctement, demande une precision. Pour tout le reste, reponds en francais naturel, avec des phrases courtes. N'utilise pas d'anglais sauf si l'utilisateur le demande explicitement. @@ -143,8 +118,10 @@ Regles : - Pour retirer/enlever/supprimer un client de la liste, utilise supprimer_client. - Pour "quel client a le plus de taches", utilise interroger_base avec COUNT, GROUP BY, ORDER BY. - Pour "quelles sont mes taches", "mes taches a faire", "taches pour mes clients", utilise interroger_base sur tasks avec clients/projects. -- Si l'utilisateur dit "lui", "ce client", "ce projet" ou "cette tache", utilise le contexte de conversation en cours. -- Si l'utilisateur demande "que dois-je faire pour lui ?", "c'est quoi comme tache ?" ou "quelle est la tache ?", utilise interroger_base avec le dernier client/projet connu. +- Le dernier message est prioritaire, mais tu dois interpreter les pronoms et references implicites avec toute la conversation fournie. +- Si l'utilisateur dit "lui", "le", "la", "ca", "ça", "ce client", "ce projet" ou "cette tache", retrouve l'objet vise dans l'historique recent avant de choisir l'action. +- Si tu ne peux pas identifier clairement l'objet vise, type="clarification". +- Les questions de suivi courtes doivent etre resolues avec l'historique recent avant de choisir interroger_base, une action directe ou une clarification. """ @@ -309,7 +286,7 @@ def demander_au_llm(session_id, texte): def router_intention(session_id, texte): - historique = histories.get(session_id, [])[-12:] + historique = histories.get(session_id, [])[-20:] messages = [ {"role": "system", "content": ROUTER_PROMPT}, { @@ -1106,8 +1083,7 @@ def traiter_message(session_id, texte, avec_audio=False): reponse = decision["reply"] if not reponse: reponse = demander_au_llm(session_id, texte) - else: - ajouter_echange_historique(session_id, texte, reponse) + ajouter_echange_historique(session_id, texte, reponse) audio_url = None if avec_audio and TTS_PROVIDER == "groq":