# TODO - AMÉLIORATIONS WORKFLOW CRITIQUES

## 🚨 PRIORITÉ 1 - INTÉGRATION IA DANS PERSONNALITÉS

### PROBLÈME ACTUEL
- Les fallback IA ont été supprimés pour éviter la dégradation de qualité
- Si une IA échoue (Claude, OpenAI, Gemini, Mistral), le workflow s'arrête brutalement
- Aucune stratégie de récupération intelligente

### SOLUTION REQUISE
**Intégrer les préférences IA directement dans les profils de personnalités Google Sheets**

#### Nouveaux champs à ajouter dans la sheet "Personnalités" :
- `LLM_Prefere` : LLM principal pour cette personnalité (ex: "claude", "openai")
- `LLM_Fallback` : LLM de secours si le principal échoue
- `Temperature` : Température spécifique à la personnalité (0.7-1.0)
- `Style_Prompt` : Instructions spécifiques pour adapter le prompt au style

#### Exemple de données :
```
Marc | Expert technique | ... | claude | openai | 0.8 | "Utilise un vocabulaire technique précis"
Sophie | Passionnée | ... | gemini | mistral | 1.0 | "Sois chaleureux et utilise des anecdotes"
```

#### Logique de fallback intelligent :
1. Utiliser `LLM_Prefere` de la personnalité
2. Si échec → utiliser `LLM_Fallback` de la personnalité  
3. Si échec → **relancer avec nouvelle personnalité** (voir ci-dessous)

---

## 🔄 PRIORITÉ 2 - RELANCE AVEC NOUVELLE PERSONNALITÉ

### PROBLÈME ACTUEL
- Si l'enhancement d'une personnalité échoue, le workflow s'arrête
- Perte complète du travail déjà effectué

### SOLUTION REQUISE
**Système de relance avec sélection d'une nouvelle personnalité**

#### Stratégie de récupération :
1. **Détection d'échec** : Capturer les erreurs IA lors de l'enhancement
2. **Sauvegarde état** : Garder le contenu généré jusqu'à l'étape qui a échoué
3. **Nouvelle sélection** : Choisir une personnalité différente avec LLM disponible
4. **Reprise partielle** : Reprendre seulement l'étape qui a échoué, pas tout le workflow

#### Implémentation suggérée :
```javascript
async function enhanceWithPersonalityRecovery(content, personality, attempt = 1) {
  try {
    return await enhance(content, personality);
  } catch (error) {
    if (attempt < 3) {
      const newPersonality = selectAlternativePersonality(personality);
      logSh(`🔄 Relance tentative ${attempt + 1} avec ${newPersonality.nom}`, 'INFO');
      return await enhanceWithPersonalityRecovery(content, newPersonality, attempt + 1);
    }
    throw new Error(`FATAL: Échec après 3 tentatives avec personnalités différentes`);
  }
}
```

---

## 📋 PRIORITÉ 3 - INTÉGRATION LITELLM POUR TRACKING COÛTS

### PROBLÈME ACTUEL
- Impossible de récupérer les crédits restants via les APIs des providers (OpenAI, Anthropic, etc.)
- OpenAI a supprimé l'endpoint `/v1/dashboard/billing/credit_grants` pour les soldes USD
- Anthropic n'a aucune API pour la balance (feature request ouverte depuis longtemps)
- Pas de visibilité centralisée sur les coûts multi-providers

### SOLUTION REQUISE
**Intégrer LiteLLM comme proxy pour tracking automatique des coûts**

#### Pourquoi LiteLLM :
- ✅ **Standard de l'industrie** : Utilisé par la majorité des projets multi-LLM
- ✅ **Support 100+ LLMs** : OpenAI, Anthropic, Google, Deepseek, Moonshot, Mistral, etc.
- ✅ **Tracking automatique** : Intercepte tous les appels et calcule les coûts
- ✅ **Dashboard unifié** : Vue centralisée par user/team/API key
- ✅ **API de métriques** : Récupération programmatique des stats

#### Implémentation suggérée :
```bash
# Installation
pip install litellm[proxy]

# Démarrage proxy
litellm --config litellm_config.yaml
```

```yaml
# litellm_config.yaml
model_list:
  - model_name: gpt-5
    litellm_params:
      model: openai/gpt-5
      api_key: ${OPENAI_API_KEY}
  - model_name: claude-sonnet-4-5
    litellm_params:
      model: anthropic/claude-sonnet-4-5-20250929
      api_key: ${ANTHROPIC_API_KEY}
  # ... autres models
```

#### Changements dans notre code :
1. **LLMManager.js** : Router tous les appels via LiteLLM proxy (localhost:8000)
2. **LLM Monitoring** : Récupérer les stats via l'API LiteLLM
3. **Dashboard** : Afficher "Dépensé ce mois" au lieu de "Crédits restants"

#### Alternatives évaluées :
- **Langfuse** : Bien mais moins de models supportés
- **Portkey** : Commercial, pas open source
- **Helicone** : Plus basique
- **Tracking maison** : Trop de maintenance, risque d'erreurs de calcul

#### Avantages supplémentaires :
- 🔄 **Load balancing** : Rotation automatique entre plusieurs clés API
- 📊 **Analytics** : Métriques détaillées par endpoint/user/model
- 🚨 **Alertes** : Notifications quand budget dépassé
- 💾 **Caching** : Cache intelligent pour réduire les coûts

---

## 📋 PRIORITÉ 4 - AUTRES AMÉLIORATIONS

### A. Monitoring des échecs IA
- **Logging détaillé** : Quel LLM échoue, quand, pourquoi
- **Métriques de fiabilité** : Taux de succès par LLM et par personnalité
- **Alertes proactives** : Notification si un LLM devient indisponible

### B. Configuration dynamique
- **Tests de connectivité** : Vérifier la disponibilité des LLM avant le workflow
- **Sélection intelligente** : Éviter les LLM connus comme indisponibles
- **Mise en cache** : Cache des réponses LLM pour éviter les redondances

### C. Rollback partiel
- **Sauvegarde étapes** : Sauvegarder le résultat de chaque étape du workflow
- **Reprise granulaire** : Reprendre à l'étape qui a échoué, pas depuis le début

---

## ⚡ IMPLÉMENTATION IMMÉDIATE

### Étape 1 : Modifier Google Sheets
1. Ajouter colonnes dans sheet "Personnalités" 
2. Remplir les données pour les 15 personnalités existantes
3. Tester la lecture des nouvelles colonnes

### Étape 2 : Adapter le code
1. **BrainConfig.js** : Lire les nouveaux champs LLM des personnalités
2. **SelectiveEnhancement.js** : Utiliser les LLM préférés par personnalité
3. **LLMManager.js** : Ajouter logique de fallback par personnalité

### Étape 3 : Tests
1. Tester avec LLM indisponible volontairement
2. Vérifier la relance avec nouvelle personnalité
3. Valider la qualité du contenu avec les fallbacks

---

## 🎯 RÉSULTAT ATTENDU

- **99% de disponibilité** : Le workflow ne s'arrête plus pour des problèmes IA temporaires
- **Qualité préservée** : Chaque personnalité utilise son LLM optimal
- **Récupération intelligente** : Échec d'une personnalité = essai avec une autre
- **Zero perte de travail** : Reprise à l'étape d'échec, pas restart complet