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

6.4 KiB

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 :

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 :

# Installation
pip install litellm[proxy]

# Démarrage proxy
litellm --config litellm_config.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