4.7 KiB
nyora-notes-tt — liaison Mail<->RAG<->OneDrive : hash manquant, Phase 2 extraction PJ, deux bugs Docker
Date : 07/08/2026 Tags : nyora-notes-tt, attachments, onedrive, docker, sqlite-wal
Contexte
Chantier demande par Nabil : joindre les PJ mail (attachments) aux documents OneDrive
(onedrive_documents) deja indexes. Diagnostic initial : attachments.content_hash
existait dans le schema mais n'etait jamais calcule (0/41), rendant tout JOIN avec
onedrive_documents.content_hash structurellement vide. attachments_vec n'existait
pas du tout -- decision du 31/07 actee mais jamais implementee.
Fixes appliques
download_attachments_phase1.pypatche : calcul MD5 (meme methode queonedrive_catalog.py:hash_file(), blocs de 1 Mo) juste apres le telechargement, ecrit en DB. Backfill fait sur les PJ deja telechargees (17/20 -- 3 introuvables sur disque, chemin/mnt/pj-archive/...non monte dans ce conteneur, a creuser separement).attachments_veccree en 2048d (vec0), meme modele NVIDIA NIMllama-nemotron-embed-vl-1b-v2queonedrive_vec-- generalisation NVIDIA NIM actee.- Colonnes ajoutees a
attachments:document_type,ao_reference,date_document(parite aveconedrive_documents),extraction_status(pending/processed/error, separee destatusqui reste le statut de telechargement -- le CHECK constraint existant surstatusempeche d'y ajouter une valeur sans recreer la table). - Nouveau
extract_attachments_phase2.py: appellenyora-convert-apien mode upload multipart (files={"file": ...}, pas denas_rootdedie pour les PJ mail -- inutile de monter un nouveau volume,/convertaccepte deja un fichier en flux direct). Meme contrat de reponse queonedrive_process.py(markdown, resume, document_type, ao_reference, date_document). - Nouveau
embed_attachments.py, copie fidele deembed_onedrive_docs.py.
Resultat Phase 2 (test sur les 20 PJ deja telechargees)
14 traitees avec succes, 6 en erreur (3 fichiers introuvables sur disque -- meme cause
que le backfill hash ; 1 .zip, format non gere par nyora-convert-api ; 2 autres a
verifier). 14 embeddings crees dans attachments_vec, 0 erreur.
Le vrai enseignement : content_hash vide, ao_reference fonctionne
JOIN exact sur content_hash : 0 correspondance. Pas un bug -- les PJ testees sont des
documents 2026 tout frais, l'archive OneDrive scannee ne les a pas encore. Structurel,
va se peupler avec le volume.
JOIN approximatif sur ao_reference (regex \d{1,3}/\d{4}, normalisation legere) :
4 PJ distinctes sur 14 trouvent au moins un document OneDrive du meme dossier AO.
Preuve concrete que cette cle fonctionne des maintenant, contrairement au hash exact.
Confirme l'hypothese testee le meme jour sur le permalien OWA (non exploitable comme
pointeur stable) : la fiabilite de la liaison passe par une cle de recherche
(reference AO structuree), pas par un identifiant unique stocke a l'ingestion.
Suite logique, pas encore faite : exposer ce rapprochement comme une vraie fonction de
recherche cote mcp_server.py (aujourd'hui c'est une requete Python ad hoc, pas un
endpoint), plutot que de le refaire a la main a chaque fois.
Deux pieges Docker decouverts en cours de route (transversal, pas specifique a ce projet)
docker restartne recharge JAMAIS une image fraichement buildee. Il relance le meme conteneur fige sur l'image ID qu'il avait a sa creation. Verifie : apres un rebuild +docker restart,docker inspect --format='{{.Image}}'pointait toujours sur l'ancien digest, alors quedocker images ...:latestmontrait le nouveau. Deux cycles de patch perdus avant diagnostic. Seuldocker compose up -d <service>recree reellement le conteneur sur la derniere image.- Perte silencieuse de DDL (ALTER TABLE) au redemarrage sans checkpoint WAL.
Des
ALTER TABLEexecutes viadocker exec(commit() fait) ont disparu apres undocker restartsuivant, alors que le fichier.dbest un bind mount hote persistant normalement inchange par un redemarrage de conteneur. Cause precise non confirmee (connexion WAL non checkpointee coupee au SIGTERM/SIGKILL du conteneur, plausible). Fix applicable :conn.execute("PRAGMA wal_checkpoint(TRUNCATE)")+commit()juste apres toute DDL, avant de toucher au conteneur. Reapplique et verifie stable.
A faire ensuite
- Elucider le montage manquant
/mnt/pj-archive(3 PJ introuvables sur disque). - Exposer le rapprochement
ao_referencecomme fonction de recherche MCP plutot que requete ad hoc. - Continuer le sweep (66 notes restantes au 07/08/2026 21h58, relance en cours) puis relancer Phase 2 + embedding sur le volume complet une fois le telechargement termine.