This commit is contained in:
2026-04-27 15:56:25 +02:00
parent 7fb709811c
commit b23a1de6f3
2 changed files with 88 additions and 12 deletions

57
app.py
View File

@@ -71,6 +71,7 @@ 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.
Pour tout le reste, reponds en francais naturel, avec des phrases courtes.
N'utilise pas d'anglais sauf si l'utilisateur le demande explicitement.
@@ -186,13 +187,21 @@ def detecter_action_directe(texte):
{
"action": "ajouter_client",
"nom": nom,
"notes": "Ajoute depuis une liste dictee par Laurent.",
"notes": "Ajoute depuis une liste fournie par Laurent.",
"statut": "actif",
}
for nom in clients_a_ajouter
]
}
tache_client = detecter_tache_client(texte_nettoye)
if tache_client:
return tache_client
recherche_taches = detecter_recherche_taches(texte_nettoye)
if recherche_taches:
return recherche_taches
recherche_match = re.search(
r"(?:qu(?:'| )?est[- ]?ce que tu sais sur|que sais[- ]?tu sur|cherche dans la memoire|memoire sur)\s+(.+)",
texte_nettoye,
@@ -261,6 +270,45 @@ def detecter_action_directe(texte):
return {"actions": actions}
def detecter_tache_client(texte):
if not re.search(r"\b(note|notes|noter|tache|doit|dois|a faire|à faire)\b", texte, flags=re.IGNORECASE):
return None
match = re.search(
r"\bpour\s+(?:mon\s+client\s+|le\s+client\s+)?([A-Z0-9][A-Z0-9&.\- ]{1,40}?)[,\s]+(?:on\s+)?(?:doit|dois|devra|faut)\s+(.+?)(?:\s+tu\s+peux\s+noter.*|\s+note.*|\s+notes.*|\s*$)",
texte,
flags=re.IGNORECASE,
)
if not match:
return None
client_nom = nettoyer_nom_client(match.group(1))
titre = nettoyer_titre_tache(match.group(2))
if not client_nom or not titre:
return None
return {
"action": "ajouter_tache",
"titre": titre,
"client": client_nom,
"details": texte,
}
def detecter_recherche_taches(texte):
match = re.search(
r"\b(?:que\s+dois[- ]?je\s+faire|quoi\s+faire|taches?|a faire|à faire)\b.*\b(?:pour|sur)\s+(?:mon\s+client\s+|le\s+client\s+)?([A-Z0-9][A-Z0-9&.\- ]{1,40})",
texte,
flags=re.IGNORECASE,
)
if not match:
return None
client_nom = nettoyer_nom_client(match.group(1))
if not client_nom:
return None
return {"action": "chercher_memoire", "requete": client_nom}
def extraire_liste_clients(texte):
if not re.search(r"\bclients?\b", texte, flags=re.IGNORECASE):
return []
@@ -316,6 +364,13 @@ def nettoyer_nom_client(nom):
return nom
def nettoyer_titre_tache(titre):
titre = titre.strip(" -\t\r.,;:?")
titre = re.sub(r"^de\s+", "", titre, flags=re.IGNORECASE)
titre = re.sub(r"\s+", " ", titre)
return titre[:1].upper() + titre[1:] if titre else ""
def transcrire_audio(fichier):
suffix = Path(fichier.filename or "voice.webm").suffix or ".webm"
with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp: