| name | runtime_attachment_handler |
| aliases | ["attachment_handler"] |
| label | Pièces jointes (PDF + images) |
| label_en | Attachments (PDF + images) |
| kind | core |
| group | core |
| builtin | true |
| read_only | true |
| risk_level | low |
| version | 1.0.0 |
| author | Le Goff Benoît - Camptocamp SA |
| tags | ["multimodal","pdf","image","extraction","comparison"] |
| description | Traiter les PDF et images uploadés par l'utilisateur : extraction de texte (pypdf), conversion de pages en images (pdf2image + poppler) pour PDF scannés, comparaison de documents, capture d'écran, routage multimodal selon le provider (Claude/OpenAI/Gemini/GitHub Models/Copilot) et gestion des erreurs 400 de format. Utiliser dès qu'un message contient une pièce jointe. Ne pas utiliser pour un rapport PDF Odoo généré côté serveur (odoo_inspect_report) ni pour produire un livrable consultant formaté à partir des extractions (output_report_writer). |
| description_en | Handle PDFs and images uploaded by the user: text extraction (pypdf), page-to-image conversion (pdf2image + poppler) for scanned PDFs, document comparison, screenshots, provider-aware multimodal routing (Claude/OpenAI/Gemini/GitHub Models/Copilot) and 400 format errors. Use as soon as a message contains an attachment. Do not use for an Odoo PDF report generated server-side (odoo_inspect_report) or to produce a formatted consultant deliverable from the extractions (output_report_writer). |
| requirement | Aucun (pdf2image + poppler-utils recommandés pour PDF scannés) |
| requirement_en | None (pdf2image + poppler-utils recommended for scanned PDFs) |
| modes | ["assistant","migration","creator"] |
| keywords | ["pdf","image","attachment","pièce jointe","joindre","upload","extraire","comparer","facture pdf","devis pdf","capture écran"] |
| permissions | {"filesystem":"read","network":false,"scripts":true,"odoo":"none"} |
| code_path | skills/runtime-attachment-handler/scripts/handler.py |
| references_auto_load | [{"file":"provider_capability_matrix.md","triggers":["erreur 400 pdf","pdf supporté","type has to be either","image_url","file_data","openai pdf","github models pdf","copilot pdf","multimodal claude","multimodal gemini","format pdf provider"]},{"file":"pdf_extraction_strategy.md","triggers":["pdf scanné","pdf scanne","pypdf","pdf2image","poppler","extraction pdf","pdf vide","ocr pdf","pdf image"]}] |