b928352e36
Fix: Appel correct à ingest_document() pour Word
...
Corrections finales word_pipeline.py:
1. Signature ingest_document() corrigée:
AVANT:
- document_source_id=doc_name ❌ (paramètre inexistant)
APRÈS:
- doc_name=doc_name
- metadata=metadata
- language=metadata.get("language", "unknown")
- toc=toc_flat
- hierarchy=None # Word n'a pas de hiérarchie page
- pages=0 # Word n'a pas de pages
2. Message callback corrigé:
AVANT:
- ingestion_result.get('chunks_ingested', 0) ❌ (champ inexistant)
APRÈS:
- ingestion_result.get('count', 0) ✅ (champ réel)
Test réussi complet:
✅ 48 paragraphes extraits
✅ 2 headings détectés
✅ 37 chunks créés
✅ 37 chunks nettoyés
✅ 37 chunks validés
✅ 37 chunks ingérés dans Weaviate
✅ Coût OCR: €0.0000 (pas d'OCR pour Word!)
✅ Document indexé et recherchable
Le pipeline Word est maintenant 100% fonctionnel de bout en bout.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-30 22:49:13 +01:00
0800f74bd7
Fix: clean_chunk attend str, pas dict
...
Problème:
- Erreur: "expected string or bytes-like object, got 'dict'"
- À l'étape "Chunk Cleaning", on passait chunk (dict) au lieu de chunk["text"] (str)
Correction word_pipeline.py (ligne 434):
AVANT:
```python
cleaned = clean_chunk(chunk) # chunk est un dict!
```
APRÈS:
```python
text: str = chunk.get("text", "")
cleaned_text = clean_chunk(text, use_llm=False)
if is_chunk_valid(cleaned_text, min_chars=30, min_words=8):
chunk["text"] = cleaned_text
cleaned_chunks.append(chunk)
```
Pattern copié depuis pdf_pipeline.py:765-771 où la même logique
extrait le texte, le nettoie, puis met à jour le dict.
Test réussi:
✅ 48 paragraphes extraits
✅ 37 chunks créés
✅ Nettoyage OK
✅ Validation OK
✅ Pipeline complet fonctionnel avec Mistral API
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-30 22:39:41 +01:00
19713f22d6
Fix: Pipeline Word + UI simplifiée pour upload
...
Corrections word_pipeline.py:
- Gestion robuste des erreurs LLM (fallback vers métadonnées Word)
- Correction: s["section_type"] -> s.get("type") pour classification
- Correction: "section_type" -> "type" dans fallback (use_llm=False)
- Ajout try/except pour extract_metadata avec fallback automatique
- Métadonnées Word utilisées si LLM échoue ou retourne None
Refonte upload.html (interface simplifiée):
- UI claire avec 2 options principales (LLM + Weaviate)
- Options PDF masquées automatiquement pour Word/Markdown
- Encart vert "Fichier Word détecté" s'affiche automatiquement
- Encart orange "Fichier Markdown détecté" ajouté
- Options avancées repliables (<details>)
- Pipeline adaptatif selon le type de fichier
- Support .md ajouté (oublié dans version précédente)
Problème résolu:
❌ AVANT: Trop d'options partout, confus pour l'utilisateur
✅ APRÈS: Interface simple, 2 cases à cocher, reste pré-configuré
Usage recommandé:
1. Sélectionner fichier (.pdf, .docx, .md)
2. Les options s'adaptent automatiquement
3. Cliquer sur "🚀 Analyser le document"
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-30 22:34:28 +01:00
4de645145a
Ajout pipeline Word (.docx) pour ingestion RAG
...
Nouveaux modules (3 fichiers, ~850 lignes):
- word_processor.py: Extraction contenu Word (texte, headings, images, métadonnées)
- word_toc_extractor.py: Construction TOC hiérarchique depuis styles Heading
- word_pipeline.py: Orchestrateur complet réutilisant modules LLM existants
Fonctionnalités:
- Extraction native Word (pas d'OCR, économie ~0.003€/page)
- Support Heading 1-9 pour TOC hiérarchique
- Section paths compatibles Weaviate (1, 1.1, 1.2, etc.)
- Métadonnées depuis propriétés Word + extraction paragraphes
- Markdown compatible avec pipeline existant
- Extraction images inline
- Réutilise 100% des modules LLM (metadata, classifier, chunker, cleaner, validator)
Pipeline testé:
- Fichier exemple: "On the origin - 10 pages.docx"
- 48 paragraphes, 2 headings extraits
- 37 chunks créés
- Output: markdown + JSON chunks
Architecture:
1. Extraction Word → 2. Markdown → 3. TOC → 4-9. Modules LLM réutilisés → 10. Weaviate
Prochaine étape: Intégration Flask (route upload Word)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-30 21:58:43 +01:00