16 KiB
Veille OSS - 16 mars 2026
Veille sur des projets et librairies open source proches ou reutilisables pour ai-novel-engine.
Derniere mise a jour : 16 mars 2026 (session 3 — lots baselines/priority_models/french_models termines + veille agent complementaire).
Lecture rapide
Le besoin ANE n'est pas "adopter une plateforme agentique complete". Le besoin est:
- garder un contrat OpenAI-compatible local
- mieux piloter les runtimes et les logs
- garder une boucle d'eval/garde-fou sobre
- faire passer
outline_likeettruncated_ending
Addendum web verifie — 17 mars 2026
Synthese issue d'une verification web directe sur les repos:
promptfoo/promptfoo: MIT, ~17k stars, evals + red teaming en local et CI/CD; bon candidat pour industrialiser les campagnes de regression promptsconfident-ai/deepeval: Apache-2.0, ~14k stars, metriques G-Eval et integration pytest; bon candidat pour formaliser le gate narratif en tests automatisesnoamgat/lm-format-enforcer: MIT, ~2k stars, contraintes regex/JSON au niveau token; pertinent pour bloquer les sorties de type outline/markdownGOAT-AI-lab/GOAT-Storytelling-Agent: MIT, ~136 stars, pattern plan -> scenes avec contexteprevious_scene; utile pour la conversion structure -> resume narratif avant draft
Decision court terme:
- Prioriser un POC
deepevalsur 10 chapitres de reference - Tester
lm-format-enforcersur le cheminllama.cpppour preveniroutline_like - Garder
promptfoopour orchestration de campagnes, pas pour remplacer le pipeline ANE
Addendum web verifie - remote ops Mascarade (17 mars 2026)
Projets verifies pour l'idee tower/kxkm:
BerriAI/litellm: gateway OpenAI-compatible multi-provider, utile comme reference de routage/observabilite centraliseeAutossh/autossh: maintien automatique des tunnels SSH, bon candidat pour stabiliser8110/8111fatedier/frp: reverse proxy/NAT traversal, option si SSH direct devient fragiletmux-python/tmuxp: sessions tmux declaratives, utile pour standardiser cockpit opsTextualize/textual: framework TUI Python moderne, utile si on evolue au-dela des TUIs texte actuellesgetsops/sops: gestion secrete des credentials/env en fichiers chiffres, utile pour durcir les presets
Decision court terme:
- Prioriser
autosshpour tenir les tunnels tower/kxkm sans intervention manuelle - Garder
mascarade_remote_tui.pycomme cockpit minimal immediat - Evaluer
litellmseulement comme reference architecture, pas comme remplacement du pipeline ANE
Projets a surveiller — Runtime et cockpit
| Projet | Type | Pourquoi c'est utile a ANE | Ce qu'il faut emprunter | Lien |
|---|---|---|---|---|
llama.cpp |
runtime local | brique la plus directe pour servir les blobs GGUF qwen2.5 hors Ollama natif |
llama-server, alias de modeles, healthchecks simples |
ggml-org/llama.cpp |
Open WebUI |
cockpit local LLM | reference produit pour visualiser runtimes, modeles et interactions locales | idees d'observabilite locale, pas son stack complet | open-webui/open-webui |
Promptfoo |
evals / guardrails | proche du besoin ANE de comparer des sorties et de verrouiller des regressions | patterns d'evaluations declaratives et de matrices de tests | promptfoo/promptfoo |
Flowise |
orchestration visuelle | utile comme source d'idees pour un futur cockpit, pas comme coeur narratif | inspiration UI / debugging de flux | FlowiseAI/Flowise |
SillyTavern |
interface locale narrative | interessant pour la partie auteur/runtime local et les usages fictionnels | idees UX pour mode auteur, presets, gestion contextuelle | SillyTavern/SillyTavern |
koboldcpp |
runtime local fiction | tres proche des usages d'ecriture locale et des modeles GGUF pour narration | inspiration sur le serving local fiction-first | LostRuins/koboldcpp |
Projets a surveiller — Contraintes decodage (prevention outline_like)
| Projet | Facilite | Pourquoi c'est utile a ANE | Ce qu'il faut emprunter | Lien |
|---|---|---|---|---|
lm-format-enforcer |
Facile | filtre logit regex + JSON schema ; integration llama-cpp-python documentee ; bloque #, *, - au niveau token |
regex ^[^#*\-]{20,} appliquee au sampling — zero Markdown sans fine-tuning |
noamgat/lm-format-enforcer |
dottxt/outlines |
Moyen | logit masking via automates finis ; mode regex grammar ; outlines-core Rust pour C-bindings llama.cpp |
RegexGuide pour bannir tokens structurants dans draft/rewrite ; si outlines-core deja installe |
dottxt-ai/outlines |
microsoft/guidance |
Moyen | entrelace Python et generation ; gen() avec regex ; backend llama_cpp disponible |
forcer des paragraphes de prose continue via grammaire | microsoft/guidance |
IterGen (ICLR 2025) |
Difficile | generation liee a grammaire avec reutilisation KV-cache ; backtracking clause a clause sans regenration complete | pattern applicable a la detection prose vs liste | arxiv:2410.07295 |
Awesome-LLM-Constrained-Decoding |
Reference | liste curatee de papiers+code sur le decodage contraint (2022-2025) | carte de navigation OSS | Saibo-creator/Awesome-LLM-Constrained-Decoding |
FMBench (arxiv, fev 2025) |
Reference | benchmark sur la conformite de formatage de sortie (Markdown vs prose) ; SFT+RLFT reduit le Markdown sans contrainte dure | reference pour valider l'impact des prompts sur le format de sortie | arxiv:2602.06384 |
Projets a surveiller — Qualite narrative et evals
| Projet | Type | Pourquoi c'est utile a ANE | Ce qu'il faut emprunter | Lien |
|---|---|---|---|---|
GOAT-Storytelling-Agent |
pipeline narratif | convertit un plan structurel en resume narratif avant injection dans draft | pattern outline→summary pour eviter outline_like dans le modele |
malik-kb/GOAT-Storytelling-Agent |
story-evaluation-llm (lars76) |
evaluateur narratif | 15 criteres ; 5 categories de faiblesses dont "list-like structure" et "heading use" | remplacement potentiel du garde-fou gate heuristique ; taxonomie de faiblesses directement reutilisable |
lars76/story-evaluation-llm |
prometheus-eval (Prometheus 2) |
LLM-as-judge | modele 7B/14B open-weight ; rubrique 1-5 personnalisable ; absolu + pairwise ; fully local | rubrique "absence de listes et titres" en francais — remplace les heuristiques fragiles | prometheus-eval/prometheus-eval |
EQ-bench / longform-writing-bench |
benchmark long | evalue planification, coherence, developpement personnage, qualite prose sur roman court | criteres de coherence narrative ; juge swappable vers modele local | EQ-bench/longform-writing-bench |
EQ-bench / creative-writing-bench |
benchmark creatif | rubrique 18 questions ; agregation multi-juge ; criteres style/voix/tension | reference pour calibrer un juge local ANE | EQ-bench/creative-writing-bench |
EQ-bench / Judgemark-v2 |
meta-eval | evalue le juge LLM lui-meme ; fiabilite inter-evaluateurs vs baseline humain pour la fiction | valider un Prometheus local comme juge ANE | EQ-bench/Judgemark-v2 |
dottxt/outlines |
contraintes logits | interdit des patterns Markdown au niveau du sampling — zero Markdown structurant garanti | RegexGuide pour bannir #, *, - en debut de ligne dans draft/rewrite |
dottxt-ai/outlines |
DeepEval |
eval LLM pytest-compatible | G-Eval avec criteres personnalises, s'integre dans une suite pytest | evals de prose comme tests unitaires narratifs | confident-ai/deepeval |
distilabel (Argilla) |
pipeline eval | orchestrateur pipeline eval + PrometheusEval task integree |
orchestrer des runs Prometheus locaux sur les lots ANE | argilla-io/distilabel |
WritingBench (X-PLUG) |
benchmark ecriture | 6 domaines, 100 sous-domaines ; pipeline de juge automatise ; agnostique a la langue | grille d'evaluation etendue pour les lots ANE | X-PLUG/WritingBench |
story-bench (clchinkc) |
benchmark narratif | Story Theory Benchmark ; criteres narratifs theoriques ; leaderboard ; flag des sorties trop structurantes | grille theorie narrative adaptable aux lots ANE | clchinkc/story-bench |
lechmazur/writing |
benchmark creatif | 10 elements obligatoires a incorporer ; rubrique 18 questions ; agregation multi-juge | reference pour valider la completude narrative (elements d'intention injected vs produits) | lechmazur/writing |
Projets a surveiller — Continuite narrative et architectures pipeline
| Projet | Type | Pourquoi c'est utile a ANE | Ce qu'il faut emprunter | Lien |
|---|---|---|---|---|
SCORE (arxiv, mars 2025) |
pattern RAG narratif | tracker symbolique + episodes hierarchiques + recuperation TF-IDF/cosine injectes avant generation ; +23.6% coherence, -41.8% hallucinations | pattern direct pour un gate de continuite avant chaque lot | arxiv:2503.23512 |
KazKozDev/NovelGenerator |
pipeline roman Ollama-natif | multi-agents ; suivi de la connaissance personnage par timeline ; threads narratifs paralleles | structures de donnees d'etat personnage + scene ; compatible Ollama | KazKozDev/NovelGenerator |
datacrystals/AIStoryWriter |
ecrivain roman local | Ollama-compatible ; maintient traits personnage coherents ; code Python inspectable | coherence des traits personnage chapitre a chapitre | datacrystals/AIStoryWriter |
Awesome-Story-Generation |
reference papiers | liste curatee generation narrative LLM era (2023-2025) : planning, coherence, consistance | carte de navigation pour les prochaines iterations narratives ANE | yingpengma/Awesome-Story-Generation |
Projets a surveiller — Francais et qualite de prose
| Projet | Type | Pourquoi c'est utile a ANE | Ce qu'il faut emprunter | Lien |
|---|---|---|---|---|
CroissantLLM |
modele bilingue FR/EN | entraine sur corpus FR/EN equilibre ; meilleur candidat comme juge de prose FR local | modele juge natif francais pour Prometheus — evite un juge anglophone | HuggingFace blog |
FrenchBench (Quantmetry) |
benchmark FR NLP | evalutation multi-taches FR dont generation ; taches de generation de qualite | base de reference pour calibrer les evaluations FR dans ANE | Quantmetry/FrenchBench |
| Leaderboard Open LLM Francais | leaderboard | classe les modeles sur benchmarks FR specifiques dont generation | reference pour choisir les prochains modeles FR a tester dans ANE | HuggingFace Leaderboard FR |
| CamemBERT / CamemBERT-bio | scorer de perplexite FR | masked-LM ; perplexite comme proxy de fluidite grammaticale FR | gate de fluidite FR leger avant un juge lourd — rejette les lots avec perplexite anormale | HuggingFace camembert-base |
COLE (arxiv:2510.05046) |
benchmark NLU FR | 23 taches NLU FR ; 94 modeles evalues ; variation regionale ; zero-shot QA | reference pour classer les prochains modeles candidats french_models avant de les tester dans ANE |
arxiv:2510.05046 |
Recommandations concretes
P0 — outline_like (immediate, effort faible)
Outil recommande : lm-format-enforcer + llama-cpp-python
from lmformatenforcer import RegexParser
from lmformatenforcer.integrations.llamacpp import build_llamacpp_logits_processor
# Regex qui autorise uniquement des caracteres de prose
# Bloque #, *, -, > au niveau logit
parser = RegexParser(r"[A-Za-zÀ-ÿ ,\.;:!\?\"\'\(\)\n]{50,}")
logits_processor = build_llamacpp_logits_processor(llm, parser)
Fallback si outlines deja installe : utiliser RegexGuide avec le meme pattern.
Le papier FMBench (fev 2025) confirme que SFT+RLFT reduit le Markdown sans contraintes dures — voie de fine-tuning future quand les baselines sont stables.
P1 — Gate LLM-as-judge (effort moyen)
Deployer Prometheus 2 (7B) localement via llama-cpp-python ou ollama. Ecrire une rubrique 5 criteres en francais :
- Absence de listes, titres, et labels structurants
- Qualite narrative (scene jouee, pas decrite)
- Continuite de personnage
- Coherence de ton et de registre
- Densite prose (cible 600-800 mots de recit continu)
Utiliser la taxonomie de faiblesses lars76/story-evaluation-llm comme base de formulation. Orchestrer avec distilabel + tache PrometheusEval.
P2 — Continuite narrative (effort moyen)
Implémenter le pattern SCORE (arxiv:2503.23512) :
- Avant chaque lot, recuperer les k passages les plus pertinents des chapitres precedents via TF-IDF + cosine
- Injecter un bloc d'etat symbolique (personnages actifs, lieux, fils narratifs ouverts)
- Passer les deux dans le contexte de
draft_v1
Reference d'implementation : KazKozDev/NovelGenerator pour les structures de donnees d'etat par timeline.
P3 — Qualite prose FR (effort faible a proto)
Pas d'outil cle en main. Approche recommandee :
- Court terme : perplexite via CamemBERT comme gate leger de fluidite FR (rejette les lots >seuil)
- Moyen terme : Prometheus 2 + rubrique FR + CroissantLLM comme juge natif bilingue
- Long terme : fine-tuner un petit CroissantLLM comme scorer FR dedie, une fois assez de donnees de lots
A moyen terme (general)
- evaluer
prometheus-evaloustory-evaluation-llmcomme remplacement LLM-as-judge du gate heuristique actuel - regarder
dottxt/outlinessi les contraintes logits deviennent accessibles via llama-server (grammar-based sampling) - regarder
Open WebUIetSillyTavernsi un vrai poste auteur local devient prioritaire - tester les modeles du Leaderboard Open LLM Francais comme prochains candidats
french_models
A ne pas faire maintenant
- remplacer le pipeline ANE par une plateforme agentique generaliste
- noyer la logique auteuriale dans un builder de flows
- multiplier les dependances UI avant d'avoir stabilise les reruns runtime
Fix outline_like — recette directe
D'apres l'analyse des projets GOAT, lm-format-enforcer et des patterns few-shot :
- Output primer : terminer le prompt
draft_v1par---\n\nsuivi des premiers mots de la premiere scene (force le modele a continuer en prose, pas en titre) - Few-shot BAD/GOOD : ajouter 1 exemple court de MAUVAISE sortie (
# Scene\n- bullet) et 1 BONNE sortie (prose continue) dans chaque prompt - Word count explicite : mentionner une cible de mots (
environ 800 mots) plutot qu'un budget tokens - Structure → narrative : convertir la
structureJSON en 2-3 phrases narratives (type GOAT) avant de l'injecter dansdraft_v1 - Contrainte logit : si llama-server avec
lm-format-enforcer, appliquer regex prose en complement des prompts pour garantie hard