diff --git a/hermes-tt/nyora-notes-tt-3-bugs-05-08-2026.md b/hermes-tt/nyora-notes-tt-3-bugs-05-08-2026.md new file mode 100644 index 0000000..5b89d18 --- /dev/null +++ b/hermes-tt/nyora-notes-tt-3-bugs-05-08-2026.md @@ -0,0 +1,118 @@ +# nyora-notes-tt / nyora-convert-api -- 3 bugs decouverts en diagnostic (05/08/2026) + +**Instance auteur** : hermes-tt (diagnostic Claude, session nyora-notes-tt) +**Date** : 2026-08-05 +**Tags** : nyora-notes-tt, nyora-convert-api, fts5, sqlite, bifrost, mimo +**Statut** : valide + +--- + +## Probleme + +Trois bugs distincts decouverts lors de la reprise du chantier RAG OneDrive : + +1. `search_onedrive_archive("RLA 2024/2025")` retournait 0 resultat alors que des documents + pertinents existent -- reproductible sur toute requete contenant un `/`. +2. `nyora-convert-api` : reponses Bifrost de forme inattendue (~1-2% des appels) faisaient + crasher la conversion d'un document au lieu de beneficier des retries deja en place. +3. `PROMPT_TEXT`/`PROMPT_VISION` de `nyora-convert-api` sans accents depuis leur creation + (04/08), n'ayant jamais recu le traitement LANGUE applique aux SOUL.md Hermes le 19/07. + +--- + +## Contexte et contraintes + +`onedrive_documents`/`onedrive_fts` (SQLite FTS5) + `onedrive_vec` (sqlite-vec) pour la +recherche hybride. Les references AO tunisiennes et les dates contiennent systematiquement +des `/` (`AO 19/2026`, `JJ/MM/AAAA`). `nyora-convert-api` et `nyora-notes-tt` sont buildes +depuis leur `Dockerfile` local (`build: .`), pas d'image pre-construite -- toute modif source +exige un rebuild + recreate du container pour prendre effet. + +--- + +## Ce qui NE fonctionne PAS + +| Tentative | Erreur obtenue | Raison de l'echec | +|-----------|----------------|-------------------| +| Requete FTS5 brute avec mots separes par espace | `fts5: syntax error near "/"` | Le parseur de requete FTS5 interprete `/` comme un token invalide hors phrase citee | +| Compter sur le repli LIKE en cas d'echec FTS/vecteur | 0 resultat quand meme | Le repli utilise la chaine litterale (avec le `/`), qui ne matche pas non plus | +| `_call_bifrost` catchant seulement `HTTPStatusError`/`TimeoutException` | `KeyError('content')` non catche, document en echec direct | Une reponse 200 de forme inattendue n'est pas une erreur HTTP -- `resp.json()["choices"][0]["message"]["content"]` explose sans passer par la logique de retry | + +--- + +## Solution validee + +**Bug FTS5** (`mcp_server.py`, `search_onedrive_archive` ET `search_mail_memory` -- meme +bug present aux 2 endroits) : chaque terme de la requete est cite comme phrase FTS5 +litterale au lieu d'etre passe en bareword. + +```python +# avant +clean_q = " ".join([w for w in query.replace('"', ' ').replace("'", ' ').split() if len(w) > 1]) + +# apres +clean_q = " ".join( + '"' + w.replace('"', '""') + '"' + for w in query.replace('"', ' ').replace("'", ' ').split() + if len(w) > 1 +) +``` + +**Bug KeyError Mimo** (`converter.py`, `_call_bifrost`) : ajout des exceptions manquantes, +converties en `ConversionError` pour beneficier de la boucle de retry existante (2 tentatives) : + +```python +except (KeyError, IndexError) as e: + raise ConversionError(f"erreur interne : reponse Bifrost de forme inattendue ({type(e).__name__}: {e})") +except json.JSONDecodeError as e: + raise ConversionError(f"erreur interne : reponse Bifrost non-JSON ({e})") +``` + +**Bug accents** : `PROMPT_TEXT`/`PROMPT_VISION` reaccentues + ajout du bloc +`## LANGUE — RÈGLE ABSOLUE` (copie identique de `hermes-agent-tt:/opt/data/SOUL.md`). + +**Deploiement (les deux services sont `build: .`, pas d'image prete)** : + +```bash +cd /volume1/docker/nyora-convert-api && docker compose build && docker compose up -d +cd /volume1/docker/nyora-notes-tt && docker compose build && docker compose up -d +``` + +--- + +## Verification + +```python +import sys; sys.path.insert(0, '/app') +import mcp_server as m +r = m.search_onedrive_archive('RLA 2024/2025', limit=3) +print(r['count']) # attendu : > 0 (etait 0 avant fix) +``` + +--- + +## Pieges specifiques DSM / NAS + +- Le build `docker compose build` sur ce NAS (DS920+, charge memoire elevee observee : + ~19,4 Go utilises sur 20 Go au moment du diagnostic) peut prendre **plusieurs minutes** + (build-essential/gcc pour compiler les dependances natives) -- ne pas juger un build + "bloque" avant 5-8 min, verifier via `ps aux | grep 'compose build'` plutot que + d'interrompre. +- **Verifier aussi `search_mail_memory`** si ce runbook est applique ailleurs : meme pattern + de nettoyage de requete, meme bug latent, corrige en meme temps ici mais a chercher + systematiquement dans tout code FTS5 similaire (ex. nyora-veille). +- Ni `nyora-convert-api` ni `nyora-notes-tt` n'etaient sur Gitea avant cette session + (violation de la regle "tout repo va sur Gitea bolbol") -- bootstrap fait le 05/08/2026, + voir `bolbol/nyora-convert-api` et `bolbol/nyora-notes-tt`. **Attention** : ne jamais + pousser `*.db`/`*.db-wal`/`*.db-shm` (base live) ni `.env` (secrets) -- `.gitignore` + ajoute a `nyora-notes-tt` suite a une quasi-erreur (tentative d'upload d'un `.db` de 74 Mo + via l'API Gitea, timeout cote client avant completion, verifie a posteriori que rien + n'avait ete commit). + +--- + +## References + +- Bug FTS5 slash : SQLite FTS5 query syntax -- https://www.sqlite.org/fts5.html#full_text_query_syntax +- Session diagnostic complete : NyoraNotes, note "nyora-notes-tt : 3 bugs corriges..." (05/08/2026) +- Runbook associe : `common/bifrost-google-provider-key-rotation.md`