fix(editor+agent): multilignes conservees (cause reelle) + validation des modeles Nvidia
FlowDeck CI / test (push) Failing after 14s
FlowDeck CI / docker (push) Skipped

Editeur:
- sync() lisait el.textContent qui supprime les <br> : ajout de gt()
  (innerText) utilise par sync(), tableaux (toggle/columns) et _resultText.
- Scission sur Entree + limites haut/bas de bloc via splitCaret() (marqueur
  temporaire au curseur), plus de perte de fin de bloc multi-lignes.

Agent:
- fetch_provider_models() valide la liste nvidia : filtre des modeles
  non-chat (nom) puis probe reelle /chat/completions (6 paralleles, 6s),
  seuls les modeles 2xx restent. 429 conserve (route, donc utilisable).
- Repli sur la liste filtree si toutes les validations echouent.
- tests/test_llm_config.py : 5 cas (catalogue mock, 404 chat, autres
  providers non valides, chute de securite, offline). 276 tests passent.
This commit is contained in:
2026-09-07 13:53:43 -04:00
parent 6356cd5703
commit b15289b4bc
6 changed files with 269 additions and 10 deletions
+33
View File
@@ -1,5 +1,38 @@
# Changelog — FlowDeck
## v5.1.8 (2026-09-07) — Multi-lignes réellement conservées + modèles IA validés (Nvidia)
> Deux correctifs : le bug multi-lignes (v5.1.7 corrigeait le symptôme au
> re-rendu, mais la vraie cause était la lecture en `textContent` qui élimine
> les `<br>`) et, côté Agent, seuls les modèles réellement utilisables du
> fournisseur Nvidia sont désormais proposés dans la configuration IA.
### Éditeur — multilignes conservées (vraie cause)
- `sync()` lisait `el.textContent`, qui **supprime** les `<br>` : les sauts de
ligne étaient perdus dès la sauvegarde du bloc. Ajout de `gt()` (basé sur
`innerText`, qui rend bien les `<br>` en `\n`) utilisé par `sync()`, les
tableaux (toggle/columns) et le calcul de position du curseur.
- La scission sur Entrée (et la limite bas/haut de bloc) utilisait désormais
`splitCaret()` : un marqueur temporaire est inséré au curseur puis
`gt()`/`innerText` découpe le contenu en « avant » / « après », exactement
comme un vrai clavier. Fini le décalage `before` qui perdait la fin d'un
bloc multi-lignes.
- `_resultText` (composer IA) lit par `gt()` pour préserver les `\n`.
### Agent — validation des modèles (fournisseur bruité)
- `GET {base}/models` de Nvidia liste tout le catalogue, mais la plupart des
modèles (embeddings, rerank, génération d'images…) répondent **404** sur
`/v1/chat/completions` — l'erreur observée dans la config IA.
- `fetch_provider_models()` filtre désormais pour `nvidia` : suppression des
modèles manifestement non-chat (nom), puis « probe » réelle de chaque
candidat (`POST /chat/completions`, payload minimal, pipeline limité à 6 en
parallèle, 6 s par appel) — seuls les modèles qui répondent sont listés.
Un 429 (limite de débit) est conservé (le modèle est routé, donc utilisable).
- Filet de sécurité : si toutes les validations échouent, on garde la liste
filtrée par nom plutôt que de vider le sélecteur.
- Tests : `tests/test_llm_config.py` (5 cas) — catalogue mock, 404 chat,
retour sans validation pour les autres providers, chute de sécurité, offline.
## v5.1.7 (2026-09-07) — Retours à la ligne conservés quand on change de bloc (Entrée)
> Un bloc multi-lignes (Shift+Entrée) perdait ses retours à la ligne dès qu'on