mirror of
https://github.com/Ladebeze66/coffreobsidian.git
synced 2025-12-16 09:37:43 +01:00
Mise à jour rapide
This commit is contained in:
parent
b0474ba052
commit
11afea2afc
81
.obsidian/workspace.json
vendored
81
.obsidian/workspace.json
vendored
@ -8,63 +8,20 @@
|
|||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "f1f108f7404a3683",
|
"id": "f53d68a91dcd39e9",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "inbox/Pipeline de mon programme.md",
|
"file": "inbox/Guide Complet des Paramètres LLM.md",
|
||||||
"mode": "source",
|
"mode": "preview",
|
||||||
"source": false
|
"source": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "Pipeline de mon programme"
|
"title": "Guide Complet des Paramètres LLM"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "72e00615d75c2be6",
|
|
||||||
"type": "leaf",
|
|
||||||
"state": {
|
|
||||||
"type": "markdown",
|
|
||||||
"state": {
|
|
||||||
"file": "inbox/Mise en place process (llmticket) avec Llama-vision3.2-90b.md",
|
|
||||||
"mode": "source",
|
|
||||||
"source": false
|
|
||||||
},
|
|
||||||
"icon": "lucide-file",
|
|
||||||
"title": "Mise en place process (llmticket) avec Llama-vision3.2-90b"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "13482c622bd19d29",
|
|
||||||
"type": "leaf",
|
|
||||||
"state": {
|
|
||||||
"type": "markdown",
|
|
||||||
"state": {
|
|
||||||
"file": "inbox/main_llama.py.md",
|
|
||||||
"mode": "source",
|
|
||||||
"source": false
|
|
||||||
},
|
|
||||||
"icon": "lucide-file",
|
|
||||||
"title": "main_llama.py"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "1fc4cfbca2f618d7",
|
|
||||||
"type": "leaf",
|
|
||||||
"state": {
|
|
||||||
"type": "markdown",
|
|
||||||
"state": {
|
|
||||||
"file": "inbox/Modules OCR et Traduction.md",
|
|
||||||
"mode": "source",
|
|
||||||
"source": false
|
|
||||||
},
|
|
||||||
"icon": "lucide-file",
|
|
||||||
"title": "Modules OCR et Traduction"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"currentTab": 3
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "vertical"
|
"direction": "vertical"
|
||||||
@ -415,11 +372,23 @@
|
|||||||
"obsidian-excalidraw-plugin:New drawing": false
|
"obsidian-excalidraw-plugin:New drawing": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "1fc4cfbca2f618d7",
|
"active": "f53d68a91dcd39e9",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"inbox/main_llama.py.md",
|
|
||||||
"inbox/Modules OCR et Traduction.md",
|
"inbox/Modules OCR et Traduction.md",
|
||||||
|
"inbox/main_llama.py.md",
|
||||||
|
"inbox/Guide Complet des Paramètres LLM.md",
|
||||||
|
"inbox/Gestion des langues.md",
|
||||||
|
"command_list/Ollama commands.md",
|
||||||
|
"inbox/diagrammellamavision.drawio.crswap",
|
||||||
|
"command_list/Git commands.md",
|
||||||
|
"inbox/Notes brutes.md",
|
||||||
"inbox/Mise en place process (llmticket) avec Llama-vision3.2-90b.md",
|
"inbox/Mise en place process (llmticket) avec Llama-vision3.2-90b.md",
|
||||||
|
"inbox/wild.md",
|
||||||
|
"inbox/StreamDeck config.md",
|
||||||
|
"inbox/Script suivi JSON résultats.md",
|
||||||
|
"inbox/Questions pour Karim.md",
|
||||||
|
"inbox/Prompt recherches approfondis LLM (Pixtral-Large).md",
|
||||||
|
"inbox/Pipeline de mon programme.md",
|
||||||
"inbox/llama3.2-vision_ticket_support.md",
|
"inbox/llama3.2-vision_ticket_support.md",
|
||||||
"inbox/Non confirmé 758543.crdownload",
|
"inbox/Non confirmé 758543.crdownload",
|
||||||
"ollama/Plan d'apprentissage détaillé sur Ollama.md",
|
"ollama/Plan d'apprentissage détaillé sur Ollama.md",
|
||||||
@ -433,19 +402,7 @@
|
|||||||
"LLM/Test Cline.md",
|
"LLM/Test Cline.md",
|
||||||
"LLM/Résumé LLM-lab.md",
|
"LLM/Résumé LLM-lab.md",
|
||||||
"LLM/Recherches LLama Vision 3.2 90b.md",
|
"LLM/Recherches LLama Vision 3.2 90b.md",
|
||||||
"LLM/Récapiltulatif optimisation de mes agents.md",
|
|
||||||
"LLM/Plan_Ragflow_Ollama_LLM_Vision.md",
|
|
||||||
"LLM/Gestion_Multi_Ollama_Ports_avec_Serveur_Remote.md",
|
|
||||||
"LLM/Multi_Ollama_Config_Docker_Memo.md",
|
|
||||||
"command_list/Git commands.md",
|
|
||||||
"inbox/Pipeline de mon programme.md",
|
|
||||||
"inbox/Orchestrteur.md",
|
|
||||||
"inbox/diagrammellamavision.drawio.crswap",
|
|
||||||
"inbox/Script suivi JSON résultats.md",
|
|
||||||
"inbox/diagrammellamavision.drawio",
|
"inbox/diagrammellamavision.drawio",
|
||||||
"inbox/Prompt recherches approfondis LLM (Pixtral-Large).md",
|
|
||||||
"inbox/Questions pour Karim.md",
|
|
||||||
"inbox/Prompt readme.md",
|
|
||||||
"inbox/jsonmessages.png",
|
"inbox/jsonmessages.png",
|
||||||
"inbox/agentanalyseimage.png",
|
"inbox/agentanalyseimage.png",
|
||||||
"inbox/agentanalysetexte.png",
|
"inbox/agentanalysetexte.png",
|
||||||
|
|||||||
@ -4,24 +4,29 @@
|
|||||||
---
|
---
|
||||||
## 🧠 Tableau récapitulatif des commandes Git utiles
|
## 🧠 Tableau récapitulatif des commandes Git utiles
|
||||||
|
|
||||||
| Commande Git | Utilité |
|
| Commande Git | Utilité |
|
||||||
| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
|
| -------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
|
||||||
| `git status` | Affiche les fichiers modifiés |
|
| `git status` | Affiche les fichiers modifiés |
|
||||||
| `git add .` | Ajoute tous les fichiers à l’index |
|
| `git add .` | Ajoute tous les fichiers à l’index |
|
||||||
| `git commit -m "message"` | Enregistre les changements avec un message |
|
| `git commit -m "message"` | Enregistre les changements avec un message |
|
||||||
| `git push` | Envoie les changements sur GitHub |
|
| `git push` | Envoie les changements sur GitHub |
|
||||||
| `git pull` | Récupère les derniers changements |
|
| `git pull` | Récupère les derniers changements |
|
||||||
| `git branch` | Liste les branches locales |
|
| `git branch` | Liste les branches locales |
|
||||||
| `git switch <branche>` | Change de branche |
|
| `git switch <branche>` | Change de branche |
|
||||||
| `git checkout -b <branche>` | Crée et bascule sur une nouvelle branche |
|
| `git checkout -b <branche>` | Crée et bascule sur une nouvelle branche |
|
||||||
| `git log --oneline` | Historique rapide des commits |
|
| `git log --oneline` | Historique rapide des commits |
|
||||||
| `git stash` / `pop` | Sauvegarde temporaire de changements |
|
| `git stash` / `pop` | Sauvegarde temporaire de changements |
|
||||||
| git fetch origin<br>git reset --hard origin/nom_de_la_branche_distante` | Ecrase ta branche locale avec le contenu de la branche distante |
|
| git fetch origin<br>git reset --hard origin/nom_de_la_branche_distante` | Ecrase ta branche locale avec le contenu de la branche distante |
|
||||||
| git checkout -b nouvelle_branche<br>git fetch origin<br>git reset --hard origin/stable-version<br> | nouvelle_branche identique à origin/stable-version |
|
| git checkout -b nouvelle_branche<br>git fetch origin<br>git reset --hard origin/stable-version<br> | nouvelle_branche identique à origin/stable-version |
|
||||||
| git remote -v | URL du dépôt distant |
|
| git remote -v | URL du dépôt distant |
|
||||||
| git fetch origin<br>git merge origin/nom_de_la_branche | Mettre à jour une branche locale depuis un dépôt distant |
|
| git fetch origin<br>git merge origin/nom_de_la_branche | Mettre à jour une branche locale depuis un dépôt distant |
|
||||||
| git fetch origin<br>git reset --hard origin/nom_de_la_branche<br> | Mettre à jour en écrasant les modifications locales |
|
| git fetch origin<br>git reset --hard origin/nom_de_la_branche<br> | Mettre à jour en écrasant les modifications locales |
|
||||||
| git fetch --prune | Nettoie les fichiers obsolètes |
|
| git fetch --prune | Nettoie les fichiers obsolètes |
|
||||||
| git status -sb | connaître à quelle branche distante est rattâchée la locale |
|
| git status -sb | connaître à quelle branche distante est rattâchée la locale |
|
||||||
|
| git branch -d nom_del_la_branche | Supprime une branche locale |
|
||||||
|
| git branch -D origin --delete nom_de_la_branche | Supprime branche distante |
|
||||||
|
| git remote prune origin | supprime les références à des branches distantes déjà supprimées |
|
||||||
|
| git push origin --delete nom_de_la_branche | Supprimer branche distante |
|
||||||
|
| git reset --hard <commit_id><br>git clean -fd<br> | **pour tout remettre propre** comme si tu n’avais jamais touché |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
274
inbox/Gestion des langues.md
Normal file
274
inbox/Gestion des langues.md
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
Je vais analyser le flux de traduction anglais-français dans le pipeline. Examinons chaque étape clé :
|
||||||
|
|
||||||
|
Read orchestrator_llama.py
|
||||||
|
|
||||||
|
L80-279
|
||||||
|
|
||||||
|
D'après l'analyse du code, voici les points clés concernant la gestion anglais-français dans le pipeline :
|
||||||
|
|
||||||
|
1. Chargement et Traduction du Ticket :
|
||||||
|
|
||||||
|
- Le contenu original du ticket est préservé dans ticket_data["content_original"]
|
||||||
|
|
||||||
|
- Une détection automatique de la langue est effectuée
|
||||||
|
|
||||||
|
- La traduction en anglais est stockée dans ticket_data["content_en"]
|
||||||
|
|
||||||
|
- Le contenu original n'est pas perdu, il est simplement stocké séparément
|
||||||
|
|
||||||
|
1. Traitement OCR des Images :
|
||||||
|
|
||||||
|
- Le texte est extrait en français (ocr_fr)
|
||||||
|
|
||||||
|
- Une traduction en anglais est effectuée (ocr_en)
|
||||||
|
|
||||||
|
- Les résultats sont stockés dans ocr_results avec :
|
||||||
|
|
||||||
|
python
|
||||||
|
|
||||||
|
Apply to rapport_fina...
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"texte_fr": ocr_fr,
|
||||||
|
|
||||||
|
"texte_en": ocr_en,
|
||||||
|
|
||||||
|
"langue_detectee": langue
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Vérifions maintenant comment les agents utilisent ces informations :
|
||||||
|
|
||||||
|
Read agent_ticket_analyser.py
|
||||||
|
|
||||||
|
L1-200
|
||||||
|
|
||||||
|
Je vois plusieurs points à améliorer dans la gestion des langues :
|
||||||
|
|
||||||
|
1. Dans AgentTicketAnalyser :
|
||||||
|
|
||||||
|
- Le code gère déjà bien la traduction avec content_en
|
||||||
|
|
||||||
|
- Il faut s'assurer que l'analyse est faite en anglais mais que les résultats sont stockés dans les deux langues
|
||||||
|
|
||||||
|
Vérifions maintenant le générateur de rapports :
|
||||||
|
|
||||||
|
Read agent_report_generator.py
|
||||||
|
|
||||||
|
L1-200
|
||||||
|
|
||||||
|
Je vois que le générateur de rapports gère déjà bien la traduction avec :
|
||||||
|
|
||||||
|
1. Détection du modèle utilisé (LlamaVision ou autre)
|
||||||
|
|
||||||
|
2. Traduction du prompt en anglais si nécessaire
|
||||||
|
|
||||||
|
3. Traduction de la réponse en français si nécessaire
|
||||||
|
|
||||||
|
4. Stockage des deux versions (FR/EN) dans les résultats
|
||||||
|
|
||||||
|
Vérifions maintenant comment l'OCR gère les langues :
|
||||||
|
|
||||||
|
Read agent_image_analyser.py
|
||||||
|
|
||||||
|
L200-399
|
||||||
|
|
||||||
|
Je vois que l'analyseur d'images gère déjà bien les langues avec :
|
||||||
|
|
||||||
|
1. Un prompt explicitement en anglais : [ENGLISH RESPONSE REQUESTED]
|
||||||
|
|
||||||
|
2. Une gestion du texte OCR en anglais via ocr_info.get("texte_en", "")
|
||||||
|
|
||||||
|
3. Une traduction conditionnelle basée sur mode_anglais_uniquement
|
||||||
|
|
||||||
|
4. Un stockage des résultats dans les deux langues dans le dictionnaire de résultats
|
||||||
|
|
||||||
|
Vérifions maintenant l'analyseur de tickets :
|
||||||
|
|
||||||
|
Read agent_ticket_analyser.py
|
||||||
|
|
||||||
|
L1-200
|
||||||
|
|
||||||
|
Je vois que l'analyseur de tickets gère aussi bien les langues avec :
|
||||||
|
|
||||||
|
1. Un prompt système explicitement en anglais : IMPORTANT: All responses should be in English. Translation to French will be handled separately.
|
||||||
|
|
||||||
|
2. Une gestion du contenu bilingue :
|
||||||
|
|
||||||
|
- Utilisation de content_en s'il existe
|
||||||
|
|
||||||
|
- Vérification de is_english pour le contenu
|
||||||
|
|
||||||
|
- Support de la traduction via fr_to_en et en_to_fr
|
||||||
|
|
||||||
|
Vérifions maintenant comment l'OCR est géré dans le code :
|
||||||
|
|
||||||
|
Grepped codebase for "ocr"
|
||||||
|
|
||||||
|
Je vois que l'OCR est géré dans utils/ocr_utils.py. Vérifions ce fichier :
|
||||||
|
|
||||||
|
Read ocr_utils.py
|
||||||
|
|
||||||
|
L1-200
|
||||||
|
|
||||||
|
Je vois que l'OCR est implémenté avec plusieurs fonctionnalités sophistiquées :
|
||||||
|
|
||||||
|
1. Prétraitement d'image (pretraiter_image) :
|
||||||
|
|
||||||
|
- Optimisation pour le texte avec binarisation adaptative
|
||||||
|
|
||||||
|
- Débruitage intelligent (différent pour images couleur et noir/blanc)
|
||||||
|
|
||||||
|
- Amélioration du contraste et de la netteté
|
||||||
|
|
||||||
|
- Redimensionnement si nécessaire
|
||||||
|
|
||||||
|
1. Détection de langue (detecter_langue_texte) :
|
||||||
|
|
||||||
|
- Utilise langdetect pour identifier la langue du texte
|
||||||
|
|
||||||
|
- Retourne 'fr', 'en' ou 'unknown'
|
||||||
|
|
||||||
|
1. Complétion de mots (completer_mots_tronques) :
|
||||||
|
|
||||||
|
- Corrige les mots coupés ou tronqués
|
||||||
|
|
||||||
|
- Utilise un dictionnaire de termes techniques spécifiques
|
||||||
|
|
||||||
|
- Gère les coupures de ligne intelligemment
|
||||||
|
|
||||||
|
1. Extraction de texte (extraire_texte) :
|
||||||
|
|
||||||
|
- Supporte la détection automatique de langue
|
||||||
|
|
||||||
|
- Utilise pytesseract pour l'OCR
|
||||||
|
|
||||||
|
Vérifions comment l'OCR est utilisé dans l'analyseur d'images :
|
||||||
|
|
||||||
|
Grepped codebase for "extraire_texte"
|
||||||
|
|
||||||
|
Je vois que l'OCR est principalement utilisé dans orchestrator_llama.py. Vérifions son implémentation :
|
||||||
|
|
||||||
|
Read orchestrator_llama.py
|
||||||
|
|
||||||
|
L165-364
|
||||||
|
|
||||||
|
Je vois que l'OCR est bien intégré dans l'orchestrateur avec les caractéristiques suivantes :
|
||||||
|
|
||||||
|
1. L'OCR est activé par défaut (ocr_enabled dans la config)
|
||||||
|
|
||||||
|
2. Il est exécuté sur toutes les images avant le tri
|
||||||
|
|
||||||
|
3. Les résultats sont stockés dans ocr_results avec :
|
||||||
|
|
||||||
|
- Le texte en français (texte_fr)
|
||||||
|
|
||||||
|
- Le texte traduit en anglais (texte_en)
|
||||||
|
|
||||||
|
- La langue détectée (langue_detectee)
|
||||||
|
|
||||||
|
1. Les résultats OCR sont utilisés pour :
|
||||||
|
|
||||||
|
- Enrichir le contexte pour l'agent de tri d'images
|
||||||
|
|
||||||
|
- Sauvegarder les résultats dans le répertoire pipeline
|
||||||
|
|
||||||
|
- Fournir du contexte à l'agent d'analyse d'images
|
||||||
|
|
||||||
|
Le problème de rapport avec "unknown_model" pourrait être lié à la façon dont les métadonnées sont gérées dans l'agent d'analyse d'images. Vérifions l'implémentation de l'agent d'analyse d'images :
|
||||||
|
|
||||||
|
Read agent_image_analyser.py
|
||||||
|
|
||||||
|
L1-200
|
||||||
|
|
||||||
|
Je vois que l'agent d'analyse d'images utilise le modèle LLM passé en paramètre, mais il faut vérifier comment le nom du modèle est géré dans la méthode executer. Regardons cette partie :
|
||||||
|
|
||||||
|
Read agent_image_analyser.py
|
||||||
|
|
||||||
|
L232-431
|
||||||
|
|
||||||
|
Je vois le problème. Dans la méthode executer, nous utilisons getattr(self.llm, "pipeline_normalized_name", None) pour obtenir le nom du modèle normalisé, mais il faut s'assurer que cette valeur est correctement définie dans la classe LlamaVision. Vérifions son implémentation :
|
||||||
|
|
||||||
|
Read llama_vision.py
|
||||||
|
|
||||||
|
L1-200
|
||||||
|
|
||||||
|
Je vois que dans la classe LlamaVision, la méthode _normalize_model_name définit correctement self.pipeline_normalized_name. Cependant, il y a un problème dans la façon dont nous l'utilisons dans AgentImageAnalyser. Modifions la méthode executer pour garantir que nous utilisons le bon nom de modèle :
|
||||||
|
|
||||||
|
Read agent_image_analyser.py
|
||||||
|
|
||||||
|
L232-431
|
||||||
|
|
||||||
|
Je vois le problème. Dans la classe LlamaVision, l'attribut pipeline_normalized_name est défini, mais nous devons nous assurer qu'il est correctement initialisé avant d'être utilisé. Modifions la méthode executer de AgentImageAnalyser pour gérer cela de manière plus robuste :
|
||||||
|
|
||||||
|
agent_image_analyser.py
|
||||||
|
|
||||||
|
Apply to agent_image_...
|
||||||
|
|
||||||
|
// ... existing code ...
|
||||||
|
|
||||||
|
# Obtenir le nom du modèle de manière plus robuste
|
||||||
|
|
||||||
|
model_name = None
|
||||||
|
|
||||||
|
if hasattr(self.llm, "pipeline_normalized_name"):
|
||||||
|
|
||||||
|
model_name = self.llm.pipeline_normalized_name
|
||||||
|
|
||||||
|
if model_name is None and hasattr(self.llm, "modele"):
|
||||||
|
|
||||||
|
model_name = self.llm.modele
|
||||||
|
|
||||||
|
if model_name is None:
|
||||||
|
|
||||||
|
model_name = "llama3-vision-90b-instruct"
|
||||||
|
|
||||||
|
resultat = {
|
||||||
|
|
||||||
|
"timestamp": self._get_timestamp(),
|
||||||
|
|
||||||
|
"image": nom_image,
|
||||||
|
|
||||||
|
"ticket_id": ticket_id,
|
||||||
|
|
||||||
|
"analyse": {
|
||||||
|
|
||||||
|
"en": reponse_en,
|
||||||
|
|
||||||
|
"fr": reponse_fr if reponse_fr else reponse_en
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"metadata": {
|
||||||
|
|
||||||
|
"model_info": {
|
||||||
|
|
||||||
|
"name": model_name,
|
||||||
|
|
||||||
|
"type": "vision",
|
||||||
|
|
||||||
|
"parameters": self.llm.params if hasattr(self.llm, "params") else {}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"image_path": image_path,
|
||||||
|
|
||||||
|
"success": True
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ... existing code ...
|
||||||
|
|
||||||
|
Cette modification apporte plusieurs améliorations :
|
||||||
|
|
||||||
|
1. Vérification plus robuste de l'existence des attributs avec hasattr()
|
||||||
|
|
||||||
|
2. Cascade de vérifications pour obtenir le nom du modèle
|
||||||
|
|
||||||
|
3. Gestion plus sûre des paramètres du modèle avec une vérification de l'existence de params
|
||||||
|
|
||||||
|
Ces changements devraient résoudre le problème d'accès à pipeline_normalized_name et assurer que le nom du modèle est toujours correctement défini dans les métadonnées.
|
||||||
317
inbox/Guide Complet des Paramètres LLM.md
Normal file
317
inbox/Guide Complet des Paramètres LLM.md
Normal file
@ -0,0 +1,317 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# 📘 Paramètres Avancés LLM – Open WebUI & Ollama
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Ce document présente une explication claire et complète des paramètres de génération d’un modèle LLM via Open WebUI, compatible avec un usage dans **Obsidian**.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## ⚙️ Paramètres Généraux
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Streamer la réponse de la conversation**
|
||||||
|
|
||||||
|
- Active le mode de génération mot par mot, visible en temps réel.
|
||||||
|
|
||||||
|
- ✅ Recommandé pour le chat interactif.
|
||||||
|
|
||||||
|
- ❌ Peut réduire les performances sur des machines lentes.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Function Calling**
|
||||||
|
|
||||||
|
- Permet au modèle de déclencher des fonctions (si la fonction est supportée par le modèle, comme GPT-4).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Seed**
|
||||||
|
|
||||||
|
- Graine aléatoire pour rendre les générations reproductibles.
|
||||||
|
|
||||||
|
- Exemple : `seed = 42` -> toujours la même sortie pour le même prompt.
|
||||||
|
|
||||||
|
- Par défaut : valeur aléatoire.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Séquence d'arrêt (`stop`)**
|
||||||
|
|
||||||
|
- Liste de chaînes qui, si rencontrées, interrompent immédiatement la génération.
|
||||||
|
|
||||||
|
- Exemple : `["\nUser:", "###"]`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 🔥 Paramètres de Style et de Créativité
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Température (`temperature`)**
|
||||||
|
|
||||||
|
- Contrôle la créativité du modèle.
|
||||||
|
|
||||||
|
- Borne typique : `0.0` (très déterministe) à `1.5` (très créatif).
|
||||||
|
|
||||||
|
- ✅ Valeurs recommandées : `0.7` (équilibré), `1.0+` pour brainstorm.
|
||||||
|
|
||||||
|
- 🧊 `0.0` = réponse toujours identique.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Top K**
|
||||||
|
|
||||||
|
- Ne garde que les `K` tokens les plus probables à chaque étape.
|
||||||
|
|
||||||
|
- Borne : `0` (désactivé) à `100+`.
|
||||||
|
|
||||||
|
- Exemple : `Top K = 40` -> le modèle choisit parmi les 40 tokens les plus probables.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Top P (`top_p`)**
|
||||||
|
|
||||||
|
- Filtrage probabiliste : garde les tokens jusqu'à atteindre une somme de probabilité donnée.
|
||||||
|
|
||||||
|
- Borne : `0.0` à `1.0`.
|
||||||
|
|
||||||
|
- Exemple : `0.9` = conserve les tokens représentant 90% de probabilité cumulée.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **P min**
|
||||||
|
|
||||||
|
- Probabilité minimale absolue pour inclure un token dans le choix.
|
||||||
|
|
||||||
|
- Borne : `0.0` à `1.0`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 🧠 Paramètres de Contrôle de la Répétition
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Pénalité de fréquence**
|
||||||
|
|
||||||
|
- Pénalise les tokens répétés selon leur fréquence d’apparition.
|
||||||
|
|
||||||
|
- Valeurs typiques : `0.0` (pas de pénalité) à `2.0`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Pénalité de présence**
|
||||||
|
|
||||||
|
- Pénalise les tokens qui ont déjà été générés une fois.
|
||||||
|
|
||||||
|
- Utile pour éviter la redondance.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Pénalité de répétition (Ollama)**
|
||||||
|
|
||||||
|
- Directement appliquée au moteur Ollama.
|
||||||
|
|
||||||
|
- Valeurs typiques : `1.0` (neutre), `>1.0` pour plus de diversité (ex. `1.2`), `<1.0` = plus conservateur.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Répéter les N derniers**
|
||||||
|
|
||||||
|
- Longueur de la fenêtre contextuelle analysée pour la détection de répétitions.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 🧪 Algorithmes Avancés
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Effort de raisonnement**
|
||||||
|
|
||||||
|
- Ajuste la profondeur logique du modèle.
|
||||||
|
|
||||||
|
- Plus la valeur est haute, plus le modèle essaiera de construire une réponse "logique" (si supporté).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Logit Bias**
|
||||||
|
|
||||||
|
- Permet de favoriser ou de bloquer certains tokens.
|
||||||
|
|
||||||
|
- Format : dictionnaire `{token_id: bias_value}`
|
||||||
|
|
||||||
|
- Exemple : `{1234: -100}` empêche un token d'apparaître.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Mirostat**
|
||||||
|
|
||||||
|
- Algorithme pour maintenir une perplexité constante.
|
||||||
|
|
||||||
|
- `0` = désactivé, `1` = activé.
|
||||||
|
|
||||||
|
- Utilisé pour une génération plus stable.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Mirostat Eta**
|
||||||
|
|
||||||
|
- Taux d’ajustement dans l’algorithme Mirostat.
|
||||||
|
|
||||||
|
- Valeur typique : `0.1` à `1.0`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Mirostat Tau**
|
||||||
|
|
||||||
|
- Cible de perplexité à maintenir.
|
||||||
|
|
||||||
|
- Valeur typique : `2.0` à `5.0`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Tfs Z**
|
||||||
|
|
||||||
|
- Top Free Sampling : alternative à Top P avec une approche basée sur la surprise du token.
|
||||||
|
|
||||||
|
- Moins courant, expérimental.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 🧩 Contexte et Tokenisation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Tokens à conserver (`num_keep`)**
|
||||||
|
|
||||||
|
- Nombre de tokens à préserver lors du rafraîchissement du contexte.
|
||||||
|
|
||||||
|
- Utile pour les instructions système ou les préambules.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Nb max de tokens (`num_predict`)**
|
||||||
|
|
||||||
|
- Limite maximale de tokens générés en réponse.
|
||||||
|
|
||||||
|
- Typiquement : `128` à `4096` voire `32k` selon les modèles.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Longueur du contexte (Ollama)**
|
||||||
|
|
||||||
|
- Taille mémoire maximale disponible pour prompt + génération.
|
||||||
|
|
||||||
|
- Varie selon le modèle : `4096`, `8192`, `32768`, `128000`, etc.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 🧵 Exécution & Performance (spécifique à Ollama)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Batch Size (`num_batch`)**
|
||||||
|
|
||||||
|
- Nombre de tokens traités simultanément.
|
||||||
|
|
||||||
|
- Peut accélérer l’inférence mais consomme plus de RAM/VRAM.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Utiliser mmap**
|
||||||
|
|
||||||
|
- Active le chargement du modèle en mémoire mappée (plus rapide, nécessite moins de RAM).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Utiliser mlock**
|
||||||
|
|
||||||
|
- Empêche le modèle d’être swapé sur le disque (nécessite des droits root).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **Threads (`num_thread`)**
|
||||||
|
|
||||||
|
- Nombre de threads CPU utilisés pour l’inférence.
|
||||||
|
|
||||||
|
- Exemple : `8`, `16`, selon ton CPU.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **GPU (`num_gpu`)**
|
||||||
|
|
||||||
|
- Nombre de GPU à utiliser.
|
||||||
|
|
||||||
|
- `0` = désactive le GPU, `1` = un seul GPU, `auto` = automatique.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 📤 Exemple d'appel API Ollama
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```json
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"model": "llama3.2-vision:90b-instruct-q8_0",
|
||||||
|
|
||||||
|
"prompt": "Explique la gravité quantique",
|
||||||
|
|
||||||
|
"temperature": 0.7,
|
||||||
|
|
||||||
|
"top_p": 0.9,
|
||||||
|
|
||||||
|
"repeat_penalty": 1.1,
|
||||||
|
|
||||||
|
"num_predict": 512,
|
||||||
|
|
||||||
|
"stream": false
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 🔗 Liens utiles
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- [🔗 Docs OpenWebUI](https://docs.openwebui.com)
|
||||||
|
|
||||||
|
- [🔗 Ollama Modelfile Reference](https://github.com/ollama/ollama/blob/main/docs/modelfile.md)
|
||||||
3
inbox/Notes brutes.md
Normal file
3
inbox/Notes brutes.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
- Peut on simplifier la gestion des langues
|
||||||
|
- pendant le process uniquement traduire en fr pour les rapports dans mon pipeline
|
||||||
|
-
|
||||||
@ -1,69 +1,72 @@
|
|||||||
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36" version="26.2.13">
|
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36" version="26.2.13">
|
||||||
<diagram name="Page-1" id="LQTFNXrpgvSxlSF6fcml">
|
<diagram name="Page-1" id="LQTFNXrpgvSxlSF6fcml">
|
||||||
<mxGraphModel dx="1428" dy="743" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
<mxGraphModel dx="1008" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
<root>
|
<root>
|
||||||
<mxCell id="0" />
|
<mxCell id="0" />
|
||||||
<mxCell id="1" parent="0" />
|
<mxCell id="1" parent="0" />
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-1" target="WuFkDS3ftwopUGT5gUNe-2" edge="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-12" style="edgeStyle=none;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.462;entryY=0;entryDx=0;entryDy=0;fontSize=12;startSize=8;endSize=8;entryPerimeter=0;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-1" target="WuFkDS3ftwopUGT5gUNe-2">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
|
<mxCell id="mHvfnxcB_8BXhUwDknts-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fontSize=12;startSize=8;endSize=8;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-1" target="WuFkDS3ftwopUGT5gUNe-5">
|
||||||
|
<mxGeometry relative="1" as="geometry">
|
||||||
|
<mxPoint x="570" y="105" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-1" value="Demande/ticket<div>Images + JSON</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="WuFkDS3ftwopUGT5gUNe-1" value="Demande/ticket<div>Images + JSON</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="330" y="20" width="120" height="70" as="geometry" />
|
<mxGeometry x="260" y="70" width="210" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-2" target="WuFkDS3ftwopUGT5gUNe-3" edge="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-2" target="WuFkDS3ftwopUGT5gUNe-3">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-2" value="Pré_traitement OCR<div>images (script)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="WuFkDS3ftwopUGT5gUNe-2" value="Pré_traitement OCR<div>images (script)</div>" style="rounded=1;whiteSpace=wrap;html=1;direction=south;" parent="1" vertex="1">
|
||||||
<mxGeometry x="330" y="120" width="120" height="50" as="geometry" />
|
<mxGeometry x="95" y="75" width="125" height="65" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-3" target="WuFkDS3ftwopUGT5gUNe-4" edge="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-3" target="WuFkDS3ftwopUGT5gUNe-4">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-3" value="Tradaction FR -&gt; EN<div>(Script pour traduction texte image + ticket)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="WuFkDS3ftwopUGT5gUNe-3" value="Tradaction FR -&gt; EN<div>(Script pour traduction texte image)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="320" y="210" width="140" height="100" as="geometry" />
|
<mxGeometry x="10" y="170" width="157.5" height="60" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-4" target="WuFkDS3ftwopUGT5gUNe-8" edge="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-4" target="mHvfnxcB_8BXhUwDknts-1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-4" value="Agent tri images pertinentes<div>Prompt (EN)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="WuFkDS3ftwopUGT5gUNe-4" value="Agent tri images pertinentes<div>Prompt (EN)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="175" y="420" width="120" height="60" as="geometry" />
|
<mxGeometry x="28.75" y="275" width="120" height="60" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-5" target="WuFkDS3ftwopUGT5gUNe-10" edge="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-19" style="edgeStyle=none;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-5" target="WuFkDS3ftwopUGT5gUNe-8">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-5" value="<div><br></div>Agent analyse ticket<div>(texte uniquement)</div><div>Prompt (EN)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-5" target="WuFkDS3ftwopUGT5gUNe-10">
|
||||||
<mxGeometry x="460" y="410" width="120" height="70" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="WuFkDS3ftwopUGT5gUNe-5" value="<div><br></div>Agent analyse ticket en FR et EN<div>(texte uniquement)</div><div>Prompt (EN/FR)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="480" y="160" width="150" height="85" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-6" value="LLama-Vision 3.2:90b" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="WuFkDS3ftwopUGT5gUNe-6" value="LLama-Vision 3.2:90b" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="600" y="40" width="180" height="110" as="geometry" />
|
<mxGeometry x="630" y="20" width="180" height="110" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-8" value="Agent analyse image + contexte<div>(images pertinentes + résultat analyse ticket)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontSize=12;startSize=8;endSize=8;entryX=0.941;entryY=0.018;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-8" target="WuFkDS3ftwopUGT5gUNe-10">
|
||||||
<mxGeometry x="160" y="560" width="150" height="90" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-10" target="WuFkDS3ftwopUGT5gUNe-12" edge="1">
|
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-10" value="Agent rapport final<div>Prompt (EN<br><div>(Analyse transversale des résultats images + analyse ticket)</div><div>Génération tableau Q/R</div></div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="WuFkDS3ftwopUGT5gUNe-8" value="Agent analyse image + contexte<div>prompt EN<br><div>(images pertinentes+ OCR EN + résultat analyse ticket EN)</div></div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="435" y="540" width="170" height="110" as="geometry" />
|
<mxGeometry x="480" y="290" width="150" height="90" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="mHvfnxcB_8BXhUwDknts-26" style="edgeStyle=none;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-10" target="WuFkDS3ftwopUGT5gUNe-11">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="WuFkDS3ftwopUGT5gUNe-10" value="Agent rapport final<div>Prompt (EN/FR<br><div>(Analyse transversale des résultats images + analyse ticket) Pour le moment EN/FR</div><div>Génération tableau Q/R</div></div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="272" y="440" width="170" height="110" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-11" value="Génération tableau CSV<div>(script)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="WuFkDS3ftwopUGT5gUNe-11" value="Génération tableau CSV<div>(script)</div>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="460" y="810" width="120" height="60" as="geometry" />
|
<mxGeometry x="297" y="590" width="120" height="60" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-12" target="WuFkDS3ftwopUGT5gUNe-11" edge="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="mHvfnxcB_8BXhUwDknts-1" target="WuFkDS3ftwopUGT5gUNe-8">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-12" value="Traduction résultats EN -&gt;FR" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-1" value="Agent Llama-vision<div>OCR avancé/ Prompt EN</div><div>Conservation EN/FR</div>" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
<mxGeometry x="460" y="700" width="120" height="60" as="geometry" />
|
<mxGeometry x="200" y="215" width="174" height="120" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.658;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-3" target="WuFkDS3ftwopUGT5gUNe-5" edge="1">
|
<mxCell id="mHvfnxcB_8BXhUwDknts-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.54;entryY=0.008;entryDx=0;entryDy=0;entryPerimeter=0;fontSize=12;startSize=8;endSize=8;" edge="1" parent="1" source="WuFkDS3ftwopUGT5gUNe-1" target="mHvfnxcB_8BXhUwDknts-1">
|
||||||
<mxGeometry relative="1" as="geometry">
|
|
||||||
<mxPoint x="540" y="400" as="targetPoint" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.993;entryY=0.167;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-5" target="WuFkDS3ftwopUGT5gUNe-8" edge="1">
|
|
||||||
<mxGeometry relative="1" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="WuFkDS3ftwopUGT5gUNe-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.006;entryY=0.591;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="WuFkDS3ftwopUGT5gUNe-8" target="WuFkDS3ftwopUGT5gUNe-10" edge="1">
|
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@ -1,2 +1,238 @@
|
|||||||
#### Phase de test tri image
|
#### Phase de test tri image
|
||||||
python main_llama.py <ticket_id> --skip-ticket-analysis --skip-image-analysis --skip-report
|
python main_llama.py <ticket_id> --skip-ticket-analysis --skip-image-analysis --skip-report
|
||||||
|
|
||||||
|
### 🧩 1. Préparation initiale (via `main_llama.py`)
|
||||||
|
|
||||||
|
#### 🔹 Entrées :
|
||||||
|
|
||||||
|
- ID du ticket (`T11143`)
|
||||||
|
|
||||||
|
- Arguments éventuels : `--skip-*`
|
||||||
|
|
||||||
|
|
||||||
|
#### 🔹 Appels internes :
|
||||||
|
|
||||||
|
- `OrchestratorLlama.executer(ticket_id, config)`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 Pipeline complet orchestré
|
||||||
|
|
||||||
|
### ▶️ Étape 1 : **Chargement des données**
|
||||||
|
|
||||||
|
📁 Fichier : `ticket_data_loader.py`
|
||||||
|
|
||||||
|
- Charge :
|
||||||
|
|
||||||
|
- Données du ticket (`ticket.json`)
|
||||||
|
|
||||||
|
- Captures d’écran (`*.png`, `*.jpg`, `*.gif`)
|
||||||
|
|
||||||
|
- Transmet :
|
||||||
|
|
||||||
|
- `ticket` (dict)
|
||||||
|
|
||||||
|
- `images` (list[str]) ← chemins absolus
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ▶️ Étape 2 : **Dédoublonnage**
|
||||||
|
|
||||||
|
📁 Fichier : `image_dedup.py`
|
||||||
|
|
||||||
|
- Entrée : `images`
|
||||||
|
|
||||||
|
- Méthode : distance de Hamming
|
||||||
|
|
||||||
|
- Sortie : `images_uniques` (filtrées)
|
||||||
|
|
||||||
|
|
||||||
|
✅ À partir d’ici, on ne traite plus que les images utiles
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ▶️ Étape 3 : **OCR + Traduction**
|
||||||
|
|
||||||
|
📁 Fichiers : `ocr_utils.py` + `translate_utils.py`
|
||||||
|
|
||||||
|
#### Pour chaque image :
|
||||||
|
|
||||||
|
1. `ocr_utils.extraire_texte_fr(image_path)`
|
||||||
|
|
||||||
|
- → texte brut FR
|
||||||
|
|
||||||
|
2. `translate_utils.fr_to_en()`
|
||||||
|
|
||||||
|
- → traduction EN
|
||||||
|
|
||||||
|
3. `translate_utils.en_to_fr()` (optionnel)
|
||||||
|
|
||||||
|
- → re-traduction EN→FR
|
||||||
|
|
||||||
|
4. `translate_utils.sauvegarder_ocr_traduction()`
|
||||||
|
|
||||||
|
- 🔽 Sauvegarde :
|
||||||
|
|
||||||
|
- `ocr_traduction/<image>.json`
|
||||||
|
|
||||||
|
- `ocr_traduction.txt` (append)
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤖 CHAÎNE D’AGENTS
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ▶️ Étape 4 : `AgentImageSorter`
|
||||||
|
|
||||||
|
📁 Fichier : `agent_image_sorter.py`
|
||||||
|
|
||||||
|
#### Reçoit :
|
||||||
|
|
||||||
|
- 1 image à la fois
|
||||||
|
|
||||||
|
- OCR_FR + EN injecté dans prompt
|
||||||
|
|
||||||
|
|
||||||
|
#### Fonction :
|
||||||
|
|
||||||
|
- Génère un prompt en anglais
|
||||||
|
|
||||||
|
- Analyse via `llama_vision.interroger_avec_image()`
|
||||||
|
|
||||||
|
|
||||||
|
#### Rend :
|
||||||
|
|
||||||
|
- JSON avec :
|
||||||
|
|
||||||
|
- `is_relevant: bool`
|
||||||
|
|
||||||
|
- `reason`
|
||||||
|
|
||||||
|
- `raw_response`
|
||||||
|
|
||||||
|
- `ocr_fr`, `ocr_en`
|
||||||
|
|
||||||
|
- 🔽 Sauvegarde :
|
||||||
|
|
||||||
|
- `tri_image_llama_*.json`
|
||||||
|
|
||||||
|
- `tri_image_llama_*.txt`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ▶️ Étape 5 : `AgentImageAnalyser`
|
||||||
|
|
||||||
|
📁 Fichier : `agent_image_analyser.py`
|
||||||
|
|
||||||
|
#### Reçoit :
|
||||||
|
|
||||||
|
- Liste des **images pertinentes**
|
||||||
|
|
||||||
|
- (via `image_sorter`)
|
||||||
|
|
||||||
|
|
||||||
|
#### Fonction :
|
||||||
|
|
||||||
|
- Prompt visuel spécifique par image
|
||||||
|
|
||||||
|
- Analyse ce que montre l’image
|
||||||
|
|
||||||
|
- Peut enrichir le contenu visuel à inclure dans le rapport
|
||||||
|
|
||||||
|
|
||||||
|
#### Rend :
|
||||||
|
|
||||||
|
- Pour chaque image :
|
||||||
|
|
||||||
|
- Résumé structuré
|
||||||
|
|
||||||
|
- Mots-clés, erreurs détectées, éléments visuels
|
||||||
|
|
||||||
|
- 🔽 Sauvegarde :
|
||||||
|
|
||||||
|
- `analyse_image_llama_*.json`
|
||||||
|
|
||||||
|
- `analyse_image_llama_*.txt`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ▶️ Étape 6 : `AgentTicketAnalyser`
|
||||||
|
|
||||||
|
📁 Fichier : `agent_ticket_analyser.py`
|
||||||
|
|
||||||
|
#### Reçoit :
|
||||||
|
|
||||||
|
- Texte du ticket
|
||||||
|
|
||||||
|
- Analyse des images pertinentes
|
||||||
|
|
||||||
|
|
||||||
|
#### Fonction :
|
||||||
|
|
||||||
|
- Génère des Q&R contextuelles
|
||||||
|
|
||||||
|
- Résume le besoin utilisateur ou les problèmes détectés
|
||||||
|
|
||||||
|
|
||||||
|
#### Rend :
|
||||||
|
|
||||||
|
- Liste de Q/R
|
||||||
|
|
||||||
|
- Résumé en texte libre
|
||||||
|
|
||||||
|
- 🔽 Sauvegarde :
|
||||||
|
|
||||||
|
- `analyse_ticket_llama_*.json`
|
||||||
|
|
||||||
|
- `analyse_ticket_llama_*.txt`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ▶️ Étape 7 : `AgentReportGenerator`
|
||||||
|
|
||||||
|
📁 Fichier : `agent_report_generator.py`
|
||||||
|
|
||||||
|
#### Reçoit :
|
||||||
|
|
||||||
|
- Analyse du ticket
|
||||||
|
|
||||||
|
- Analyse des images
|
||||||
|
|
||||||
|
|
||||||
|
#### Fonction :
|
||||||
|
|
||||||
|
- Génère un **rapport final** structuré
|
||||||
|
|
||||||
|
- Peut créer des tableaux CSV/Q&A
|
||||||
|
|
||||||
|
|
||||||
|
#### Rend :
|
||||||
|
|
||||||
|
- `rapport_final_llama_*.json`
|
||||||
|
|
||||||
|
- `rapport_final_llama_*.txt`
|
||||||
|
|
||||||
|
- CSV généré si demandé
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🧾 Étapes transverses
|
||||||
|
|
||||||
|
Tous les agents :
|
||||||
|
|
||||||
|
- Appellent `sauvegarder_donnees()` de `pipeline_logger.py`
|
||||||
|
|
||||||
|
- Le chemin est déterminé par `ticket_id`, `timestamp`, `base_dir="reports"` → `output/ticket_TXXXX/TXXXX_YYYYMMDD_HHMMSS/TXXXX_rapports/pipeline/`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Résumé des attentes par agent
|
||||||
Loading…
x
Reference in New Issue
Block a user