feat: Léa personnalité humaine + fichiers + fix doublon menu

- Small talk : café, merci, ça va, qui es-tu → réponses chaleureuses
- Bouton 📎 dans le chat pour envoyer des fichiers
- Polices 13-15pt, fenêtre 600x800
- Fix doublon "Discuter avec Léa" dans le systray
- IntentType.SMALL_TALK avec 7 catégories

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-03-18 00:01:04 +01:00
parent 32c6808afb
commit 8d6b49277f
2 changed files with 140 additions and 4 deletions

View File

@@ -37,6 +37,7 @@ class IntentType(Enum):
DENY = "deny" # Refuser une action
CLARIFY = "clarify" # Demander une clarification
DATA_IMPORT = "data_import" # Importer des données (Excel, CSV)
SMALL_TALK = "small_talk" # Conversation informelle (merci, café, ça va...)
UNKNOWN = "unknown" # Intention non reconnue
@@ -129,6 +130,24 @@ class IntentParser:
r"(?:que\s+sai[st]-(?:tu|vous)\s+faire)",
r"mes\s+tâches?",
],
# SMALL_TALK doit être AVANT QUERY pour que "qui es-tu" ne soit pas
# capturé par le pattern générique "qui + ..." de QUERY
IntentType.SMALL_TALK: [
# Remerciements
r"^(?:merci|thanks?|thx|super|génial|parfait|cool|nickel|impec|impeccable|excellent|formidable)(?:\s.*)?$",
# Adieux
r"^(?:au revoir|à plus|bye|bonne nuit|à bientôt|à demain|ciao|tchao|tchuss|adieu)(?:\s.*)?$",
# Compliments
r"^(?:bien joué|bravo|top|chapeau|impressionnant|pas mal|bien fait|beau travail|good job|nice|trop bien|magnifique)(?:\s.*)?$",
# Mécontentement
r"^(?:c'est nul|nul|pas bien|pas top|pas ouf|bof|mauvais|moche|horrible|catastrophe|c'est pas bon|ça craint|erreur|bug|naze|pourri)(?:\s.*)?$",
# Humour / café
r"(?:un café|café|coffee|fais-moi rire|blague|raconte.+blague|drôle|rigol[eo]|mdr|lol|haha|ptdr|xd|😂|🤣)",
# Identité — qui es-tu ?
r"(?:qui es[- ]tu|t'es qui|comment tu t'appelles|c'est quoi ton (?:nom|prénom)|t'es quoi|vous êtes qui|tu es quoi|tu t'appelles comment)",
# Sentiments — ça va ?
r"(?:ça va|comment (?:ça |tu |vous )?va[st]?|comment allez[- ]vous|tu vas bien|la forme|en forme)",
],
IntentType.QUERY: [
# Questions directes avec mots interrogatifs
r"(?:comment|pourquoi|quand|où|qui)\s+(.+)\??",
@@ -446,8 +465,8 @@ class IntentParser:
# Convertir en minuscules
normalized = query.lower()
# Supprimer la ponctuation excessive
normalized = re.sub(r'[!.]+$', '', normalized)
# Supprimer la ponctuation finale
normalized = re.sub(r'[!.?]+$', '', normalized)
# Normaliser les espaces
normalized = re.sub(r'\s+', ' ', normalized).strip()
@@ -598,6 +617,7 @@ INTENTIONS POSSIBLES:
- greeting: l'utilisateur dit bonjour/salut/hello
- confirm: l'utilisateur confirme (oui, ok, go)
- deny: l'utilisateur refuse (non, annule)
- small_talk: conversation informelle (merci, café, ça va, qui es-tu, bravo, c'est nul)
- unknown: impossible à déterminer
Réponds UNIQUEMENT en JSON valide (pas de texte avant/après):
@@ -733,6 +753,15 @@ if __name__ == "__main__":
"oui",
"annule",
"statut",
# SMALL_TALK — conversation informelle
"merci",
"un café",
"ça va ?",
"qui es-tu ?",
"c'est nul",
"bravo",
"au revoir",
"t'es qui",
# Fallback — ne doit PAS être EXECUTE
"blah blah test",
]