Skip to content

Repository files navigation

🎓 MathVideo AI

Système multi-agents IA pour la génération de vidéos éducatives de mathématiques.
Propulsé par Strands Agents + Claude + Manim.


🗂️ Structure du projet

mathvideo/
├── main.py                  # Point d'entrée
├── config.py                # Configuration
├── models.yaml
├── pyproject.toml
│
├── agents/
│   ├── orchestrator.py      # Chef d'orchestre (analyse prompt + délègue)
│   ├── pdf_agent.py         # Transcription des programmes PDF
│   ├── script_agent.py      # Génération du code Manim
│   ├── executor_agent.py    # Exécution Manim + auto-correction
│   └── latex_agent.py       # Exercices, corrections, cours LaTeX
│
├── tools/
│   ├── pdf_tool.py          # Lecture de PDFs
│   └── file_tools.py        # Gestion fichiers et dossiers
│
├── pdfs/                    # 📁 Déposez vos PDFs ici (programmes officiels, etc.)
├── knowledge/               # 📁 Base de connaissances générée automatiquement
└── output/                  # 📁 Contenu généré
    └── {niveau}/
        └── {notion}/
            ├── video.mp4
            ├── script_manim.py
            ├── cours.tex
            ├── synthese.md
            ├── exercices.tex
            └── corrections.tex

⚙️ Installation

1. Dépendances Python

pip install -r requirements.txt

Note Manim : Manim nécessite aussi des dépendances système (FFmpeg, LaTeX).
Voir : https://docs.manim.community/en/stable/installation.html

2. Clé API Anthropic

Créez un fichier .env à la racine :

ANTHROPIC_API_KEY=sk-ant-...

Ou exportez la variable d'environnement :

export ANTHROPIC_API_KEY=sk-ant-...

3. (Optionnel) PDFs de programmes

Déposez vos PDFs dans le dossier pdfs/ :

  • Programmes officiels MEN
  • Livres scolaires numérisés
  • Cours universitaires

🚀 Utilisation

Générer une vidéo

python main.py "Génère moi une vidéo illustrant le raisonnement par récurrence niveau terminal"
python main.py "Crée une vidéo sur les suites arithmétiques pour des élèves de première"
python main.py "Explique les intégrales de Riemann niveau licence 1"
python main.py "Vidéo sur la géométrie des triangles pour la 6ème"

Modifier une vidéo existante

python main.py "Ajoute plus d'exemples concrets à la vidéo sur la récurrence terminale"
python main.py "Rends la vidéo sur les suites plus colorée et ajoute une conclusion"

Générer des exercices

python main.py "Génère des exercices sur le raisonnement par récurrence niveau terminal"
python main.py "Crée des exercices progressifs sur les matrices niveau BTS"

Ingérer tous les PDFs

python -c "
import asyncio
from agents.pdf_agent import PDFAgent
asyncio.run(PDFAgent().ingest_all_pdfs())
"

🏗️ Architecture des agents

Prompt utilisateur
       │
       ▼
 ┌─────────────────┐
 │  Orchestrateur  │  ← Analyse, planifie, délègue
 └────────┬────────┘
          │
    ┌─────┼──────────────┐
    ▼     ▼              ▼
 PDF    Script         LaTeX
 Agent  Agent          Agent
    │     │              │
    ▼     ▼              │
 Base  Exécuteur  ←──────┘
 conn. Agent
          │
          ▼
     video.mp4

Agent Orchestrateur

  • Analyse le prompt (niveau, notion, type de tâche)
  • Vérifie si une vidéo existe déjà
  • Coordonne les autres agents

Agent PDF

  • Lit les PDFs de programmes scolaires
  • Extrait et structure les connaissances par niveau/notion
  • Maintient un cache Markdown pour éviter de retraiter

Agent Script

  • Génère du code Manim pédagogique complet
  • Peut modifier un script existant selon des instructions

Agent Exécuteur

  • Lance Manim en sous-processus
  • Détecte et corrige automatiquement les erreurs (jusqu'à 3 tentatives)

Agent LaTeX

  • Génère des exercices progressifs avec niveaux de difficulté
  • Produit les corrections détaillées correspondantes
  • Crée des cours et fiches de synthèse

📐 Exemple de script Manim généré

from manim import *

class MainScene(Scene):
    def construct(self):
        # Titre
        title = Text("Raisonnement par récurrence", font_size=40)
        self.play(Write(title))
        self.wait(2)
        self.play(FadeOut(title))
        
        # Définition
        definition = MathTex(r"\text{Étape 1 (Initialisation)}: P(n_0) \text{ vraie}")
        self.play(Write(definition))
        # ...

🔧 Configuration

Les modèles et paramètres sont centralisés dans models.yaml — vous n'avez jamais besoin de toucher au code Python pour changer de modèle.

Changer de modèle

Ouvrez models.yaml et modifiez la ligne model: de l'agent concerné :

```yaml agents: orchestrator: model: claude-haiku-4-5-20251001 # ← changer ici max_tokens: 1024

script: model: claude-sonnet-4-6 # ← ou ici max_tokens: 8192 ```

Un commit Git sur models.yaml suffit — vous gardez l'historique complet de vos changements de modèles.

Paramètres disponibles dans models.yaml

Section Paramètre Valeur par défaut Description
agents.*.model voir fichier Modèle par agent
agents.*.max_tokens voir fichier Limite de tokens en sortie
local_fallback.* "" Modèle Ollama si USE_LOCAL=true
manim.quality medium_quality low / medium / high Qualité de rendu vidéo
manim.preview false true / false Ouvrir la vidéo après génération
manim.timeout 300 secondes Durée max de rendu
limits.max_retries 3 entier Tentatives de correction auto
limits.session_token_budget 50000 tokens Limite par génération

Activer les modèles locaux (Ollama)

Ajoutez dans votre .env :

``` USE_LOCAL=true LOCAL_API_URL=http://localhost:11434/v1 ```

Les agents légers (orchestrateur, PDF) basculeront automatiquement sur les modèles définis dans local_fallback de models.yaml. Les agents critiques (script, executor) restent toujours sur l'API cloud.

Être alerté des nouveaux modèles

Au démarrage, le système interroge automatiquement l'API Anthropic et affiche un avertissement si un modèle plus récent est disponible :

``` ⚠️ Mises à jour disponibles : [script] Nouveau modèle disponible : claude-sonnet-4-7 (actuel : claude-sonnet-4-6) → Mettez à jour models.yaml pour l'utiliser. ```


🛣️ Roadmap

  • Interface web (Streamlit ou FastAPI)
  • Support des voix-off (TTS)
  • Export vers YouTube automatique
  • Base de données vectorielle pour la recherche sémantique
  • Mode interactif avec révision humaine avant exécution
  • Support multilingue (EN, ES, DE)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages