33800 Docs

← Retour

Task : Intent Detection Hybride

Date : 01/02/2026 Status : TERMINE

Actions effectuees

Fichiers crees

  1. migrations/017_trigger_tags.sql - Migration ajout trigger_tags sur actions et routines (avec index GIN)
  2. src/utils/frenchMatcher.ts - Stemming francais, phonetique, matching combine avec scores
  3. src/services/intentClassifier.ts - Validation LLM, confrontation deterministe vs LLM

Fichiers modifies

Backend (connectors-api)

  1. src/data/connector-types.ts - trigger_tags + generic_tags sur ConnectorType interface + 26 connecteurs
  2. src/types/action.ts - trigger_tags sur Action, CreateActionInput, UpdateActionInput
  3. src/types/routine.ts - trigger_tags sur Routine, CreateRoutineInput, UpdateRoutineInput
  4. src/services/intentDetector.ts - Refactorise : tags des ConnectorTypes au lieu de maps hardcodees, stemming, phonetique, _matchSource/_matchScore
  5. src/services/aiChat.ts - Integration validation LLM (confrontation), nouveau type pending_intent 'clarify_confrontation'
  6. src/services/actions.ts - Support trigger_tags dans create/update
  7. src/services/routines.ts - Support trigger_tags dans create/update
  8. src/index.ts - trigger_tags dans schemas validation API (actions + routines)

Frontend (connectors-front)

  1. src/routes/actions/new/index.tsx - Champ trigger_tags dans formulaire creation
  2. src/routes/actions/[id]/edit/index.tsx - Champ trigger_tags dans formulaire edition

Architecture implementee

Message utilisateur
       |
       v
[Couche 1] Detection deterministe amelioree (~0ms)
  - Tags sur ConnectorTypes (trigger_tags = HIGH, generic_tags = MEDIUM)
  - Stemming francais (conjugaisons irregulieres)
  - Recherche phonetique (fautes de frappe)
  - trigger_tags sur actions/routines
  - _matchSource + _matchScore sur chaque DetectedIntent
       |
       v
[Couche 2] Validation LLM si necessaire (~200-500ms)
  - shouldValidateWithLLM() decide si LLM necessaire
  - Skippee si match exact, URL, trigger_tag score >= 20
  - Activee si stem, phonetique, ai_verb_noun, generic_tag
  - Confrontation : deterministe vs LLM
       |
       v
[Couche 3] Interaction utilisateur si desaccord
  - Choix presentes via InteractiveMetadata
  - Nouveau type pending_intent: clarify_confrontation
  - Reutilise le systeme existant

Tests a effectuer

  1. "peux tu me faire une petite video de chat" -> wan21 (stem "fair" + "video")
  2. "afiche batman" (faute) -> phonetique "affiche" -> Jellyfin search
  3. "montre moi des films" -> generic_tag "film" -> Jellyfin (LLM valide)
  4. "genere une image de poulet" -> AI verb+noun -> comfyui (LLM confirme)
  5. "cherche batman sur jellyfin" -> trigger_tag "jellyfin" -> fast-path, pas de LLM

A noter