Project

General

Profile

Actions

Feature #80

closed
CD

Corriger la génération de descriptions via IA depuis un PDF dans l'onglet Communications

Feature #80: Corriger la génération de descriptions via IA depuis un PDF dans l'onglet Communications

Added by Client Dashboard about 2 months ago. Updated about 1 month ago.

Status:
Shipped
Priority:
Normal
Assignee:
-
Start date:
06/12/2026
Due date:
% Done:

100%

Estimated time:
spec_ref:

## Bug — Génération IA de descriptions depuis un PDF (onglet Communications)

### Cause racine probable
Le `LlmPort` (server/src/domain/ports/llm.port.ts) n'expose qu'un champ `file_urls`, et l'adaptateur OpenAI (server/src/infrastructure/llm/openai.adapter.ts) transforme chaque URL en `{ type: 'image_url' }`. Un PDF passé ainsi à gpt-4o n'est pas lu comme du texte → réponse vide ou non conforme au schéma JSON, et la fonction renvoie des descriptions vides sans remonter d'erreur. Il manque une étape d'EXTRACTION du texte du PDF en amont de l'appel LLM, et la gestion d'erreur ne distingue pas échec vs succès vide.

### Approche
1. Extraire le texte du PDF (non scanné) en amont de l'appel LLM ; passer le texte dans le prompt plutôt que le PDF brut dans file_urls.
2. Corriger la fonction backend (server/src/application/functions/) : extraction → prompt (courte 2-3 phrases = résumé artiste+style ; longue 4-5 phrases = parcours, influences, éléments spécifiques si présents) → LLM JSON mode → validation → erreur EXPLICITE si texte insuffisant.
3. UI Communications : afficher les descriptions (corriger le mapping/état qui laisse les champs vides) ; message d'erreur clair en cas d'échec.

### Critères d'acceptation
- Génération courte+longue pour tout PDF texte+images non scanné ; zones non vides en cas de succès ; aucun message d'erreur quand ça réussit ; courte 2-3 ph, longue 4-5 ph avec détails si dispo ; validé avec ≥3 PDF ; message d'erreur clair si texte insuffisant ; tests backend (LlmPort fake) + lint/typecheck verts.

### Portée : un seul lot (extraction PDF → LLM → UI). Pas de découpage.

build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
deployed
preprod_url:
deployed_at:
06/23/2026
branch:
fix/80-ai-pdf-desc
pr_url:
https://github.com/Scobby-organisation/scobby/pull/3
security_key:
severity:
paused:

Description

### Problème
Dans l’onglet *Communications* de Scobby, la fonctionnalité de génération automatique de descriptions (courte et longue) à partir d’un PDF de présentation d’artiste **ne fonctionne pas**.

### Contexte
- **Comportement actuel** : Lorsqu’un utilisateur télécharge un PDF (contenant du texte et des images, non scanné), **aucune description n’est générée** :
- Les zones de texte pour les descriptions courte et longue restent vides.
- Aucun message d’erreur ne s’affiche.
- Ce problème se produit **à chaque tentative**, quel que soit le PDF utilisé.
- **Impact** : Cette fonctionnalité est **bloquante** pour le travail quotidien des utilisateurs, qui dépendent de ces descriptions pour les communications (réseaux sociaux, communiqués de presse, etc.).

### Comportement attendu
- **Description courte** (2-3 phrases) : Résumer l’artiste et son style, avec des exemples concrets (exemple : *« DJ électro minimaliste, connu pour ses sets hypnotiques et son approche épurée des basses. Son univers sonore mêle influences techno berlinoises et ambiances planantes. »*).
- **Description longue** (4-5 phrases) : Inclure le parcours, les influences, et des **éléments spécifiques si disponibles** dans le PDF (exemples : festivals, collaborations, nombre de sorties).
- Exemple : *« Artiste incontournable de la scène électro européenne, [Nom] a marqué les festivals par ses performances immersives. Formé aux platines dans les clubs underground de Berlin, il développe un style unique, entre minimalisme rythmé et textures atmosphériques. Ses sets, souvent improvisés, s’adaptent à l’énergie du public. Ses dernières productions explorent des sonorités organiques, intégrant des samples de field recordings. Une signature sonore qui lui vaut une reconnaissance internationale, des scènes comme [Festival X] aux labels indépendants comme [Label Y]. »*.

## Acceptance criteria
['- [ ] La génération de descriptions (courte et longue) fonctionne à nouveau pour **tous les PDF** contenant du texte et des images (non scannés).', '- [ ] Les zones de texte affichent bien les descriptions générées, sans rester vides.', '- [ ] Aucun message d’erreur n’apparaît lors de la génération.', '- [ ] La description courte résume l’artiste et son style en **2-3 phrases**, comme spécifié dans les exemples.', '- [ ] La description longue inclut **4-5 phrases** avec des détails sur le parcours, les influences, et des éléments spécifiques (festivals, collaborations, etc.) **si disponibles dans le PDF**.', '- [ ] Un test est effectué avec **au moins 3 PDF différents** pour valider la robustesse de la solution.', '- [ ] Un message d’erreur clair s’affiche si le PDF ne contient pas suffisamment de texte pour générer une description (exemple : *« Le PDF ne contient pas assez de texte pour générer une description. Veuillez utiliser un fichier plus détaillé. »*).']

## Classification
- bug

## Complexity
- 7/10 — Le bug nécessite une investigation approfondie du pipeline de traitement des PDF et de l’intégration avec l’IA, ainsi qu’un ajustement des prompts pour répondre aux attentes des utilisateurs.

RA Updated by Redmine Admin about 2 months ago Actions #1

  • Status changed from Submitted to Spec

Spec en cours (factory). Transition Submitted → Spec.

RA Updated by Redmine Admin about 2 months ago Actions #2

  • % Done changed from 0 to 100
  • spec_ref updated (diff)

**Spec terminée** — pas de découpage. Cause racine : pas d'extraction de texte PDF avant l'appel LLM (LlmPort envoie le PDF comme image). `spec_ref` renseigné, `done_ratio=100`. Reste à **Spec** (prêt pour le dev, bug → pas de design).

RA Updated by Redmine Admin about 2 months ago Actions #3

  • Status changed from Spec to In development
  • branch set to fix/80-ai-pdf-desc

Dev démarré (worktree isolé, branche `fix/80-ai-pdf-desc` sur `origin/dev`). Spec → In development.

RA Updated by Redmine Admin about 2 months ago Actions #4

  • Status changed from In development to QA
  • pr_url set to https://github.com/Scobby-organisation/scobby/pull/3

PR #3 mergée dans `dev` (squash), CI Jenkins verte. In development → QA. Gates : server test:unit 37/37, typecheck, lint, build verts. Génération réelle (vrais PDF + clé OpenAI) à valider en préprod.

RA Updated by Redmine Admin about 2 months ago Actions #5

  • Status changed from QA to Preprod

Déployé en préprod (https://preprod-scobby.omdev.tech). Passage QA → Preprod.

RA Updated by Redmine Admin about 1 month ago Actions #6

  • Status changed from Preprod to Ready to ship

Livré sur master (dev = preprod = master). Commit `dae0b7f1` (PR #3) — fix(communications): génération IA des descriptions depuis un PDF. Passage en **Ready to ship** — *Shipped* après confirmation du gate prod manuel (Jenkins) sur scobby.fr.

RA Updated by Redmine Admin about 1 month ago Actions #7

  • Status changed from Ready to ship to Shipped
  • deploy_status set to deployed
  • deployed_at set to 06/23/2026

Déploiement PROD confirmé live sur scobby.fr (gate manuel Jenkins approuvé le 2026-06-23). Passage en **Shipped**.

Actions

Also available in: PDF Atom