8000 GitHub - yannpointud/DialecticIA: IA d'analyse de debats politiques · GitHub
[go: up one dir, main page]

Skip to content

yannpointud/DialecticIA

Repository files navigation

🗣️ DialecticIA - Analyse Factuelle de Débats Politiques

DialecticIA est un outil d'analyse politique automatisé qui transforme des vidéos YouTube de débats en rapports synthétiques factuels. Le système évalue objectivement les stratégies rhétoriques, arguments clés et tentatives de manipulation des participants, sans désigner de vainqueur.

🎯 Fonctionnalités

  • Extraction Audio : Téléchargement automatique depuis YouTube (yt-dlp)
  • Transcription + Diarisation : Conversion audio → texte avec identification des locuteurs (LLM)
  • Analyse Rhétorique : Détection de sophismes, évasions, attaques personnelles (LLM)
  • Métriques Quantitatives :
    • Temps de parole (%)
    • Indice de sophisme (0-10)
    • Taux d'évasion (%)
    • Indice d'agressivité (0-10)
    • Clarté argumentaire (0-10)
    • Densité factuelle (0-10)
  • Interface Streamlit : Rapport visuel avec jauges, arguments clés et journal des manipulations

📋 Prérequis

  • Système : WSL (Windows Subsystem for Linux) ou Linux
  • Python : 3.10+
  • ffmpeg : Requis par yt-dlp pour la conversion audio
# Installation ffmpeg (Ubuntu/Debian)
sudo apt update && sudo apt install ffmpeg -y

🚀 Installation

1. Cloner le Projet

git clone https://github.com/votre-username/DialecticIA.git
cd DialecticIA

2. Créer un Environnement Virtuel

python3 -m venv venv
source venv/bin/activate  # Linux/WSL
# ou
venv\Scripts\activate  # Windows PowerShell

3. Installer les Dépendances

pip install -r requirements.txt

4. Configuration .env

# Copier le fichier exemple
cp .env.example .env

# Éditer avec vos clés API
nano .env  # ou vim, code, etc.

Exemple de configuration :

# === LLM - TRANSCRIPTION ===
TRANSCRIPTION_PROVIDER=gemini
TRANSCRIPTION_ENDPOINT=https://generativelanguage.googleapis.com/v1/models/
TRANSCRIPTION_API_KEY=AIzaSy...  # Votre clé Gemini
TRANSCRIPTION_MODEL=gemini-1.5-pro

# === LLM - ANALYSE ===
ANALYSIS_PROVIDER=mistral
ANALYSIS_ENDPOINT=https://api.mistral.ai/v1/chat/completions
ANALYSIS_API_KEY=...  # Votre clé Mistral
ANALYSIS_MODEL=mistral-large-latest

# === APPLICATION ===
LOG_LEVEL=DEBUG
AUTO_CLEANUP=true
MAX_ARGUMENTS_CLES=5
AUDIO_FORMAT=mp3

# === CHEMINS ===
TEMP_DIR=./temp
DATA_DIR=./data
LOG_DIR=./logs

5. Créer les Répertoires

mkdir -p data/audio data/transcripts data/results temp logs

▶️ Utilisation

Lancer l'Application

streamlit run app.py

L'application s'ouvre automatiquement dans votre navigateur à l'adresse : http://localhost:8501

Analyser un Débat

  1. Coller l'URL YouTube d'un débat dans le champ de saisie
  2. Cliquer sur "⚡ Analyser le Débat"
  3. Attendre le traitement (progression affichée) :
    • 📥 Téléchargement vidéo
    • 🎤 Transcription audio
    • 🧠 Analyse rhétorique
    • 🧹 Nettoyage fichiers temporaires
  4. Consulter le rapport généré avec :
    • Métriques globales par participant
    • Arguments clés
    • Journal des manipulations détectées

🏗️ Architecture

Structure du Projet

DialecticIA/
├── app.py                    # Point d'entrée Streamlit
├── config.py                 # Chargement configuration .env
├── llm_client.py             # Abstraction LLM (Gemini/Mistral)
├── models.py                 # Modèles Pydantic (validation)
├── prompts.py                # Prompts système avec f-strings
│
├── pipeline/                 # Logique métier
│   ├── extraction.py         # yt-dlp + gestion fichiers
│   ├── transcription.py      # Appel LLM1 (texte brut)
│   ├── analysis.py           # Appel LLM2 (JSON structuré)
│   └── report.py             # Transformation JSON → UI
│
├── utils/                    # Utilitaires transverses
│   ├── json_parser.py        # Parsing multi-niveaux (json → json5 → json-repair)
│   ├── logger.py             # Configuration logging avec rotation
│   ├── validators.py         # Validation URL/inputs
│   └── exceptions.py         # Exceptions personnalisées
│
├── data/                     # Données persistantes
│   ├── audio/                # Fichiers audio téléchargés
│   ├── transcripts/          # Transcriptions textuelles
│   └── results/              # JSONs d'analyse
│
├── temp/                     # Fichiers temporaires (auto-cleanup)
├── logs/                     # Logs applicatifs (debug, info, warning, error)
├── tests/                    # Tests unitaires
├── requirements.txt          # Dépendances Python
├── .env.example              # Template configuration
└── README.md                 # Documentation

Flux de Traitement

URL YouTube
    ↓
[Extraction Audio]  yt-dlp → temp/video_id.mp3
    ↓
[Transcription]     LLM1 → data/transcripts/video_id.txt
    ↓
[Analyse]           LLM2 → JSON structuré
    ↓
[Parsing]           json → json5 → json-repair → Validation Pydantic
    ↓
[Rapport]           Streamlit UI (jauges + métriques + analyses)

🔧 Configuration Avancée

Providers LLM

Gemini Pro (Google) :

  • Endpoint : https://generativelanguage.googleapis.com/v1/models/
  • Modèles supportés : gemini-1.5-pro, gemini-1.5-flash

Mistral.AI :

  • Endpoint : https://api.mistral.ai/v1/chat/completions
  • Modèles supportés : mistral-large-latest, mistral-medium-latest

Niveaux de Logging

Niveau Fichier Contenu
DEBUG logs/debug.log Requêtes/réponses LLM complètes, détails parsing
INFO logs/info.log Étapes principales, succès d'opérations
WARNING logs/warning.log Indices hors range, JSON repair, alertes
ERROR logs/error.log Échecs critiques, exceptions

Rotation : 10 MB par fichier, 5 backups conservés

Auto-Cleanup

  • AUTO_CLEANUP=true : Suppression automatique de temp/ après analyse
  • AUTO_CLEANUP=false : Conservation des fichiers audio pour debug

Parsing JSON Multi-Niveaux

  1. Niveau 1 (strict) : json.loads() - RFC 8259 strict
  2. Niveau 2 (permissif) : json5.loads() - Trailing commas, commentaires
  3. Niveau 3 (repair) : json_repair.repair_json() - Correction automatique

Si toutes les stratégies échouent → Erreur ERR_JSON_PARSE_FAILED

🧪 Tests

# Installation dépendances de test
pip install pytest pytest-cov

# Lancer tests
pytest tests/

# Avec couverture
pytest --cov=. tests/

📖 Documentation Technique

  • HLD.md : High-Level Design (architecture globale)
  • LLD.md : Low-Level Design (spécifications détaillées)
  • CDC_DialectIA.txt : Cahier des charges initial

⚠️ Limitations Connues

  • Transcription Audio : Les LLMs ne supportent pas nativement l'upload audio. L'implémentation actuelle envoie uniquement le prompt. Pour une transcription réelle, il faut soit :
    • Utiliser une API spécialisée (Whisper, Google Speech-to-Text)
    • Encoder l'audio en base64 si le LLM supporte
  • Pas de file d'attente : Une seule analyse à la fois
  • Pas d'historique : Les analyses ne sont pas conservées en base de données
  • Pas de timeout configurable : Timeout fixé à 5 minutes par appel LLM

🤝 Contribution

  1. Fork le projet
  2. Créer une branche feature (git checkout -b feature/AmazingFeature)
  3. Commit vos changements (git commit -m 'Add AmazingFeature')
  4. Push vers la branche (git push origin feature/AmazingFeature)
  5. Ouvrir une Pull Request

📝 Licence

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

🙏 Remerciements

  • yt-dlp : Extraction vidéo/audio YouTube
  • Streamlit : Framework UI web rapide
  • Pydantic : Validation de données robuste
  • Gemini Pro & Mistral.AI : Modèles de langage IA

Développé avec ❤️ pour promouvoir l'analyse factuelle et objective des débats politiques.

About

IA d'analyse de debats politiques

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

0