Files
nas-runbooks/hermes-tt/nyora-notes-tt-3-bugs-05-08-2026.md

119 lines
5.1 KiB
Markdown

# 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`