270 lines
6.7 KiB
Markdown
270 lines
6.7 KiB
Markdown
# đ€ Mode AssistĂ© - Conception
|
|
|
|
## đŻ Objectif
|
|
|
|
Intégrer le systÚme de rejeu dans l'Orchestrator pour fournir des **suggestions en temps réel** basées sur les tùches apprises.
|
|
|
|
## đ Flux du Mode AssistĂ©
|
|
|
|
```
|
|
1. Utilisateur effectue une action
|
|
â
|
|
2. EventCapture détecte l'action
|
|
â
|
|
3. Orchestrator capture le contexte (screenshot, fenĂȘtre)
|
|
â
|
|
4. Recherche de tĂąches similaires dans FAISS
|
|
â
|
|
5. Si correspondance trouvée (similarité > 0.75)
|
|
â
|
|
6. Afficher suggestion visuelle
|
|
â
|
|
7. Attendre validation utilisateur
|
|
ââ EntrĂ©e â ExĂ©cuter l'action suggĂ©rĂ©e
|
|
ââ Ăchap â Ignorer
|
|
ââ Alt+C â Corriger
|
|
â
|
|
8. Mettre Ă jour les scores de confiance
|
|
```
|
|
|
|
## đïž Architecture
|
|
|
|
### Composants Ă Modifier
|
|
|
|
1. **Orchestrator** (`orchestrator.py`)
|
|
- Ajouter `TaskReplayEngine`
|
|
- Ajouter méthode `_suggest_next_action()`
|
|
- Ajouter méthode `_handle_suggestion_response()`
|
|
|
|
2. **GUI** (`minimal_gui.py`)
|
|
- Ajouter overlay de suggestion
|
|
- Ajouter gestion des touches (EntrĂ©e/Ăchap/Alt+C)
|
|
|
|
3. **LearningManager** (`learning_manager.py`)
|
|
- Ajouter méthode `find_similar_tasks()`
|
|
- Améliorer `suggest_action()`
|
|
|
|
### Nouveaux Composants
|
|
|
|
1. **SuggestionManager** (nouveau)
|
|
- GÚre les suggestions en temps réel
|
|
- Calcule les scores de confiance
|
|
- GĂšre les timeouts
|
|
|
|
## đ ImplĂ©mentation
|
|
|
|
### Ătape 1 : IntĂ©grer TaskReplayEngine dans Orchestrator
|
|
|
|
```python
|
|
from .task_replay import TaskReplayEngine
|
|
|
|
class Orchestrator:
|
|
def __init__(self, ...):
|
|
# ... code existant ...
|
|
|
|
# Moteur de rejeu pour suggestions
|
|
self.replay_engine = TaskReplayEngine(
|
|
learning_manager,
|
|
embeddings_manager,
|
|
vision_utils,
|
|
input_utils,
|
|
logger,
|
|
config
|
|
)
|
|
```
|
|
|
|
### Ătape 2 : Ajouter la DĂ©tection de Contexte
|
|
|
|
```python
|
|
def _capture_context(self) -> Dict[str, Any]:
|
|
"""Capture le contexte actuel pour suggestions."""
|
|
screenshot = capture_screen()
|
|
window = get_active_window()
|
|
|
|
# Générer embedding du contexte
|
|
embedding = self.vision_analyzer.generate_embedding(screenshot)
|
|
|
|
return {
|
|
"screenshot": screenshot,
|
|
"window": window,
|
|
"embedding": embedding,
|
|
"timestamp": datetime.now()
|
|
}
|
|
```
|
|
|
|
### Ătape 3 : Recherche de TĂąches Similaires
|
|
|
|
```python
|
|
def _find_similar_tasks(self, context: Dict[str, Any]) -> List[Dict]:
|
|
"""Recherche les tĂąches similaires au contexte actuel."""
|
|
embedding = context["embedding"]
|
|
|
|
# Rechercher dans FAISS
|
|
results = self.learning_manager.embeddings_manager.search_similar(
|
|
embedding,
|
|
k=3
|
|
)
|
|
|
|
# Filtrer par seuil de similarité
|
|
similar_tasks = [
|
|
r for r in results
|
|
if r["similarity"] >= 0.75
|
|
]
|
|
|
|
return similar_tasks
|
|
```
|
|
|
|
### Ătape 4 : GĂ©nĂ©rer et Afficher Suggestion
|
|
|
|
```python
|
|
def _suggest_next_action(self, context: Dict[str, Any]):
|
|
"""GénÚre et affiche une suggestion d'action."""
|
|
# Rechercher tĂąches similaires
|
|
similar_tasks = self._find_similar_tasks(context)
|
|
|
|
if not similar_tasks:
|
|
return
|
|
|
|
# Prendre la meilleure correspondance
|
|
best_match = similar_tasks[0]
|
|
task_id = best_match["metadata"]["task_id"]
|
|
|
|
# Charger la tĂąche
|
|
task = self.learning_manager.load_task(task_id)
|
|
|
|
if not task:
|
|
return
|
|
|
|
# Obtenir la prochaine action suggérée
|
|
suggestion = self.learning_manager.suggest_action(context)
|
|
|
|
if suggestion and suggestion["confidence"] >= 0.75:
|
|
# Afficher dans la GUI
|
|
if self.gui:
|
|
self.gui.show_suggestion(suggestion)
|
|
```
|
|
|
|
### Ătape 5 : Gestion des RĂ©ponses
|
|
|
|
```python
|
|
def _handle_suggestion_response(self, response: str, suggestion: Dict):
|
|
"""GÚre la réponse de l'utilisateur à une suggestion."""
|
|
if response == "accept":
|
|
# Exécuter l'action suggérée
|
|
self._execute_suggested_action(suggestion)
|
|
|
|
# Mettre Ă jour la confiance (positif)
|
|
self.learning_manager.confirm_action({
|
|
"type": "accept",
|
|
"task_id": suggestion["task_id"]
|
|
})
|
|
|
|
elif response == "reject":
|
|
# Ne rien faire
|
|
|
|
# Mettre à jour la confiance (négatif)
|
|
self.learning_manager.confirm_action({
|
|
"type": "reject",
|
|
"task_id": suggestion["task_id"]
|
|
})
|
|
|
|
elif response == "correct":
|
|
# Ouvrir dialogue de correction
|
|
if self.gui:
|
|
self.gui.show_correction_dialog(suggestion)
|
|
```
|
|
|
|
## đš Interface Utilisateur
|
|
|
|
### Overlay de Suggestion
|
|
|
|
```
|
|
âââââââââââââââââââââââââââââââââââââââ
|
|
â đĄ Suggestion â
|
|
â â
|
|
â Action : Clic sur "Enregistrer" â
|
|
â Confiance : 89% â
|
|
â â
|
|
â [EntrĂ©e] Accepter â
|
|
â [Ăchap] Refuser â
|
|
â [Alt+C] Corriger â
|
|
âââââââââââââââââââââââââââââââââââââââ
|
|
```
|
|
|
|
### Touches Clavier
|
|
|
|
| Touche | Action |
|
|
|--------|--------|
|
|
| **Entrée** | Accepter et exécuter |
|
|
| **Ăchap** | Refuser |
|
|
| **Alt+C** | Ouvrir dialogue de correction |
|
|
|
|
## đ MĂ©triques
|
|
|
|
### Scores de Confiance
|
|
|
|
```python
|
|
confidence = (
|
|
0.6 * vision_similarity + # Similarité visuelle CLIP
|
|
0.3 * llm_score + # Score LLM
|
|
0.1 * historical_success # Taux de succĂšs historique
|
|
)
|
|
```
|
|
|
|
### Seuils
|
|
|
|
- **Afficher suggestion** : confidence >= 0.75
|
|
- **Exécution auto** : confidence >= 0.95 (Mode Autopilot)
|
|
- **Rollback** : confidence < 0.85 (retour en Mode Assisté)
|
|
|
|
## đ Transitions de Mode
|
|
|
|
```
|
|
Shadow (observation)
|
|
â (5+ observations)
|
|
Assisté (suggestions)
|
|
â (20+ obs + 95% concordance)
|
|
Autopilot (automatique)
|
|
â (confiance < 85%)
|
|
Assisté (retour)
|
|
```
|
|
|
|
## đ§Ș Tests
|
|
|
|
### Test 1 : Suggestion Simple
|
|
|
|
1. Apprendre une tĂąche (3x clic sur "Enregistrer")
|
|
2. Refaire l'action une fois
|
|
3. Vérifier qu'une suggestion apparaßt
|
|
|
|
### Test 2 : Acceptation
|
|
|
|
1. Suggestion affichée
|
|
2. Appuyer sur Entrée
|
|
3. Vérifier que l'action est exécutée
|
|
|
|
### Test 3 : Refus
|
|
|
|
1. Suggestion affichée
|
|
2. Appuyer sur Ăchap
|
|
3. Vérifier que rien n'est exécuté
|
|
|
|
## đ Prochaines Ătapes
|
|
|
|
1. â
Créer `SuggestionManager`
|
|
2. â
Modifier `Orchestrator`
|
|
3. â
Ajouter overlay dans GUI
|
|
4. â
Implémenter gestion des touches
|
|
5. â
Tester le flux complet
|
|
|
|
## đŻ RĂ©sultat Attendu
|
|
|
|
Un systĂšme qui :
|
|
- Observe tes actions
|
|
- ReconnaĂźt les patterns
|
|
- SuggĂšre l'action suivante
|
|
- Apprend de tes choix
|
|
- S'améliore avec le temps
|
|
|
|
**Le Mode AssistĂ© sera fonctionnel ! đ**
|