# Version 1

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


