Improve router

This commit is contained in:
2026-04-27 17:06:30 +02:00
parent dfdc8d26bb
commit 9edba16a4e

44
app.py
View File

@@ -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":