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.
- 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
- 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- Clés API :
- Gemini Pro (Google)
- Mistral.AI
git clone https://github.com/votre-username/DialecticIA.git
cd DialecticIApython3 -m venv venv
source venv/bin/activate # Linux/WSL
# ou
venv\Scripts\activate # Windows PowerShellpip install -r requirements.txt# 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=./logsmkdir -p data/audio data/transcripts data/results temp logsstreamlit run app.pyL'application s'ouvre automatiquement dans votre navigateur à l'adresse : http://localhost:8501
- Coller l'URL YouTube d'un débat dans le champ de saisie
- Cliquer sur "⚡ Analyser le Débat"
- Attendre le traitement (progression affichée) :
- 📥 Téléchargement vidéo
- 🎤 Transcription audio
- 🧠 Analyse rhétorique
- 🧹 Nettoyage fichiers temporaires
- Consulter le rapport généré avec :
- Métriques globales par participant
- Arguments clés
- Journal des manipulations détectées
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
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)
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
| 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=true: Suppression automatique detemp/après analyseAUTO_CLEANUP=false: Conservation des fichiers audio pour debug
- Niveau 1 (strict) :
json.loads()- RFC 8259 strict - Niveau 2 (permissif) :
json5.loads()- Trailing commas, commentaires - Niveau 3 (repair) :
json_repair.repair_json()- Correction automatique
Si toutes les stratégies échouent → Erreur ERR_JSON_PARSE_FAILED
# Installation dépendances de test
pip install pytest pytest-cov
# Lancer tests
pytest tests/
# Avec couverture
pytest --cov=. tests/- HLD.md : High-Level Design (architecture globale)
- LLD.md : Low-Level Design (spécifications détaillées)
- CDC_DialectIA.txt : Cahier des charges initial
- 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
- Fork le projet
- Créer une branche feature (
git checkout -b feature/AmazingFeature) - Commit vos changements (
git commit -m 'Add AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- 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.