diff --git a/README.md b/README.md index 6671b2e..b74d4d4 100644 --- a/README.md +++ b/README.md @@ -1,148 +1,163 @@ # AI Novel Engine -AI Novel Engine est un moteur de rédaction de romans assisté par IA. +Le cockpit d'ecriture pour romans assistes par IA. -Il ne génère pas de romans. -Il fournit une méthode, une architecture et des outils -pour permettre aux écrivains de tenir des projets narratifs longs -sans perte de cohérence, de mémoire ou de contrôle. +AI Novel Engine rassemble une application macOS de pilotage editorial et un moteur narratif structure pour aider un auteur a tenir un projet long sans perdre la main. Le projet n'est pas un chatbot qui "pond un roman". C'est un environnement de travail pour cadrer un livre, faire circuler le bon contexte, comparer les versions, lancer des assistants specialises, puis ne promouvoir que ce qui merite vraiment d'entrer dans le manuscrit. -## Principes clés -- l’auteur reste décisionnaire -- aucune génération sans intention -- l’IA est découpée en rôles -- la mémoire est externe -- la simplicité est une contrainte +## Ce que le produit apporte -## Statut -v2 — développement en cours (open-source) +- une application Studio pour piloter projet, scenes, personnages, arcs et dependances +- une assistance a l'ecriture a plusieurs niveaux: inline, copilote, agents, pipeline complet +- une logique local-first avec artefacts lisibles, historiques et diffables +- un garde-fou narratif avant toute promotion dans le manuscrit +- une separation claire entre assistance, generation, validation et memoire projet -## Suivi -- backlog actif: [`TODO_ACTIVE.md`](./TODO_ACTIVE.md) -- etat livre: [`TODO_IMPLEMENTE.md`](./TODO_IMPLEMENTE.md) -- contexte courant: [`docs/CONTEXTE_PROJET_2026-03-14.md`](./docs/CONTEXTE_PROJET_2026-03-14.md) -- memoire de reprise: [`docs/MEMOIRE_REPRISE_2026-03-14.md`](./docs/MEMOIRE_REPRISE_2026-03-14.md) -- ordre d'execution recommande: [`docs/EXECUTION_PLAN_2026-03-14.md`](./docs/EXECUTION_PLAN_2026-03-14.md) -- runbook local: [`docs/runbooks/LOCAL_GENERATION.md`](./docs/runbooks/LOCAL_GENERATION.md) -- comparatif modeles local: [`docs/MODEL_COMPARISON_2026-03-08.md`](./docs/MODEL_COMPARISON_2026-03-08.md) +## Une assistance a l'ecriture vraiment pilotee -## Automation des lots utiles +AI Novel Engine aide a ecrire de quatre manieres complementaires: -Le driver principal des prochains lots utiles est maintenant: +- assistance inline sur les champs editoriaux majeurs: titre, genre, logline, synopsis, note auteur, fiches personnages, objectifs de scene et brouillons +- `Copilot / Writing Tools` pour converser, resumer, relire, proposer un rewrite et comparer brouillon, reponse assistant et dernier manuscrit pipeline +- `Wizard Agents` pour choisir un agent Mascarade, preparer un brief, verifier le routage et reappliquer la sortie avec tracabilite +- pipeline ANE complet pour passer d'une intention a un chapitre relu, gate et eventuellement promu + +L'idee centrale: chaque niveau d'assistance a son role. On n'utilise pas le meme outil pour trouver un titre, debloquer une scene, challenger une incoherence ou fabriquer un chapitre entier sous contrainte. + +## Ce que l'application permet aujourd'hui + +### Piloter le roman + +- organiser des projets locaux avec bibliotheque, sauvegarde et reprise +- travailler scene par scene avec objectifs, beat, mood, cible de mots et brouillon +- suivre personnages, arcs et dependances entre scenes +- garder visibles les signaux pipeline, les blockers et les artefacts utiles + +### Ecrire avec contexte + +- injecter le contexte editorial utile dans les aides inline +- lancer un copilote avec historique local par projet +- utiliser un RAG local-first qui recoupe scene, brouillons, gate pipeline, manuscrit et sorties agent +- comparer avant application plutot que remplacer a l'aveugle + +### Orchestrer l'IA au bon niveau + +- prioriser Apple Intelligence quand elle est disponible +- basculer sur OpenAI, Mascarade ou un runtime local compatible OpenAI +- gerer les presets runtime et les modeles locaux MLX depuis l'app +- lancer des agents Mascarade et rejouer leurs sorties dans le flux d'ecriture + +### Garder le controle + +- confirmations avant les ecritures destructives +- lecture du gate, des blockers et des recommandations pipeline +- promotion vers le manuscrit seulement quand le chapitre passe les garde-fous et la validation auteur +- persistance locale des projets et artefacts lisibles sur disque + +## Le coeur du projet + +Le repo combine deux couches qui travaillent ensemble: + +- `app_AI-novel-engine/`: le Studio macOS SwiftUI, centre de pilotage de l'assistance a l'ecriture +- le repo racine Python: le moteur narratif ANE, la CLI, les prompts, l'orchestration runtime, le reporting et les runbooks + +Le workflow narratif reste volontairement explicite: + +`intention -> structure -> draft -> critique -> rewrite -> gate -> validation auteur -> memoire` + +## Pourquoi c'est different + +- l'auteur reste decisionnaire +- aucune generation sans intention +- l'IA est decoupee en roles au lieu d'etre une seule boite noire +- la memoire projet reste externe et inspectable +- l'application aide a piloter l'ecriture, pas a effacer le travail editorial + +Manifeste operationnel: +- principes: [`docs/principes.md`](./docs/principes.md) +- gouvernance: [`docs/governance.md`](./docs/governance.md) + +## Demarrage rapide + +### Lancer le moteur et verifier le repo ```bash -python3 scripts/run_next_lots.py --lot full +python3 -m unittest discover -s tests -v +python3 -m cli.main status +make healthcheck +python3 scripts/reports_ops.py summary ``` -Points clés: -- le manifeste versionné est `automation/next_lots.toml` -- `paths.ollama_runtime = "native"` garde le preflight Ollama natif avant smoke -- `paths.ollama_runtime = "openai_compatible"` saute ce preflight et envoie `ollama:*` vers `paths.ollama_openai_base_url` -- le driver réutilise les smokes existants au lieu de dupliquer le pipeline -- `tracking_sync` consolide maintenant les derniers verdicts connus par modele a partir de `automation/reports/*/run.json` -- les opérations sensibles restent semi-autos: en cas de switch Apple ou de restart runtime, le cycle prépare les commandes exactes puis s'arrête avec un état de reprise -- reprise: +### Lancer l'application macOS ```bash -python3 scripts/run_next_lots.py --resume automation/state/next_lots_state.json +cd app_AI-novel-engine +DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer swift build +DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer swift run ``` -- synchronisation seule des plans/TODOs/readmes à partir du dernier état: +Pour lancer un vrai bundle `.app`: ```bash -python3 scripts/run_next_lots.py --lot tracking_sync --report-only +cd app_AI-novel-engine +./scripts/studio_ops.sh run-app ``` -## Generation locale via Mascarade - -`ai-novel-engine` parle un provider OpenAI-compatible. Pour utiliser la -generation locale via `mascarade`, pointer simplement le moteur narratif vers le -core Python sur `:8100`. - -```bash -export ANE_PROVIDER=openai_compatible -export ANE_BASE_URL=http://127.0.0.1:8100 -export ANE_MODEL= -export ANE_MAX_TOKENS=512 -export ANE_MAX_TOKENS_STRUCTURE=256 -export ANE_MAX_TOKENS_DRAFT=512 -export ANE_MAX_TOKENS_CRITIQUE=384 -export ANE_MAX_TOKENS_REWRITE=512 -export ANE_MAX_TOKENS_GATE=320 -export ANE_MAX_TOKENS_REPAIR=384 -export ANE_MAX_TOKENS_MEMORY=256 -export ANE_REPAIR_MAX_PASSES=2 -# optionnel si tu veux forcer un fallback explicite pour la reparation -# export ANE_REPAIR_FALLBACK_MODEL=ollama:qwen2.5:7b - -# seulement si MASCARADE_API_KEY est active -export ANE_API_KEY=ton-token-mascarade - -python3 -m cli.main generate chapter --chapter 01 -``` - -Notes : -- `ANE_MODEL` est requis; le repo n'impose pas de modele par défaut -- `ANE_MODEL` selectionne le backend local par prefixe `apple-coreml:` ou `ollama:` -- `ANE_MAX_TOKENS` reste le plafond global par défaut -- les overrides `ANE_MAX_TOKENS_STRUCTURE`, `..._DRAFT`, `..._CRITIQUE`, `..._REWRITE`, `..._GATE`, `..._REPAIR`, `..._MEMORY` permettent d'ajuster chaque étape -- `ANE_REPAIR_MAX_PASSES` borne la boucle `repair` -- `ANE_REPAIR_FALLBACK_MODEL` permet de forcer le modele du second passage `repair` -- le pipeline narratif reste entierement dans `ai-novel-engine` -- `mascarade` sert uniquement de runtime local et de couche OpenAI-compatible -- au 13 mars 2026 au soir, `:8100` et `:8201` sont remontes, et `http://127.0.0.1:11434/api/tags` repond de nouveau -- le vrai blocage restant n'est plus un service eteint mais `ollama` natif 0.17.7, qui echoue encore en generation sur `qwen2.5:7b` et `qwen2.5:1.5b` avec une erreur Metal -- le rerun Apple comparable `automation/reports/apple_rerun_7oY51o` reste utile comme incident historique: il a ete bloque a `gate` sur `too_short` + `truncated_ending`, puis a casse sur l'ancien fallback `repair` vers Ollama -- le rerun comparable `automation/reports/apple_rerun_preset_20260313T223555Z` est `accepted` le 13 mars 2026 avec `323` mots et `repair_attempts=0`; la reference Apple locale est donc reconfirmee -- dernier cycle complet termine au 9 mars 2026 : - - `apple-coreml:qwen3.5-4b-onnx-q4f16` est `accepted` de bout en bout sous garde-fou - - `ollama:qwen2.5:7b` atteint `gate`, exerce `repair` en live, puis finit `quality_blocked` sur `outline_like` -- `apple-coreml:stateful-mistral7b-instruct-int4-coreml` est sorti du chemin critique; il reste archive comme piste experimentale -- les baselines `apple-coreml:qwen2.5-0.5b-instruct-onnx` et `ollama:qwen2.5:1.5b` ont ete rejouees et finissent actuellement `quality_blocked` sur `truncated_ending` -- le smoke et `status` exposent maintenant `gate_v1.json`, `quality_blockers`, `failed_stage`, `repair_attempts` et `repair_models` -- le runtime Apple local ne sert qu'un `model_id` a la fois; un fallback `repair` vers un autre modele Apple exige donc un switch de service entre runs -- par defaut, le second passage `repair` reste maintenant sur le meme provider; `ANE_REPAIR_FALLBACK_MODEL` sert seulement a forcer un switch explicite - -Smoke test local rapide : +### Lancer un smoke narratif local ```bash ./scripts/smoke_local_generation.sh \ --base-url http://127.0.0.1:8100 \ - --model "ollama:qwen2.5:1.5b" \ + --model "" \ --approve ``` -Le script cree un workspace temporaire, ecrit une intention de test, lance la vraie CLI publique, fait un warm-up automatique pour `apple-coreml`, puis affiche un resume humain des artefacts et du `meta.json`. En mode `apple-coreml`, il applique par defaut un timeout plus large (`ANE_TIMEOUT=900`) et des budgets de smoke plus courts pour eviter de faire exploser la latence locale. Pour les reruns qualitatifs de reference, fixer explicitement `--timeout 300` et des budgets `ANE_MAX_TOKENS_*` communs. Utiliser `--workspace`, `--chapter`, `--intention`, `--timeout`, `--approve` ou `--reject` si besoin. +## Surfaces principales du repo + +- `cli/`: CLI publique du moteur narratif +- `core/`: pipeline, runtime, reporting, automation et logique projet +- `scripts/`: smokes, TUIs, supervision et helpers ops +- `tests/`: suite Python unitaire +- `prompts/`: prompts versionnes +- `docs/`: runbooks, specs, snapshots, audit et index +- `app_AI-novel-engine/`: Studio macOS SwiftUI + +## Reperes utiles + +- index documentaire vivant: [`docs/dev/README.md`](./docs/dev/README.md) +- audit courant: [`docs/CODE_AUDIT_2026-04-06.md`](./docs/CODE_AUDIT_2026-04-06.md) +- backlog actif: [`TODO_ACTIVE.md`](./TODO_ACTIVE.md) +- etat livre: [`TODO_IMPLEMENTE.md`](./TODO_IMPLEMENTE.md) +- runbook generation locale: [`docs/runbooks/LOCAL_GENERATION.md`](./docs/runbooks/LOCAL_GENERATION.md) +- runbook automation: [`docs/runbooks/AUTOMATION.md`](./docs/runbooks/AUTOMATION.md) +- workflow narratif: [`docs/workflow.md`](./docs/workflow.md) +- manifeste d'exploitation: [`automation/next_lots.toml`](./automation/next_lots.toml) + +## Notes d'exploitation + +- le chemin par defaut du manifeste courant passe par `:8100` +- `:8091` est un chemin alternatif explicite pour `llama.cpp`, pas la voie normale tant que le manifeste ne pointe pas dessus +- `ANE_MODEL` reste obligatoire pour les smokes et la CLI provider-compatible +- le runtime Apple reste mono-modele; certains switches demandent encore une action manuelle +- les blocs `AUTO-SYNC` donnent le dernier etat automatise connu, pas l'etat live instantane +- les fichiers chapitre doivent rester canoniques: `chapitre_01.md`, `chapitre_02.md`, etc. + +## Automation et supervision + +```bash +python3 scripts/run_next_lots.py --lot full +python3 scripts/run_next_lots.py --resume automation/state/next_lots_state.json +python3 scripts/run_next_lots.py --lot tracking_sync --report-only +python3 scripts/next_lots_tui.py --watch --interval 2 +python3 scripts/ops_tui.py --watch --interval 3 +``` + +La supervision, les reports et la purge sont documentes dans [`docs/runbooks/AUTOMATION.md`](./docs/runbooks/AUTOMATION.md). ## Etat auto-synchronise -- dernier cycle automatise: 2026-03-14T14:03:06+00:00 -- reference locale actuelle: apple-coreml:qwen3.5-4b-onnx-q4f16 -- prochain lot utile: Reference locale reconfirmee; retablir le runtime des modeles provider_failed puis reprendre rewrite/repair sur les modeles bloques a gate. +- dernier cycle automatise: 2026-03-23T21:34:05+00:00 +- reference locale actuelle: mistral:mistral-large-latest +- prochain lot utile: Reference locale reconfirmee; retablir le runtime des modeles provider_failed avant de poursuivre. - lancer un cycle: `python3 scripts/run_next_lots.py --lot full` +- checkpoint manuel en attente: Le runtime Apple sert `aucun modèle` au lieu de `qwen3-4b-instruct-2507-q4f16`. - -## Audit & Execution Plan (2026-03-10) - -### Snapshot -- Priority: `P2` -- Tech profile: `other` -- Workflows: `yes` -- Tests: `yes` -- Debt markers: `23` -- Source files: `18` - -### Corrections Prioritaires -- [ ] Optimisation ciblée perf/maintenabilité -- [ ] Ajouter/fiabiliser les commandes de vérification automatiques. -- [ ] Clore les points bloquants avant optimisation avancée. - -### Optimisation -- [ ] Identifier le hotspot principal et mesurer avant/après. -- [ ] Réduire la complexité des modules les plus touchés. - -### Mémoire chantier -- Control plane: `/Users/electron/.codex/memories/electron_rare_chantier` -- Repo card: `/Users/electron/.codex/memories/electron_rare_chantier/REPOS/ai-novel-engine.md` - - diff --git a/docs/CODE_AUDIT_2026-04-06.md b/docs/CODE_AUDIT_2026-04-06.md new file mode 100644 index 0000000..a598e2f --- /dev/null +++ b/docs/CODE_AUDIT_2026-04-06.md @@ -0,0 +1,78 @@ +# Audit du depot - 6 avril 2026 + +Audit rapide du depot principal `ai-novel-engine`, centre sur le moteur Python, les scripts d'exploitation et la documentation active. + +## Verification effectuee + +- `python3 -m unittest discover -s tests -v` -> `159` tests OK. +- `python3 scripts/reports_ops.py summary` -> `32` reports historises, avec `accepted=6`, `quality_blocked=15`, `provider_failed=9`. +- `python3 -m cli.main status` -> la CLI fonctionne, mais l'etat local courant expose encore un echec `structure`. +- `python3 -m cli.main generate chapter --chapter 01 --reject` -> echec immediat confirme sur conflit de fichiers d'intention. + +## Findings + +### P1 - Les points d'entree documentaires renvoient encore vers des snapshots perimes + +Le `README` racine et `docs/dev/README.md` pointent encore majoritairement vers les snapshots du `16 mars 2026`, alors que le manifeste de suivi courant reference deja `docs/EXECUTION_PLAN_2026-03-22.md` et `docs/MODEL_COMPARISON_2026-03-22.md`, et que les derniers reports utiles sont du `23 mars 2026`. + +Impact: +- un lecteur neuf repart sur une base trop ancienne +- la reference locale parait encore Apple dans plusieurs pages alors que l'`AUTO-SYNC` le plus recent remonte `mistral:mistral-large-latest` + +References: +- `README.md` +- `docs/dev/README.md` +- `automation/next_lots.toml` + +### P1 - La surface d'exploitation melange encore le chemin par defaut et le chemin alternatif runtime + +Le manifeste courant route tout via `:8100` (`core_base_url` et `ollama_openai_base_url` pointent tous deux sur Mascarade), mais la documentation et certains raccourcis exposent encore `:8091` comme si c'etait la voie normale pour les smokes Ollama ou Mistral. En pratique, `:8091` n'est qu'un mode alternatif explicite quand on bascule vers `llama.cpp`. + +Impact: +- risque de lancer un smoke sur le mauvais endpoint +- risque de contourner la politique runtime active du manifeste +- lecture plus difficile des incidents runtime + +References: +- `automation/next_lots.toml` +- `README.md` +- `docs/runbooks/LOCAL_GENERATION.md` +- `Makefile` + +### P1 - Le workspace courant contient un conflit de fichiers d'intention bloquant + +Le depot contient a la fois `notes/intentions/chapitre_01.md` et `notes/intentions/chapitre_1.md`. Le moteur normalise bien les identifiants et refuse ce cas, mais cela bloque toute generation du chapitre `01` tant que le doublon n'est pas traite. + +Impact: +- `generate chapter --chapter 01` echoue avant meme l'appel provider +- le probleme ressemble a un souci runtime si on ne teste pas explicitement la commande + +References: +- `notes/intentions/chapitre_01.md` +- `notes/intentions/chapitre_1.md` + +### P2 - `status` n'aide pas encore assez a diagnostiquer l'etat projet + +La commande `status` affiche la section `Dossiers`, mais elle montre en fait des booleens d'existence et non des chemins. Elle ne remonte pas non plus les conflits de fichiers de chapitre, alors que ceux-ci bloquent ensuite `generate`. + +Impact: +- UX trompeuse pour l'onboarding et le diagnostic local +- il manque un signal preventif sur les conflits `chapitre_01` / `chapitre_1` + +References: +- `cli/main.py` +- `core/project/loader.py` + +## Recommandations + +1. Utiliser `docs/dev/README.md` comme index vivant et y pointer vers les derniers docs dates, pas vers les snapshots historiques par defaut. +2. Distinguer partout le chemin par defaut `:8100` et le chemin alternatif `:8091`. +3. Standardiser les fichiers chapitre en forme canonique `chapitre_01.md`, `chapitre_02.md`, etc. +4. Faire evoluer ensuite `status` pour remonter les conflits de chapitres avant `generate`. + +## Actions documentaires appliquees dans ce lot + +- mise a jour du `README` racine +- remise a niveau de `docs/dev/README.md` +- clarification du runbook `docs/runbooks/LOCAL_GENERATION.md` +- actualisation de `docs/roadmap.md` diff --git a/docs/dev/README.md b/docs/dev/README.md index 741f052..77e0930 100644 --- a/docs/dev/README.md +++ b/docs/dev/README.md @@ -1 +1,36 @@ -Documentation développeur. +# Documentation developpeur + +Index vivant pour repartir vite sans se faire pieger par les snapshots historiques. + +## Ordre de lecture recommande + +- [`../../README.md`](../../README.md) +- [`../CODE_AUDIT_2026-04-06.md`](../CODE_AUDIT_2026-04-06.md) +- [`../governance.md`](../governance.md) +- [`../workflow.md`](../workflow.md) + +## Docs actives + +- contexte courant: [`../CONTEXTE_PROJET_2026-03-22.md`](../CONTEXTE_PROJET_2026-03-22.md) +- memoire de reprise: [`../MEMOIRE_REPRISE_2026-03-22.md`](../MEMOIRE_REPRISE_2026-03-22.md) +- plan courant: [`../EXECUTION_PLAN_2026-03-22.md`](../EXECUTION_PLAN_2026-03-22.md) +- comparatif local: [`../MODEL_COMPARISON_2026-03-22.md`](../MODEL_COMPARISON_2026-03-22.md) + +## References systeme + +- spec systeme: [`../SYSTEM_SPEC_2026-03-21.md`](../SYSTEM_SPEC_2026-03-21.md) +- contrat runner app: [`../ANE_RUNNER_CONTRACT_V1_2026-03-23.md`](../ANE_RUNNER_CONTRACT_V1_2026-03-23.md) +- carte agents: [`../AGENTS_2026-03-21.md`](../AGENTS_2026-03-21.md) +- repos annexes: [`../REPOS_ANNEXES_2026-03-23.md`](../REPOS_ANNEXES_2026-03-23.md) + +## Runbooks + +- generation locale: [`../runbooks/LOCAL_GENERATION.md`](../runbooks/LOCAL_GENERATION.md) +- automation et reports: [`../runbooks/AUTOMATION.md`](../runbooks/AUTOMATION.md) +- recovery: [`../runbooks/RECOVERY_PROCEDURES.md`](../runbooks/RECOVERY_PROCEDURES.md) + +## Regle de lecture + +- le code et les tests priment +- les blocs `AUTO-SYNC` donnent le dernier etat automatise connu +- les documents dates restent utiles pour l'historique et la reprise, mais pas comme index principal diff --git a/docs/roadmap.md b/docs/roadmap.md index 60170b3..2398714 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,31 +1,31 @@ # Roadmap v2 -Roadmap courte et concrete, alignee sur l'etat reel du repo au 13 mars 2026. +Roadmap courte et concrete, remise a niveau apres audit du 6 avril 2026. -## Priorite 1 - Stabiliser la reprise +## Priorite 1 - Remettre les points d'entree au propre -- garder `automation/state/next_lots_state.json` sans checkpoint ambigu -- garder `:8100` et `:8201` operationnels, puis retablir un vrai chemin Ollama CPU avant de rejouer `priority_models` -- garder `apple-coreml:qwen3.5-4b-onnx-q4f16` comme reference provisoire tant qu'un rerun comparable ne la contredit pas -- traiter le rerun `automation/reports/apple_rerun_7oY51o` comme une alerte de stabilite: la reference Apple n'est pas encore reconfirmee -- ne plus laisser les docs perdre un resultat `accepted` lorsqu'un lot partiel plus recent tourne ensuite +- garder un index doc vivant dans `docs/dev/README.md` +- distinguer partout le chemin par defaut `:8100` du chemin alternatif `:8091` +- eviter les contradictions entre historique Apple, `AUTO-SYNC` courant et reports les plus recents -## Priorite 2 - Faire tomber les blockers reels +## Priorite 2 - Assainir le workspace et le diagnostic local -- sortir `ollama:qwen2.5:7b` de `outline_like` -- faire disparaitre `truncated_ending` sur au moins une baseline -- limiter les changements a `rewrite`, `repair` et leurs budgets tant qu'aucun autre blocker n'apparait +- supprimer les doublons de chapitres non canoniques du type `chapitre_1.md` +- faire remonter ces conflits plus tot dans `status` +- clarifier les sorties de statut quand un dossier existe mais n'est pas encore exploitable -## Priorite 3 - Resserer la matrice locale +## Priorite 3 - Reprendre les reruns utiles -- garder `apple-coreml:qwen2.5-0.5b-instruct-onnx` et `ollama:qwen2.5:1.5b` comme baselines vitesse ou regression -- garder `stateful-mistral7b-instruct-int4-coreml` hors chemin critique tant qu'un besoin produit n'impose pas son retour -- maintenir les modeles et le runtime Apple explicites dans chaque smoke et chaque doc +- retablir les providers encore `provider_failed` +- rejouer les lots utiles depuis `automation/state/next_lots_state.json` quand le runtime Apple et les providers distants sont prets +- garder les modeles Apple et Ollama explicites dans les smokes et les reports ## Source de verite -- contexte courant: [`CONTEXTE_PROJET_2026-03-14.md`](./CONTEXTE_PROJET_2026-03-14.md) -- memoire de reprise: [`MEMOIRE_REPRISE_2026-03-14.md`](./MEMOIRE_REPRISE_2026-03-14.md) +- index dev: [`dev/README.md`](./dev/README.md) +- audit: [`CODE_AUDIT_2026-04-06.md`](./CODE_AUDIT_2026-04-06.md) +- contexte courant: [`CONTEXTE_PROJET_2026-03-22.md`](./CONTEXTE_PROJET_2026-03-22.md) +- memoire de reprise: [`MEMOIRE_REPRISE_2026-03-22.md`](./MEMOIRE_REPRISE_2026-03-22.md) - backlog actif: [`../TODO_ACTIVE.md`](../TODO_ACTIVE.md) - etat livre: [`../TODO_IMPLEMENTE.md`](../TODO_IMPLEMENTE.md) -- ordre d'execution: [`EXECUTION_PLAN_2026-03-14.md`](./EXECUTION_PLAN_2026-03-14.md) +- ordre d'execution: [`EXECUTION_PLAN_2026-03-22.md`](./EXECUTION_PLAN_2026-03-22.md) diff --git a/docs/runbooks/LOCAL_GENERATION.md b/docs/runbooks/LOCAL_GENERATION.md index fdc6ead..910fde2 100644 --- a/docs/runbooks/LOCAL_GENERATION.md +++ b/docs/runbooks/LOCAL_GENERATION.md @@ -2,13 +2,14 @@ Runbook court pour lancer et diagnostiquer la generation locale via `mascarade`. -Comparatif de reference: [`docs/MODEL_COMPARISON_2026-03-08.md`](../MODEL_COMPARISON_2026-03-08.md) +Comparatif de reference: [`docs/MODEL_COMPARISON_2026-03-22.md`](../MODEL_COMPARISON_2026-03-22.md) ## Prerequis - `mascarade` repond sur `http://127.0.0.1:8100/health` - le modele reste explicite via `ANE_MODEL` ou `--model` - une intention existe pour le chapitre cible +- les fichiers chapitre doivent rester canoniques: `chapitre_01.md`, `chapitre_02.md`, etc. - le garde-fou manuscrit et la boucle `repair` peuvent bloquer la promotion meme avec `--approve` ## Cycle automatise @@ -34,18 +35,23 @@ Le driver: - attend brievement que `/models` reflète le bon `model_id` apres un switch Apple avant de recréer un checkpoint manuel - s'arrete proprement si un restart runtime ou un switch Apple est requis, puis imprime la commande de reprise +Lecture operateur utile: + +```bash +python3 scripts/ops_tui.py --watch --interval 3 +python3 scripts/next_lots_tui.py --watch --interval 2 +``` + ## Contrat local `ai-novel-engine` parle uniquement a `mascarade` sur `POST /v1/chat/completions`. - format modele: `provider:model` -- dernier cycle complet termine au 9 mars 2026: - - `apple-coreml:qwen3.5-4b-onnx-q4f16` est `accepted` de bout en bout sous garde-fou - - `ollama:qwen2.5:7b` atteint `gate`, exerce `repair` en live, puis finit `quality_blocked` sur `outline_like` - - `apple-coreml:stateful-mistral7b-instruct-int4-coreml` est retire du chemin critique et garde comme reference experimentale -- rerun comparable du 13 mars 2026: - - `automation/reports/apple_rerun_preset_20260313T223555Z` est `accepted` sans `repair` et reconfirme la reference Apple locale -- le lot `baselines` pour `apple-coreml:qwen2.5-0.5b-instruct-onnx` et `ollama:qwen2.5:1.5b` a ete rejoue separement; les deux modeles restent `quality_blocked` sur `truncated_ending` +- chemin par defaut actuel: le manifeste route les providers via `:8100` +- chemin alternatif: `:8091` ne doit etre utilise qu'apres bascule explicite vers `llama.cpp` +- reference historique Apple: `automation/reports/apple_rerun_preset_20260313T223555Z` est `accepted` +- reference automatisee la plus recente dans ce repo: `automation/reports/20260323T213131Z/SUMMARY.md` confirme `mistral:mistral-large-latest` +- les reruns Ollama historiques restent utiles pour comprendre les blocages `quality_blocked` et `provider_failed` - le runtime Apple local ne sert qu'un seul `model_id` a la fois - le fallback `repair` n'essaie plus de changer de modele `apple-coreml` en plein smoke; tout switch Apple reste une action runtime explicite @@ -54,7 +60,7 @@ Le driver: Preflight minimal cote runtime: ```bash -bash /Users/electron/mascarade/scripts/smoke_openai_compat_ane.sh \ +bash /Users/electron/Documents/Projets/mascarade/scripts/smoke_openai_compat_ane.sh \ --url http://127.0.0.1:8100 \ --model "apple-coreml:qwen3.5-4b-onnx-q4f16" ``` @@ -75,7 +81,7 @@ Notes: - `ANE_MAX_TOKENS_GATE` permet de regler le budget du garde-fou LLM - `ANE_MAX_TOKENS_REPAIR` et `ANE_REPAIR_MAX_PASSES` reglent la boucle `repair` - `apple-coreml:qwen2.5-0.5b-instruct-onnx` reste le candidat vitesse Apple a requalifier en baseline -- `apple-coreml:qwen3.5-4b-onnx-q4f16` est la reference Apple locale actuelle, reconfirmee par `apple_rerun_preset_20260313T223555Z` +- `apple-coreml:qwen3.5-4b-onnx-q4f16` reste la reference Apple historique acceptee dans ce repo - `apple-coreml:stateful-mistral7b-instruct-int4-coreml` reste archive hors lot utile sur cette machine: il repond, mais le smoke ANE est reste bloque a `structure` pendant plus de 8 minutes ## Smoke Ollama @@ -83,13 +89,31 @@ Notes: Preflight: ```bash -bash /Users/electron/mascarade/scripts/smoke_openai_compat_ane.sh \ +bash /Users/electron/Documents/Projets/mascarade/scripts/smoke_openai_compat_ane.sh \ --url http://127.0.0.1:8100 \ --model "ollama:qwen2.5:1.5b" ``` Le provider `ollama` doit apparaitre dans `providers` et le modele cible doit etre deja installe. -Sur cette machine, le meilleur candidat Ollama courant est `ollama:qwen2.5:7b`; `qwen2.5:1.5b` reste une baseline de regression, pas un candidat qualite. +Par defaut, les smokes Ollama passent eux aussi par `:8100` tant que `automation/next_lots.toml` garde `ollama_openai_base_url = "http://127.0.0.1:8100"`. +Sur cette machine, `ollama:qwen2.5:7b` reste le candidat qualite historique et `qwen2.5:1.5b` une baseline de regression. + +Chemin alternatif `llama.cpp`: + +```bash +bash ./scripts/prepare_llama_cpp_runtime.sh \ + --model qwen2.5:7b \ + --port 8091 +``` + +Puis regler `automation/next_lots.toml` ainsi: + +```toml +ollama_runtime = "openai_compatible" +ollama_openai_base_url = "http://127.0.0.1:8091" +``` + +Le script prepare une commande `llama-server` qui resolve directement le blob GGUF depuis Ollama et publie les alias `ollama:qwen2.5:7b` et `qwen2.5:7b`, ce qui laisse le pipeline ANE inchangé. Smoke chapitre complet: @@ -135,8 +159,9 @@ Champs utiles: ## Etat auto-synchronise -- dernier cycle automatise: 2026-03-14T14:03:06+00:00 +- dernier cycle automatise: 2026-03-23T21:34:05+00:00 - chapitre courant detecte: chapitre_01 -- reference locale actuelle: apple-coreml:qwen3.5-4b-onnx-q4f16 -- prochain lot utile: Reference locale reconfirmee; retablir le runtime des modeles provider_failed puis reprendre rewrite/repair sur les modeles bloques a gate. +- reference locale actuelle: mistral:mistral-large-latest +- prochain lot utile: Reference locale reconfirmee; retablir le runtime des modeles provider_failed avant de poursuivre. +- reprise attendue apres action manuelle: /Users/electron/Documents/Lelectron_rare/ai-novel-engine/automation/state/next_lots_state.json