# Prompt complet pour Cursor Pro – Programme de prétraitement PDF avec agents LLM modulables

Développe un programme Python avec interface graphique (Tkinter ou PyQt6) permettant de :

1. Charger un document PDF
2. Naviguer entre les pages
3. Sélectionner une ou plusieurs zones rectangulaires (ex : schéma, tableau, formule)
4. Associer un contexte textuel (automatique via OCR ou manuel)
5. Traduire, interpréter ou résumer le contenu sélectionné en utilisant différents agents LLM configurables
6. Exporter le résultat enrichi au format **Markdown (.md)** prêt à être utilisé dans une base Ragflow

---

## Structure du projet recommandée

```
ragflow_pretraitement/
├── main.py
├── ui/
│   ├── viewer.py              # Navigation et sélection dans le PDF
│   └── llm_config_panel.py    # Choix des agents, paramètres
├── agents/
│   ├── base.py                # Classe LLMBaseAgent
│   ├── vision.py              # VisionAgent
│   ├── translation.py         # TranslationAgent
│   ├── summary.py             # SummaryAgent
│   └── rewriter.py            # RewriterAgent
├── utils/
│   ├── ocr.py
│   ├── translate.py
│   ├── markdown_export.py
│   └── api_ollama.py
├── config/
│   └── llm_profiles.json      # Profils LLM préconfigurés
├── data/
│   └── outputs/               # .md et images générées
└── docs/
    └── prompts/
```

---

## Fonctionnalités de l’interface

- Navigation page par page dans le PDF
- Zoom/dézoom + recentrage
- Sélection d’une zone avec la souris
- Attribution d’un **type** : schéma, tableau, formule, autre
- Zone de texte modifiable pour le contexte
- Menu de sélection :
  - Modèle par tâche (vision, résumé, traduction…)
  - Langue de prompt (FR / EN)
  - Paramètres (température, top_p, top_k, num_tokens)
  - Bouton : "Appliquer agent"
- Aperçu live de la sortie
- Export Markdown (`document_final.md`)

---

## Agents LLM

### Classe `LLMBaseAgent`
Chaque agent hérite de cette base, et peut :
- S’appeler avec un prompt
- Prendre une image (pour vision)
- Gérer les paramètres dynamiquement

```python
class LLMBaseAgent:
    def __init__(self, model_name, endpoint, **config):
        ...
    def generate(self, prompt: str, images: List[bytes] = None) -> str:
        ...
```

### Rôles recommandés

| Rôle          | Classe             | Modèle par défaut   | Langue    |
| ------------- | ------------------ | ------------------- | --------- |
| Vision        | `VisionAgent`      | llama3.2-vision:90b | 🇬🇧      |
| Traduction    | `TranslationAgent` | mistral / qwen2.5   | 🇫🇷↔🇬🇧 |
| Résumé        | `SummaryAgent`     | deepseek-r1         | 🇫🇷      |
| Reformulation | `RewriterAgent`    | mistral / deepseek  | 🇫🇷      |

---

## Profils et configuration dynamique

### Fichier `config/llm_profiles.json`
Permet de charger automatiquement un ensemble d’agents, de modèles et de paramètres selon les besoins.

```json
{
  "avancé": {
    "vision": {
      "model": "llama3.2-vision:90b-instruct-q8_0",
      "language": "en",
      "temperature": 0.2,
      "top_p": 0.95
    },
    "translation": {
      "model": "mistral",
      "language": "fr",
      "temperature": 0.1
    }
  }
}
```

---

## Format Markdown exporté

```md
## Figure 3 – Classification des granulats

**Contexte** :
Ce schéma montre...

**Analyse IA (Vision)** :
The diagram shows...

**Paramètres utilisés** :
modèle=llama3.2-vision, temperature=0.2, langue=en

**Source** :
Page 12, Type: Schéma, Fichier: NF P11-300
```

---

## Étapes de test recommandées

1. Charger un PDF
2. Sélectionner une zone
3. Associer un rôle + agent
4. Lancer l’analyse (vision, résumé, etc.)
5. Vérifier la sortie
6. Exporter le fichier Markdown



---

## Modes d'analyse et niveaux de charge LLM

L'utilisateur peut choisir entre **trois niveaux d'analyse** dans l'interface :

| Niveau    | Vision            | Résumé / Reformulation | Traduction           | Usage recommandé                |
| --------- | ----------------- | ---------------------- | -------------------- | ------------------------------- |
| 🔹 Léger  | `llava:34b`       | `mistral`              | `mistral`            | Débogage, prototypes rapides    |
| ⚪ Moyen   | `llava`           | `deepseek-r1`          | `qwen2.5`, `mistral` | Usage normal                    |
| 🔸 Avancé | `llama3.2-vision` | `deepseek-r1`          | `deepseek`           | Documents critiques, production |

### Interface
- Menu déroulant "Mode d’analyse" :
  - Léger / Moyen / Avancé
- Ce mode détermine les **modèles, la langue, et les paramètres par défaut**
- L'utilisateur peut ensuite **modifier manuellement** chaque agent (surcharger les préréglages)

### Exemple de workflow
1. L'utilisateur sélectionne "Avancé"
2. Tous les agents se préconfigurent avec les modèles lourds
3. Pour la traduction uniquement, il choisit manuellement `mistral` car il veut aller plus vite
4. Le fichier `llm_custom.json` conserve ces réglages personnalisés

Ce système permet d'adapter la **charge GPU** et la **vitesse de traitement** au besoin sans perdre en contrôle.
