runbook : 3 bugs nyora-notes-tt/nyora-convert-api (FTS5 slash, KeyError Mimo, accents)
This commit is contained in:
@@ -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`
|
||||
Reference in New Issue
Block a user