# ⚙️ Architecture enrichie – Prétraitement PDF + Agents LLM personnalisables pour Ragflow

## 🎯 Objectif
Structurer un programme complet de prétraitement de documents PDF techniques (type normes), intégrant :

- Affichage interactif du PDF
- Sélection visuelle de zones à analyser
- Choix dynamique des LLMs à chaque étape
- Personnalisation des paramètres de génération
- Export structuré en Markdown pour Ragflow

---

## 🧠 LLMs disponibles via Ollama (http://217.182.105.173:11434)

| Rôle             | Nom du modèle                              | Taille   | Notes                                          |
|------------------|---------------------------------------------|----------|------------------------------------------------|
| Texte rapide     | `mistral:latest`                            | 4.1 GB   | Idéal pour traduction courte ou génération FR |
| Traduction fine  | `cline_deepseek`, `qwen2.5`, `mistral`      | 64–77 GB | Meilleur raisonnement logique                 |
| Résumé avancé    | `deepseek-r1:70b-llama-distill-q8_0`        | 74 GB    | Long documents, résumés normés               |
| Vision complète  | `llama3.2-vision:90b-instruct-q8_0`         | 95 GB    | Le plus puissant pour schémas annotés        |
| Vision rapide    | `llava:34b-v1.6-fp16`                       | 69 GB    | Prototypage ou analyse légère                |
| Embedding        | `nomic-embed-text:137m-v1.5-fp16`           | 274 MB   | Pour vectorisation RAG                       |
| Reranker         | `bge-reranker-v2-m3`                        | 1.2 GB   | Classement de pertinence                     |

---

## 🧩 Profils de configuration LLM

### 🔁 Modes prédéfinis

| Mode           | Vision              | Traduction      | Résumé          |
|----------------|----------------------|------------------|------------------|
| Test rapide    | `llava`              | `mistral`         | `mistral`         |
| Standard       | `llava`              | `qwen2.5`         | `deepseek`        |
| Avancé         | `llama3.2-vision`    | `deepseek`        | `deepseek`        |

---

## 🧠 Architecture des agents LLM

### 📦 Base : `LLMBaseAgent`

```python
class LLMBaseAgent:
    def __init__(self, model_name, endpoint, **generation_config):
        self.model_name = model_name
        self.endpoint = endpoint
        self.config = generation_config

    def generate(self, prompt, images=None):
        # Requête HTTP vers Ollama API
        pass
```

### 🧱 Spécialisations :

- `VisionAgent` : Interprétation de schémas
- `TranslationAgent` : Traduction FR ↔ EN
- `SummaryAgent` : Résumé / Réécriture

---

## ⚙️ Paramètres de génération à exposer

| Paramètre        | Description                                      | Exemple par défaut |
|------------------|--------------------------------------------------|---------------------|
| `temperature`    | Contrôle de la créativité                        | 0.2 (factuel)       |
| `top_p`          | Nucleus sampling (proportion cumulée)           | 0.9                 |
| `top_k`          | Nombre de tokens candidats                      | 40                  |
| `num_predict`    | Nombre max de tokens générés                    | 512 ou 1024         |
| `repeat_penalty` | Réduction des répétitions                       | 1.1                 |
| `stop`           | Liste de tokens d'arrêt                         | `["\n\n"]`         |

---

## 🧩 UI – Interface utilisateur LLM

Dans l’interface graphique :
- 🔘 Menus déroulants pour **choisir le modèle par tâche**
- 🧪 Champs sliders ou numériques pour :
  - temperature
  - top_k
  - top_p
  - max_tokens
- 💾 Bouton « Sauvegarder profil personnalisé »
- 📂 Fichier `llm_config.json` utilisé à l’exécution

---

## ✅ Exemple de bloc `.md` généré

```md
## Figure 4 – Répartition granulométrique

**Contexte** : Ce schéma illustre la classification...

**Analyse par modèle Vision** (llama3.2-vision):
- The diagram shows a distribution curve...
- Key terms: grain size, density...

**Paramètres utilisés** : temperature=0.3, top_p=0.95, modèle=llama3.2-vision
```

---

## 📦 Fichiers suggérés

- `config/llm_profiles.json` : profils prédéfinis
- `config/llm_custom.json` : dernier profil personnalisé utilisé
- `agents/vision.py`, `agents/translation.py`, etc. : agents spécifiques
- `utils/api_ollama.py` : centralise les appels aux modèles

---

## 🧠 Conclusion

> Cette structuration permet une flexibilité complète :
- pour le développement rapide
- pour les expérimentations
- pour la production normée de chunks optimisés pour Ragflow


---

## 🧑‍💻 Rôles d’agents spécialisés avec langues et prompts adaptés

### 🎭 Objectif
Chaque agent doit :
- Avoir un rôle explicite (vision, résumé, reformulation, etc.)
- Être lié à un modèle spécifique (optimisé pour la tâche)
- Suggérer ou imposer une **langue de prompt adaptée**
- Fournir des **préréglages de génération** par défaut

---

### 🔁 Exemples d’agents spécialisés

| Rôle                  | Classe agent         | Modèle recommandé            | Langue du prompt | Température | Notes |
|-----------------------|----------------------|-------------------------------|------------------|-------------|-------|
| 🔍 Interprétation      | `VisionAgent`        | `llama3.2-vision`             | 🇬🇧 Anglais       | 0.2         | Précision, analyse d’image |
| ✍️ Résumé normatif     | `SummaryAgent`       | `deepseek-r1`                 | 🇫🇷 Français      | 0.3         | Résumé technique long |
| 🔄 Traduction          | `TranslationAgent`   | `mistral`, `qwen2.5`          | 🇫🇷↔🇬🇧 Auto       | 0.1         | Traduction fidèle |
| 🧱 Reformulation       | `RewriterAgent`      | `mistral` ou `deepseek`       | 🇫🇷 Français      | 0.3         | Clarification technique |
| 🧩 Markdown Formatter | `MarkdownAgent`      | `cline_qwen_fp16`, `mistral`  | 🇫🇷               | 0.25        | Structuration finale |

---

### ⚙️ Intégration dans le système de profils

Chaque profil (`test`, `standard`, `avancé`) peut :
- Charger automatiquement les **agents recommandés**
- Définir pour chaque rôle :
  - `modèle`
  - `langue`
  - `params` : temperature, top_p, top_k, etc.
  - prompt_template (optionnel)

---

### 🗂️ Exemple de configuration dans `llm_profiles.json`

```json
{
  "standard": {
    "translation": {
      "model": "mistral",
      "language": "fr",
      "temperature": 0.1
    },
    "vision": {
      "model": "llava",
      "language": "en",
      "temperature": 0.2,
      "top_p": 0.95
    },
    "summary": {
      "model": "deepseek-r1",
      "language": "fr",
      "temperature": 0.3
    }
  }
}
```

---

### 💬 Exemple d’utilisation (interface ou ligne de commande)

- Sélectionner un **rôle** : "interpréter un schéma"
- L’outil :
  - Affiche le modèle recommandé (`llama3.2-vision`)
  - Définit la langue du prompt : 🇬🇧
  - Pré-remplit température / top_p
  - Permet l’édition ou l’override

---

Cette stratégie permet d’adapter finement les prompts, la langue et les paramètres à chaque rôle métier dans ton flux RAG/Ragflow.
