feat: Remove Document collection from schema

BREAKING CHANGE: Document collection removed from Weaviate schema

Architecture simplification:
- Removed Document collection (unused by Flask app)
- All metadata now in Work collection or file-based (chunks.json)
- Simplified from 4 collections to 3 (Work, Chunk_v2, Summary_v2)

Schema changes (schema.py):
- Removed create_document_collection() function
- Updated verify_schema() to expect 3 collections
- Updated display_schema() and print_summary()
- Updated documentation to reflect Chunk_v2/Summary_v2

Ingestion changes (weaviate_ingest.py):
- Removed ingest_document_metadata() function
- Removed ingest_document_collection parameter
- Updated IngestResult to use work_uuid instead of document_uuid
- Removed Document deletion from delete_document_chunks()
- Updated DeleteResult TypedDict

Type changes (types.py):
- WeaviateIngestResult: document_uuid → work_uuid

Documentation updates (.claude/CLAUDE.md):
- Updated schema diagram (4 → 3 collections)
- Removed Document references
- Updated to reflect manual GPU vectorization

Database changes:
- Deleted Document collection (13 objects)
- Deleted Chunk collection (0 objects, old schema)

Benefits:
- Simpler architecture (3 collections vs 4)
- No redundant data storage
- All metadata available via Work or file-based storage
- Reduced Weaviate memory footprint

Migration:
- See DOCUMENT_COLLECTION_ANALYSIS.md for detailed analysis
- See migrate_chunk_v2_to_none_vectorizer.py for vectorizer migration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-09 14:13:51 +01:00
parent 625c52a925
commit 53f6a92365
8 changed files with 698 additions and 238 deletions

View File

@@ -0,0 +1,156 @@
# Analyse: Collection Document - À supprimer
**Date**: 2026-01-09
**Statut**: ✅ CONFIRMATION - La collection Document n'est PAS utilisée et DOIT être supprimée
## Problème identifié
La collection `Document` est toujours définie dans le schéma et contient actuellement **13 objets**, alors que l'architecture devrait utiliser uniquement:
- `Work` - Métadonnées des œuvres
- `Chunk_v2` - Fragments vectorisés (5,372 chunks)
- `Summary_v2` - Résumés de sections (114 summaries)
## État actuel
### Collections existantes (Weaviate):
```
Work: 19 objets ✓ UTILISÉ
Document: 13 objets ✗ NON UTILISÉ (à supprimer)
Chunk_v2: 5,372 objets ✓ UTILISÉ
Summary_v2: 114 objets ✓ UTILISÉ
Chunk: 0 objets (ancienne collection, peut être supprimée)
Conversation, Message, Thought: Collections chat (séparées)
```
### Données dans Document:
```json
{
"sourceId": "Alan_Turing_and_John_von_Neumann_Their_B",
"edition": null,
"pages": 0,
"chunksCount": 11,
"work": null
}
```
**Observation**: La plupart des champs sont NULL ou 0 (pas de données utiles).
## Analyse du code
### 1. Schéma (`schema.py`)
**Lignes 159-224**: Définition complète de la collection Document
- Créée par défaut lors de l'initialisation du schéma
- Propriétés: sourceId, edition, language, pages, chunksCount, toc, hierarchy, createdAt, work (nested)
**Problème de cohérence** (lignes 747-757 dans `weaviate_ingest.py`):
```python
doc_obj: Dict[str, Any] = {
"sourceId": doc_name,
"title": title, # ❌ N'EXISTE PAS dans schema.py
"author": author, # ❌ N'EXISTE PAS dans schema.py
"toc": json.dumps(toc),
"hierarchy": json.dumps(hierarchy),
"pages": pages,
"chunksCount": chunks_count,
"language": metadata.get("language"),
"createdAt": datetime.now().isoformat(),
}
```
Le code d'ingestion essaie d'insérer des champs `title` et `author` qui n'existent pas dans le schéma! Cela devrait causer une erreur mais est silencieusement ignoré.
### 2. Ingestion (`utils/weaviate_ingest.py`)
**Fonction `ingest_document_metadata()` (lignes 695-765)**:
- Insère les métadonnées du document dans la collection Document
- Stocke: sourceId, toc, hierarchy, pages, chunksCount, language, createdAt
**Fonction `ingest_document()` (lignes 891-1107)**:
- Paramètre: `ingest_document_collection: bool = True` (ligne 909)
- Par défaut, la fonction INSÈRE dans Document collection (ligne 1010)
**Fonction `delete_document_from_weaviate()` (lignes 1213-1267)**:
- Supprime de la collection Document (ligne 1243)
### 3. Flask App (`flask_app.py`)
**Résultat**: ✅ AUCUNE référence à la collection Document
- Pas de `collections.get("Document")`
- Pas de requêtes vers Document
- Les TOC et métadonnées sont chargées depuis les fichiers `chunks.json` (ligne 3360)
## Conclusion: Document n'est PAS nécessaire
### Données actuellement dans Document:
| Champ | Disponible ailleurs? | Source alternative |
|-------|---------------------|-------------------|
| `sourceId` | ✓ | `Chunk_v2.workTitle` (dénormalisé) |
| `toc` | ✓ | `output/<doc>/<doc>_chunks.json` |
| `hierarchy` | ✓ | `output/<doc>/<doc>_chunks.json` |
| `pages` | ✓ | `output/<doc>/<doc>_chunks.json` (metadata.pages) |
| `chunksCount` | ✓ | Dérivable via `Chunk_v2.aggregate.over_all(filter=workTitle)` |
| `language` | ✓ | `Work.language` + `Chunk_v2.language` |
| `createdAt` | ✓ | Dérivable via horodatage système des fichiers output/ |
| `edition` | ✗ | Jamais renseigné (toujours NULL) |
| `work` (nested) | ✓ | Collection `Work` dédiée |
**Verdict**: Toutes les informations utiles de Document sont disponibles ailleurs. La collection est redondante.
## Impact de la suppression
### ✅ Aucun impact négatif:
- Flask app n'utilise pas Document
- TOC/hierarchy chargés depuis fichiers JSON
- Métadonnées disponibles dans Work et Chunk_v2
### ✅ Bénéfices:
- Simplifie l'architecture (3 collections au lieu de 4)
- Réduit la mémoire Weaviate (~13 objets + index)
- Simplifie le code d'ingestion (moins d'étapes)
- Évite la confusion sur "quelle collection utiliser?"
## Plan d'action recommandé
### Étape 1: Supprimer la collection Document de Weaviate
```python
import weaviate
client = weaviate.connect_to_local()
client.collections.delete("Document")
client.close()
```
### Étape 2: Supprimer de `schema.py`
- Supprimer fonction `create_document_collection()` (lignes 159-224)
- Supprimer appel dans `create_schema()` (ligne 432)
- Mettre à jour `verify_schema()` pour ne plus vérifier Document (ligne 456)
- Mettre à jour `display_schema()` pour ne plus afficher Document (ligne 483)
### Étape 3: Nettoyer `utils/weaviate_ingest.py`
- Supprimer fonction `ingest_document_metadata()` (lignes 695-765)
- Supprimer paramètre `ingest_document_collection` (ligne 909)
- Supprimer appel à `ingest_document_metadata()` (ligne 1010)
- Supprimer suppression de Document dans `delete_document_from_weaviate()` (lignes 1241-1248)
### Étape 4: Mettre à jour la documentation
- Mettre à jour `schema.py` docstring (ligne 12: supprimer Document de la hiérarchie)
- Mettre à jour `CLAUDE.md` (ligne 11: supprimer Document)
- Mettre à jour `.claude/CLAUDE.md` (supprimer références à Document)
### Étape 5: Supprimer aussi la collection `Chunk` (ancienne)
```python
# Chunk_v2 la remplace complètement
client.collections.delete("Chunk")
```
## Risques
**Aucun risque identifié** car:
- Collection non utilisée par l'application
- Données disponibles ailleurs
- Pas de dépendances externes
---
**Recommandation finale**: Procéder à la suppression immédiate de la collection Document.