feat: Léa humanisée — plus de jargon technique, ton chaleureux

- "Workflow" → "tâche" partout
- Vouvoiement, ton de collègue bienveillante
- Noms de tâches lisibles (Bloc-notes — Écriture et sauvegarde)
- Notifications féminisées (Connectée, prête)
- Boutons : Apprenez-moi, Lancer, Données, Arrêter, Aide
- Intent parser enrichi (langage naturel humain)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-03-17 23:36:28 +01:00
parent 4e217e30dd
commit 32c6808afb
2 changed files with 99 additions and 91 deletions

View File

@@ -92,10 +92,12 @@ class IntentParser:
], ],
IntentType.EXECUTE: [ IntentType.EXECUTE: [
# Verbes d'action explicites # Verbes d'action explicites
r"(?:lance|exécute|démarre|fai[st]|run|start|execute)\s+(.+)", r"(?:lance[rz]?|exécute[rz]?|démarre[rz]?|fai[st]|run|start|execute)\s+(.+)",
r"(?:je veux|je voudrais|peux-tu)\s+(.+)", r"(?:je veux|je voudrais|peux-tu|pouvez-vous)\s+(.+)",
r"(?:facturer?|créer?|générer?|exporter?)\s+(.+)", r"(?:facturer?|créer?|générer?|exporter?)\s+(.+)",
r"^(.+)\s+(?:maintenant|tout de suite|svp|stp)$", r"^(.+)\s+(?:maintenant|tout de suite|svp|stp)$",
# Langage humain — demande de replay
r"(?:refai[st](?:es)?|refaire|recommence[rz]?|rejoue[rz]?)\s+(?:la\s+)?(?:tâche\s+)?(.+)",
# Gestes courants (UI actions) — doivent rester EXECUTE # Gestes courants (UI actions) — doivent rester EXECUTE
r"(?:ferme[rz]?|ouvr[eir]+[sz]?|clique[rz]?|sélectionne[rz]?|coche[rz]?|décoche[rz]?)\s+(.+)", r"(?:ferme[rz]?|ouvr[eir]+[sz]?|clique[rz]?|sélectionne[rz]?|coche[rz]?|décoche[rz]?)\s+(.+)",
r"(?:copie[rz]?|colle[rz]?|coupe[rz]?|supprime[rz]?|efface[rz]?)\s+(.+)", r"(?:copie[rz]?|colle[rz]?|coupe[rz]?|supprime[rz]?|efface[rz]?)\s+(.+)",
@@ -113,13 +115,19 @@ class IntentParser:
r"(?:déconnecte[rz]?|logout|log\s*out|sign\s*out)\s*(.+)?", r"(?:déconnecte[rz]?|logout|log\s*out|sign\s*out)\s*(.+)?",
# Raccourcis clavier # Raccourcis clavier
r"(?:ctrl|alt|shift|maj)\s*\+\s*\w+", r"(?:ctrl|alt|shift|maj)\s*\+\s*\w+",
# Langage humain — demande d'apprentissage (déclenche l'enregistrement)
r"(?:apprends|apprenez)[- ]moi\s+(.+)",
], ],
IntentType.LIST: [ IntentType.LIST: [
r"(?:liste|montre|affiche|quels?\s+sont)\s+(?:les\s+|des\s+)?(?:workflows?|processus|automatisations?)", r"(?:liste|montre|affiche|quels?\s+sont)\s+(?:les\s+|des\s+)?(?:workflows?|tâches?|processus|automatisations?)",
r"(?:quels?|quelles?)\s+(?:workflows?|processus|automatisations?)", r"(?:quels?|quelles?)\s+(?:workflows?|tâches?|processus|automatisations?)",
r"liste\s+des\s+workflows?", r"liste\s+des\s+(?:workflows?|tâches?)",
r"(?:workflows?|processus)\s+disponibles?", r"(?:workflows?|tâches?|processus)\s+disponibles?",
r"(?:voir|afficher)\s+(?:les\s+|tous\s+les\s+)?workflows?", r"(?:voir|afficher)\s+(?:les\s+|tous\s+les\s+|mes\s+)?(?:workflows?|tâches?)",
# Langage humain — demande de liste
r"(?:qu'est-ce que\s+(?:tu|vous)\s+sai[st]\s+faire)",
r"(?:que\s+sai[st]-(?:tu|vous)\s+faire)",
r"mes\s+tâches?",
], ],
IntentType.QUERY: [ IntentType.QUERY: [
# Questions directes avec mots interrogatifs # Questions directes avec mots interrogatifs
@@ -141,9 +149,9 @@ class IntentParser:
r"comment (?:utiliser|ça s'utilise|on fait)\s*\??", r"comment (?:utiliser|ça s'utilise|on fait)\s*\??",
r"\?{2,}", r"\?{2,}",
# "que peux-tu faire", "quoi faire" = demande d'aide # "que peux-tu faire", "quoi faire" = demande d'aide
r"(?:qu'est-ce que|que)\s+(?:je peux|tu peux)\s+faire", r"(?:qu'est-ce que|que)\s+(?:je peux|tu peux|vous pouvez)\s+faire",
r"^quoi\s+faire\s*\??$", r"^quoi\s+faire\s*\??$",
r"(?:que\s+)?(?:puis-je|peux-tu|peut-on)\s+faire\s*\??", r"(?:que\s+)?(?:puis-je|peux-tu|pouvez-vous|peut-on)\s+faire\s*\??",
r"(?:besoin\s+d'aide|j'ai\s+besoin\s+d'aide)", r"(?:besoin\s+d'aide|j'ai\s+besoin\s+d'aide)",
], ],
IntentType.GREETING: [ IntentType.GREETING: [
@@ -156,8 +164,10 @@ class IntentParser:
r"(?:terminé|fini|done)\s*\?", r"(?:terminé|fini|done)\s*\?",
], ],
IntentType.CANCEL: [ IntentType.CANCEL: [
r"(?:annule|stop|arrête|cancel|abort)", r"(?:annule[rz]?|stop|arrête[rz]?|cancel|abort)",
r"(?:laisse tomber|oublie)", r"(?:laisse[rz]?\s+tomber|oublie[rz]?)",
# Langage humain — stop courant
r"^(?:arrêtez|stoppe[rz]?)$",
], ],
IntentType.HISTORY: [ IntentType.HISTORY: [
r"(?:historique|history|dernières?\s+commandes?)", r"(?:historique|history|dernières?\s+commandes?)",
@@ -550,9 +560,9 @@ class IntentParser:
"""Vérifier si une clarification est nécessaire.""" """Vérifier si une clarification est nécessaire."""
if intent_type == IntentType.EXECUTE: if intent_type == IntentType.EXECUTE:
# Si pas de hint de workflow, demander clarification # Si pas de hint de tâche, demander clarification
if not workflow_hint: if not workflow_hint:
return True, "Quel workflow souhaitez-vous exécuter ?" return True, "Quelle tâche souhaitez-vous lancer ?"
# Si le hint est trop vague # Si le hint est trop vague
if len(workflow_hint.split()) <= 1: if len(workflow_hint.split()) <= 1:
@@ -571,18 +581,18 @@ class IntentParser:
workflow_names = [w.get("name", "") for w in self._workflows_cache[:15]] workflow_names = [w.get("name", "") for w in self._workflows_cache[:15]]
workflows_context = f"\nWorkflows disponibles: {', '.join(workflow_names)}" workflows_context = f"\nWorkflows disponibles: {', '.join(workflow_names)}"
prompt = f"""Tu es un assistant RPA. Analyse cette requête utilisateur. prompt = f"""Tu es Léa, une assistante chaleureuse. Analyse cette requête utilisateur.
REQUÊTE: "{query}" REQUÊTE: "{query}"
{workflows_context} {workflows_context}
{f"Contexte conversation: {json.dumps(context, ensure_ascii=False)}" if context else ""} {f"Contexte conversation: {json.dumps(context, ensure_ascii=False)}" if context else ""}
INTENTIONS POSSIBLES: INTENTIONS POSSIBLES:
- execute: l'utilisateur veut lancer/exécuter un workflow ou une action UI (geste) - execute: l'utilisateur veut lancer/refaire une tâche ou une action UI (geste). Inclut "apprends-moi", "refais la tâche", "lance"
- list: l'utilisateur veut voir les workflows disponibles (mots-clés: liste, quels, workflows, disponibles, montrer) - list: l'utilisateur veut voir les tâches disponibles (mots-clés: liste, quels, tâches, qu'est-ce que tu sais faire, mes tâches)
- query: l'utilisateur pose une question (comment, pourquoi, c'est quoi, quel) - query: l'utilisateur pose une question (comment, pourquoi, c'est quoi, quel)
- status: l'utilisateur demande le statut d'exécution - status: l'utilisateur demande le statut d'exécution
- cancel: l'utilisateur veut annuler - cancel: l'utilisateur veut arrêter/annuler (arrête, stop, annule)
- history: l'utilisateur veut voir l'historique - history: l'utilisateur veut voir l'historique
- help: l'utilisateur demande de l'aide ou ce qu'il peut faire - help: l'utilisateur demande de l'aide ou ce qu'il peut faire
- greeting: l'utilisateur dit bonjour/salut/hello - greeting: l'utilisateur dit bonjour/salut/hello

View File

@@ -60,39 +60,40 @@ class ResponseGenerator:
""" """
# Templates de réponses par type d'intention # Templates de réponses par type d'intention
# Ton : collègue chaleureuse et professionnelle, vouvoiement
RESPONSE_TEMPLATES = { RESPONSE_TEMPLATES = {
IntentType.EXECUTE: { IntentType.EXECUTE: {
"success": [ "success": [
"J'ai lancé le workflow '{workflow}'. {details}", "C'est parti, je lance '{workflow}'. {details}",
"Le workflow '{workflow}' est en cours d'exécution. {details}", "Je m'occupe de '{workflow}'. {details}",
"C'est parti pour '{workflow}' ! {details}" "'{workflow}' est en cours ! {details}"
], ],
"error": [ "error": [
"Impossible d'exécuter '{workflow}': {error}", "Hmm, je n'ai pas réussi à faire '{workflow}' : {error}",
"Erreur lors du lancement de '{workflow}': {error}", "Désolée, '{workflow}' a rencontré un souci : {error}",
"Le workflow '{workflow}' a échoué: {error}" "Oups, '{workflow}' n'a pas fonctionné : {error}"
], ],
"not_found": [ "not_found": [
"Je ne sais pas encore faire '{query}'. Montre-moi comment faire et je l'apprendrai !", "Je ne connais pas encore '{query}'. Montrez-moi comment faire et je l'apprendrai !",
"'{query}' m'est inconnu pour l'instant. Tu peux me montrer en enregistrant un workflow.", "'{query}' m'est inconnu pour l'instant. Vous pouvez me montrer en cliquant sur « Apprenez-moi ».",
"Je ne connais pas '{query}'. Montre-moi et je m'en souviendrai !" "Je ne sais pas encore faire '{query}'. Montrez-moi et je m'en souviendrai !"
], ],
"gesture": [ "gesture": [
"{gesture_name} ({gesture_keys}) envoyé !", "{gesture_name} ({gesture_keys}) envoyé !",
"Raccourci {gesture_name} ({gesture_keys}) exécuté.", "Raccourci {gesture_name} ({gesture_keys}) exécuté.",
], ],
"copilot": [ "copilot": [
"Mode pas-à-pas activé pour '{workflow}'. Validez chaque étape.", "Mode pas-à-pas activé pour '{workflow}'. Je vous demande de valider chaque étape.",
] ]
}, },
IntentType.LIST: { IntentType.LIST: {
"success": [ "success": [
"Voici les workflows disponibles :\n{list}", "Voici les tâches que je sais faire :\n{list}",
"J'ai trouvé {count} workflows :\n{list}", "J'ai {count} tâches en mémoire :\n{list}",
], ],
"empty": [ "empty": [
"Aucun workflow n'est configuré pour le moment.", "Je n'ai encore appris aucune tâche. Montrez-moi quelque chose !",
"La liste des workflows est vide." "Ma liste est vide pour le moment. Apprenez-moi une première tâche !"
] ]
}, },
IntentType.QUERY: { IntentType.QUERY: {
@@ -101,77 +102,78 @@ class ResponseGenerator:
"À propos de '{topic}' :\n{answer}" "À propos de '{topic}' :\n{answer}"
], ],
"not_found": [ "not_found": [
"Je n'ai pas d'information sur '{topic}'.", "Je n'ai pas d'information sur '{topic}'. Pouvez-vous préciser ?",
"Je ne peux pas répondre à cette question sur '{topic}'." "Désolée, je ne peux pas vous répondre sur '{topic}'."
] ]
}, },
IntentType.HELP: { IntentType.HELP: {
"general": [ "general": [
"Je suis votre assistant RPA. Voici ce que je peux faire :\n\n" "Je suis Léa, votre assistante. Voici ce que je peux faire :\n\n"
"Exécuter des workflows : \"lance facturation client Acme\"\n" "Apprendre une tâche : cliquez sur « Apprenez-moi »\n"
"Lister les workflows : \"quels workflows sont disponibles ?\"\n" "Refaire une tâche : \"lance facturation\" ou cliquez sur « Lancer »\n"
"• Voir le statut : \"où en est l'exécution ?\"\n" "• Voir mes tâches : \"qu'est-ce que tu sais faire ?\"\n"
"Annuler : \"annule\"\n\n" "Importer des données : \"importe le fichier Excel\"\n"
"Tapez votre commande en langage naturel !", "• Arrêter : \"arrête\"\n\n"
"Parlez-moi naturellement, je fais de mon mieux pour comprendre !",
] ]
}, },
IntentType.GREETING: { IntentType.GREETING: {
"default": [ "default": [
"Bonjour ! Je suis votre assistant RPA. Comment puis-je vous aider ?", "Bonjour ! Je suis Léa. Que puis-je faire pour vous ?",
"Salut ! Que puis-je faire pour vous ?", "Bonjour ! Comment puis-je vous aider aujourd'hui ?",
"Bonjour ! Tapez une commande ou 'aide' pour voir ce que je peux faire.", "Bonjour ! Dites-moi ce dont vous avez besoin, ou tapez « aide ».",
] ]
}, },
IntentType.STATUS: { IntentType.STATUS: {
"running": [ "running": [
"Exécution en cours : '{workflow}'\nProgression : {progress}%\n{message}", "Je suis en train de faire '{workflow}' — progression : {progress}%\n{message}",
"Le workflow '{workflow}' s'exécute ({progress}%): {message}" "'{workflow}' est en cours ({progress}%) : {message}"
], ],
"idle": [ "idle": [
"Aucune exécution en cours. Système prêt.", "Tout est calme, je suis disponible. Que puis-je faire pour vous ?",
"Tout est calme. Que puis-je faire pour vous ?" "Rien en cours. Je suis prête !"
], ],
"completed": [ "completed": [
"Dernière exécution : '{workflow}' - {status}", "La dernière tâche '{workflow}' est terminée : {status}",
"'{workflow}' est terminé : {status}" "'{workflow}' est terminé : {status}"
] ]
}, },
IntentType.CANCEL: { IntentType.CANCEL: {
"success": [ "success": [
"Exécution annulée.", "C'est arrêté.",
"J'ai arrêté le workflow en cours.", "J'ai tout arrêté.",
"Annulation effectuée." "Annulation faite."
], ],
"nothing": [ "nothing": [
"Rien à annuler, aucune exécution en cours.", "Il n'y a rien en cours à arrêter.",
"Il n'y a pas d'exécution active." "Rien à annuler, je suis disponible."
] ]
}, },
IntentType.HISTORY: { IntentType.HISTORY: {
"success": [ "success": [
"Voici vos dernières commandes :\n{history}", "Voici vos dernières actions :\n{history}",
"Historique récent :\n{history}" "Historique récent :\n{history}"
], ],
"empty": [ "empty": [
"Pas encore d'historique.", "Pas encore d'historique.",
"Vous n'avez pas encore exécuté de commandes." "Vous n'avez encore rien fait avec moi."
] ]
}, },
IntentType.CONFIRM: { IntentType.CONFIRM: {
"accepted": [ "accepted": [
"Très bien, j'exécute '{workflow}'.", "Très bien, je m'en occupe : '{workflow}'.",
"C'est parti pour '{workflow}' !", "C'est parti pour '{workflow}' !",
"Confirmé. Lancement de '{workflow}'." "Entendu. Je lance '{workflow}'."
], ],
"no_pending": [ "no_pending": [
"Il n'y a rien à confirmer.", "Il n'y a rien à confirmer pour le moment.",
"Aucune action en attente de confirmation." "Aucune action en attente."
] ]
}, },
IntentType.DENY: { IntentType.DENY: {
"cancelled": [ "cancelled": [
"Action annulée.", "D'accord, c'est annulé.",
"D'accord, j'annule.", "Entendu, j'annule.",
"Compris, on oublie." "Compris, on oublie."
] ]
}, },
@@ -186,15 +188,15 @@ class ResponseGenerator:
"Fichier **{filename}** prêt : {total_rows} lignes avec les colonnes {columns}. On crée la table '{table_name}' ?", "Fichier **{filename}** prêt : {total_rows} lignes avec les colonnes {columns}. On crée la table '{table_name}' ?",
], ],
"imported": [ "imported": [
"Table **'{table_name}'** créée avec {row_count} lignes et {col_count} colonnes ({columns}). Vous pouvez maintenant utiliser 'Pour chaque ligne' dans un workflow !", "Table **'{table_name}'** créée avec {row_count} lignes et {col_count} colonnes ({columns}). Vous pouvez maintenant l'utiliser dans une tâche !",
"Import réussi ! Table **'{table_name}'** : {row_count} lignes, {col_count} colonnes ({columns}).", "Import réussi ! Table **'{table_name}'** : {row_count} lignes, {col_count} colonnes ({columns}).",
], ],
"list_tables": [ "list_tables": [
"Voici les tables disponibles :\n{tables_list}", "Voici vos tables de données :\n{tables_list}",
"Tables dans la base :\n{tables_list}", "Tables disponibles :\n{tables_list}",
], ],
"no_tables": [ "no_tables": [
"Aucune table n'a été importée pour l'instant. Envoyez-moi un fichier Excel pour commencer !", "Vous n'avez pas encore de données importées. Envoyez-moi un fichier Excel pour commencer !",
"La base est vide. Importez un fichier Excel pour créer votre première table.", "La base est vide. Importez un fichier Excel pour créer votre première table.",
], ],
"table_info": [ "table_info": [
@@ -204,15 +206,15 @@ class ResponseGenerator:
"J'ai trouvé {count} fichiers Excel dans le dossier :\n{files_list}\n\nDites-moi lequel importer !", "J'ai trouvé {count} fichiers Excel dans le dossier :\n{files_list}\n\nDites-moi lequel importer !",
], ],
"folder_empty": [ "folder_empty": [
"Aucun fichier Excel trouvé dans le dossier '{folder}'. Vérifiez le chemin.", "Je n'ai trouvé aucun fichier Excel dans '{folder}'. Vérifiez le chemin.",
], ],
"file_not_found": [ "file_not_found": [
"Je n'ai pas trouvé le fichier '{file_path}'. Vérifiez le chemin ou envoyez-le via le bouton 📎.", "Je n'ai pas trouvé le fichier '{file_path}'. Vérifiez le chemin ou envoyez-le directement.",
"Fichier introuvable : '{file_path}'. Vous pouvez aussi glisser un fichier dans le chat.", "Fichier introuvable : '{file_path}'. Vous pouvez aussi glisser un fichier dans le chat.",
], ],
"error": [ "error": [
"Erreur lors de l'import : {error}", "Désolée, l'import a échoué : {error}",
"L'import a échoué : {error}", "Oups, un souci lors de l'import : {error}",
], ],
"uploaded": [ "uploaded": [
"Fichier **{filename}** reçu ! Je l'analyse...", "Fichier **{filename}** reçu ! Je l'analyse...",
@@ -220,9 +222,9 @@ class ResponseGenerator:
}, },
IntentType.UNKNOWN: { IntentType.UNKNOWN: {
"default": [ "default": [
"Je n'ai pas compris. Pouvez-vous reformuler ?", "Je n'ai pas bien compris. Pouvez-vous reformuler ?",
"Désolé, je ne comprends pas '{query}'. Tapez 'aide' pour voir les commandes.", "Désolée, je ne comprends pas. Tapez « aide » pour voir ce que je sais faire.",
"'{query}' ? Je ne suis pas sûr de comprendre." "Hmm, je n'ai pas saisi votre demande. Pouvez-vous préciser ?"
] ]
} }
} }
@@ -231,21 +233,21 @@ class ResponseGenerator:
CONTEXTUAL_SUGGESTIONS = { CONTEXTUAL_SUGGESTIONS = {
"after_execute": [ "after_execute": [
"voir le statut", "voir le statut",
"annuler", "arrêter",
"liste des workflows" "mes tâches"
], ],
"after_error": [ "after_error": [
"aide", "aide",
"liste des workflows", "mes tâches",
"réessayer" "réessayer"
], ],
"after_list": [ "after_list": [
"exécuter un workflow", "lancer une tâche",
"aide" "aide"
], ],
"idle": [ "idle": [
"facturer client X", "qu'est-ce que tu sais faire ?",
"liste des workflows", "apprenez-moi",
"aide" "aide"
], ],
"after_import": [ "after_import": [
@@ -334,7 +336,7 @@ class ResponseGenerator:
Générer un message de progression. Générer un message de progression.
Args: Args:
workflow_name: Nom du workflow workflow_name: Nom de la tâche
progress: Pourcentage de progression progress: Pourcentage de progression
step: Étape actuelle step: Étape actuelle
current: Numéro de l'étape current: Numéro de l'étape
@@ -348,11 +350,11 @@ class ResponseGenerator:
filled = int(bar_length * progress / 100) filled = int(bar_length * progress / 100)
bar = "" * filled + "" * (bar_length - filled) bar = "" * filled + "" * (bar_length - filled)
message = f"**{workflow_name}** [{bar}] {progress}%\n\nÉtape {current}/{total}: {step}" message = f"**{workflow_name}** [{bar}] {progress}%\n\nÉtape {current}/{total} : {step}"
return GeneratedResponse( return GeneratedResponse(
message=message, message=message,
suggestions=["annuler"] if progress < 100 else [], suggestions=["arrêter"] if progress < 100 else [],
action_required=False, action_required=False,
metadata={ metadata={
"workflow": workflow_name, "workflow": workflow_name,
@@ -372,7 +374,7 @@ class ResponseGenerator:
Générer un message de résultat d'exécution. Générer un message de résultat d'exécution.
Args: Args:
workflow_name: Nom du workflow workflow_name: Nom de la tâche
success: Succès ou échec success: Succès ou échec
message: Message détaillé message: Message détaillé
duration: Durée d'exécution en secondes duration: Durée d'exécution en secondes
@@ -381,18 +383,14 @@ class ResponseGenerator:
GeneratedResponse avec le résultat GeneratedResponse avec le résultat
""" """
if success: if success:
emoji = "" response_message = f"C'est fait ! **{workflow_name}** s'est bien passé.\n\n{message}"
status = "terminé avec succès"
suggestions = self.CONTEXTUAL_SUGGESTIONS["idle"] suggestions = self.CONTEXTUAL_SUGGESTIONS["idle"]
else: else:
emoji = "" response_message = f"Hmm, **{workflow_name}** n'a pas fonctionné.\n\n{message}"
status = "échoué"
suggestions = self.CONTEXTUAL_SUGGESTIONS["after_error"] suggestions = self.CONTEXTUAL_SUGGESTIONS["after_error"]
response_message = f"{emoji} **{workflow_name}** {status}\n\n{message}"
if duration: if duration:
response_message += f"\n\nDurée: {duration:.1f}s" response_message += f"\n\nDurée : {duration:.1f}s"
return GeneratedResponse( return GeneratedResponse(
message=response_message, message=response_message,
@@ -446,7 +444,7 @@ class ResponseGenerator:
template = random.choice(templates["not_found"]) template = random.choice(templates["not_found"])
query = result.get("query", intent.raw_query) query = result.get("query", intent.raw_query)
message = template.format(query=query) message = template.format(query=query)
suggestions = ["lister les workflows", "aide", "enregistrer un workflow"] suggestions = ["mes tâches", "aide", "apprenez-moi"]
else: else:
template = random.choice(templates["error"]) template = random.choice(templates["error"])
@@ -764,7 +762,7 @@ class ResponseGenerator:
suggestions = self.CONTEXTUAL_SUGGESTIONS["after_error"] suggestions = self.CONTEXTUAL_SUGGESTIONS["after_error"]
else: else:
message = "Je n'ai pas compris la demande d'import. Précisez le fichier ou dites 'montre les tables'." message = "Je n'ai pas compris votre demande. Précisez le fichier ou dites « montre les tables »."
suggestions = ["montre les tables", "aide"] suggestions = ["montre les tables", "aide"]
return GeneratedResponse( return GeneratedResponse(
@@ -788,7 +786,7 @@ class ResponseGenerator:
return GeneratedResponse( return GeneratedResponse(
message=message, message=message,
suggestions=["aide", "liste des workflows"], suggestions=["aide", "mes tâches"],
action_required=False action_required=False
) )