seo-generator-server/TODO.md
StillHammer 64fb319e65 refactor: Synchronisation complète du codebase - Application de tous les patches
Application systématique et méthodique de tous les patches historiques.

##  FICHIERS SYNCHRONISÉS (19 fichiers)

### Core & Infrastructure:
- server.js (14 patches) - Lazy loading ModeManager, SIGINT hard kill, timing logs
- ModeManager.js (4 patches) - Instrumentation complète avec timing détaillé

### Pipeline System:
- PipelineDefinition.js (6 patches) - Source unique getLLMProvidersList()
- pipeline-builder.js (8 patches) - Standardisation LLM providers
- pipeline-runner.js (6 patches) - Affichage résultats structurés + debug console
- pipeline-builder.html (2 patches) - Fallback providers synchronisés
- pipeline-runner.html (3 patches) - UI améliorée résultats

### Enhancement Layers:
- TechnicalLayer.js (1 patch) - defaultLLM: 'gpt-4o-mini'
- StyleLayer.js (1 patch) - Type safety vocabulairePref
- PatternBreakingCore.js (1 patch) - Mapping modifications
- PatternBreakingLayers.js (1 patch) - LLM standardisé

### Validators & Tests:
- QualityMetrics.js (1 patch) - callLLM('gpt-4o-mini')
- PersonalityValidator.js (1 patch) - Provider gpt-4o-mini
- AntiDetectionValidator.js - Synchronisé

### Documentation:
- TODO.md (1 patch) - Section LiteLLM pour tracking coûts
- CLAUDE.md - Documentation à jour

### Tools:
- tools/analyze-skipped-exports.js (nouveau)
- tools/apply-claude-exports.js (nouveau)
- tools/apply-claude-exports-fuzzy.js (nouveau)

## 🎯 Changements principaux:
-  Standardisation LLM providers (openai → gpt-4o-mini, claude → claude-sonnet-4-5)
-  Lazy loading optimisé (ModeManager chargé à la demande)
-  SIGINT immediate exit (pas de graceful shutdown)
-  Type safety renforcé (conversions string explicites)
-  Instrumentation timing complète
-  Debug logging amélioré (console.log résultats pipeline)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 20:36:17 +08:00

167 lines
6.4 KiB
Markdown

# 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