Files
2026-04-06 11:49:28 +02:00

21 KiB

TODO actif - AI Novel Engine

Backlog courant pour reprendre ai-novel-engine sans melanger le reste avec les lots deja livres.

References:

Memoire de reprise

  • reference locale mise a jour le 2026-03-23: apple-coreml:qwen3-4b-instruct-2507-q4f16 (3x plus rapide que l'ancienne ref)
  • ancienne reference locale: apple-coreml:qwen3.5-4b-onnx-q4f16 (remplacee)
  • reference cloud: mistral:mistral-large-latest (via Mascarade Batch API, pas de modele en RAM)
  • Mascarade routing: tout passe par :8100 — Mistral API, Apple CoreML, Ollama P2P
  • premier candidat Ollama maintenant accepte: ollama:qwen2.5:7b
  • preuve cle du 16 mars: ollama:qwen2.5:1.5b a deja atteint gate via llama.cpp / llama-server
  • juge narratif secondaire livre sous core/evaluation/, activable par ANE_JUDGE_MODEL
  • rerun juge du 22 mars:
    • ollama:qwen2.5:7b -> quality_blocked ['truncated_ending', 'missing_risky_decision']
    • ollama:mistral-nemo:latest -> quality_blocked ['truncated_ending', 'missing_immediate_consequence']
  • reruns comparables budgets manifeste:
    • ollama:qwen2.5:7b -> quality_blocked ['truncated_ending', 'missing_risky_decision', 'incomplete_scene'] dans automation/reports/20260322_qwen2_5_7b_judge_budgeted
    • ollama:mistral-nemo:latest -> quality_blocked ['truncated_ending'] dans automation/reports/20260322_mistral_nemo_judge_budgeted
  • retouche prompt + reruns:
    • ollama:qwen2.5:7b -> gain partiel: plus d'incomplete_scene, reste quality_blocked ['truncated_ending', 'missing_risky_decision'] dans automation/reports/20260322_qwen2_5_7b_judge_prompted
    • ollama:mistral-nemo:latest -> regression: retour outline_like + missing_immediate_consequence dans automation/reports/20260322_mistral_nemo_judge_prompted
  • correctif gate + retouche micro-decision :
    • ollama:mistral-nemo:latest -> faux outline_like supprime; reste quality_blocked ['missing_immediate_consequence'] dans automation/reports/20260322_mistral_nemo_judge_gatefix
    • ollama:qwen2.5:7b -> missing_risky_decision supprime; reste quality_blocked ['missing_immediate_consequence'] dans automation/reports/20260322_qwen2_5_7b_judge_gatefix
  • retouche "consequence immediate observable" :
    • ollama:qwen2.5:7b -> accepted sans repair dans automation/reports/20260322_qwen2_5_7b_judge_consequencefix
    • ollama:mistral-nemo:latest -> regression vers quality_blocked ['truncated_ending', 'missing_risky_decision', 'missing_immediate_consequence'] dans automation/reports/20260322_mistral_nemo_judge_consequencefix
  • runtime utile du 22 mars:
    • :8091 revalide localement via llama-server pour qwen et mistral
    • :8110 repond a /health mais reste inutilisable pour chat/completions
    • automation/next_lots.toml repointe maintenant vers /Users/electron/Documents/Projets/mascarade
    • scripts/smoke_local_generation.sh aligne maintenant ses budgets non-Apple sur le manifeste (rewrite=1024, repair=1536)
  • cote app (2026-03-25):
    • app_AI-novel-engine integre maintenant Mascarade Core et Mascarade API pour agents, models et chat/completions
    • le panneau Generation affiche provider_status (actif, configure, unauthorized, erreur runtime) et le preset recommande suit maintenant le premier modele reellement actif
    • un Wizard Agents dedie guide maintenant l'usage des agents Mascarade (source -> catalogue -> brief -> routage -> run -> apply) et persiste cet etat par projet
    • le Wizard Agents garde maintenant un historique recent des runs agent et affiche une comparaison brouillon / sortie agent avant application
    • le Copilot / Writing Tools sait lancer l'agent Mascarade selectionne, reinjecter sa reponse dans le fil Copilot, puis comparer inline brouillon courant / derniere reponse Copilot / dernier manuscrit pipeline
    • le lot Copilot hybride a demarre: les requetes Copilot passent maintenant par une couche CopilotService avec fallback automatique Apple Intelligence -> backend
    • le Copilot consomme maintenant un contexte ANE outille (scene, brouillon, prompt, gate, manuscrit, agent) prepare hors de l'UI pour les futures integrations App Intents
    • le Copilot ajoute maintenant un RAG local-first sur le graphe projet et les artefacts pipeline, avec visualisation des extraits recuperes dans l'app
    • les premieres actions outillees du Copilot sont maintenant reexecutables depuis le panneau de contexte (scene, gate, manuscrit, agent, pipeline)
    • les ecritures destructives du brouillon depuis le Copilot ou un agent Mascarade demandent maintenant confirmation
    • l'app expose maintenant un preset MLX local :8092 avec mlx-community/Ministral-3-3B-Instruct-2512-4bit et un script scripts/mlx_runtime.sh pour diagnostiquer / demarrer le runtime
    • l'app expose maintenant une bibliotheque locale de modeles HF/MLX (cache HF dedie, conversion MLX, nettoyage source optionnel, activation) et un export dataset JSONL compatible KIKI-models-tuning
    • la refonte UI du 2 avril recentre maintenant l'app sur trois axes (Ecrire, IA, Analyser & Ops), avec un header a signaux et un inspecteur tabule Contexte / Runtime / Pipeline
    • un nouvel ecran Runtime & modeles centralise maintenant la configuration IA, les providers Mascarade, le runtime MLX, la bibliotheque locale HF/MLX et l'export dataset KIKI
    • les telechargements HF affichent maintenant une progression reelle, une annulation propre et un token HF optionnel cote app
    • l'app expose maintenant un preflight compatibilite MLX; croissantllm/CroissantLLMChat-v0.1 est telecharge localement et classe Convertible MLX
    • croissantllm/CroissantLLMChat-v0.1 a maintenant aussi un smoke reel MLX local valide (~812M, footprint stable ~3.7G, pic ~6.7G, ~1.0-1.8 s), mais le replay ANE reel reste insuffisant (repair_v1 corrompu, gate/judge fragiles), donc pas encore de promotion Qualite FR
    • le 2 avril, mlx-community/Ministral-3-3B-Instruct-2512-4bit a ete telecharge et valide en reel sur :8092 (health, v1/models, v1/chat/completions)
    • le 2 avril, mlx-community/Qwen2.5-7B-Instruct-4bit a ete telecharge et rejoue en reel sur :8092; il tient le JSON parseable sur gate/judge sous ~4.9G de footprint et ~5.7G de pic memoire, mais pas encore le contrat ANE complet sans post-traitement schema/consistance
    • l'app expose maintenant un preset Mistral local pointant vers http://127.0.0.1:8091 avec ollama:mistral-nemo:latest pour un chemin local type TurboQuant / llama.cpp
    • l'app expose aussi deux profils FR explicites: croissantllm/CroissantLLMChat-v0.1 (FR local experimental) et croissantllm/CroissantLLMBase (R&D ANE)
    • reverification ANE du 2 avril: mlx-community/Ministral-3-3B-Instruct-2512-4bit sert bien un vrai repair_v1 apres completion du cache, mais ni lui ni CroissantLLMChat ne respectent encore assez bien les contrats JSON gate/judge pour servir de moteur ANE strict local
    • le lot App Intents expose maintenant l'ouverture de l'app, le resume de scene, l'ouverture de scene ciblee, une aide de rewrite locale, et le lancement du pipeline ANE
    • la provenance exacte d'ecriture est maintenant persistee dans DraftSnapshot.source pour Copilot, agents, generation directe et pipeline
    • verification bundle app du 29 mars: validate-app-intents confirme que les symboles intents sont bien dans le binaire, mais que l'exposition systeme reste bloquee par l'absence de metadonnees App Intents et un Xcode local casse
  • reverification runtime du 25 mars:
    • Mascarade Core :8100 repond a health et v1/models
    • Mascarade API :3100 repond a health, v1/api/models et v1/api/agents/catalog
    • local_server expose maintenant provider_status / v1/providers/status et ne publie plus les providers non autorises comme disponibles
    • claude:claude-sonnet-4-6 passe maintenant en bout-en-bout sur :8100/v1/chat/completions et :3100/api/v1/chat/completions
    • mistral et openai restent configures localement, mais sont correctement marques unauthorized
  • etat live reverifie (2026-03-16 session 3) :
    • :8201 UP — qwen3.5-4b-onnx-q4f16 actif
    • :11434 UP
    • :8100 UP (mascarade — apple-coreml + ollama providers)
    • :8091 UP — ollama:qwen2.5:7b (dernier rerun gatefix)
    • lot baselines termine dans automation/reports/20260316T195716Z/
    • lot priority_models termine dans automation/reports/20260316T211232Z/
    • lot french_models termine dans automation/reports/20260316T220423Z/
  • fix outline_like valide : qwen2.5:1.5bquality_blocked ['truncated_ending'] uniquement (plus d'outline_like)
  • fix dense_bullet_list : 4+ bullet lines = outline_like sans 2e marqueur
  • lot runtime extrait : core/runtime/{config,models,client,health,policies}.py
  • suite unitaire : 156 tests verts
  • le 2 avril, le pipeline ANE normalise maintenant les verdicts gate/judge avant persistence: aliases historiques (incomplete, lacks_narrative_continuity) unifies, labels inconnus filtres, doublons supprimes et ready_for_manuscript recalcule a partir des blockers effectifs

Refonte runtime (P0)

  • P0 Extraire une couche runtime minimale (RuntimeProfile, client OpenAI-compatible, health probe)
  • P0 Formaliser les profils runtime nommes (mascarade_local, mascarade_remote_*, llama_cpp_local)
  • P0 Encoder la capacite response_format au lieu de la supposer pour tous les runtimes
  • P1 Sortir le preflight runtime et les checkpoints Apple / llama.cpp de core/next_lots.py
  • P1 Ajouter des tests dedies aux profils runtime et a la sante runtime

Actif

Qualite narrative (priorite P0 apres services)

  • P0 Revalider le fix outline_like sur ollama:qwen2.5:1.5b — confirme : quality_blocked ['truncated_ending'] seulement
  • P0 Remonter http://127.0.0.1:8100/health — mascarade UP
  • P0 Requalifier ollama:qwen2.5:7b via llama.cpp / llama-server:8091 UP avec qwen2.5:7b
  • P0 Rejouer priority_models — en cours rapport 20260316T204232Z
  • P1 Rejouer french_models (mistral-nemo) — quality_blocked ['outline_like', 'incomplete', 'lacks_narrative_continuity'] (rapport 20260316T220423Z)
  • P1 Analyser resultats priority_models et french_models — comparatif mis a jour (session 3)
  • P1 Garder scripts/ops_tui.py comme point d'entree exploitation court terme
  • P0 Ajouter un juge narratif secondaire optionnel (core/evaluation/*, ANE_JUDGE_MODEL) compatible avec une future grille type Prometheus
  • P0 Etendre gate_v1.json, meta.json et _repair_focus() avec le verdict du juge narratif
  • P1 Ajouter prompts/judge_narrative_v1.txt et resserrer gate_v1 / rewrite_v1 / repair_v1 sur decision risquee + consequence immediate
  • P1 Rejouer priority_models avec ANE_JUDGE_MODEL pour requalifier qwen2.5:7b — verdict final quality_blocked ['truncated_ending', 'missing_risky_decision'] (workspace automation/reports/20260322_qwen2_5_7b_judge)
  • P1 Rejouer french_models avec ANE_JUDGE_MODEL pour requalifier mistral-nemo — verdict final quality_blocked ['truncated_ending', 'missing_immediate_consequence'] (workspace automation/reports/20260322_mistral_nemo_judge)
  • P1 Aligner scripts/smoke_local_generation.sh sur les budgets non-Apple du manifeste (rewrite=1024, repair=1536)
  • P1 Requalifier qwen2.5:7b et mistral-nemo avec les budgets du manifeste
  • P1 Tenter une retouche prompt courte sur fermeture de scene / non-repetition
  • P0 Retoucher rewrite_v1 / repair_v1 de maniere plus fine pour qwen2.5:7b sans degrader mistral-nemomissing_risky_decision tombe sur automation/reports/20260322_qwen2_5_7b_judge_gatefix
  • P0 Renforcer gate_v1 contre les faux outline_like LLM sur prose narrative francaise (mistral-nemo prompté) — valide sur automation/reports/20260322_mistral_nemo_judge_gatefix
  • P0 Retoucher rewrite_v1 / repair_v1 / _repair_focus() pour forcer une consequence immediate observable apres l'acte final, sans rouvrir la scene
  • P0 Rejouer qwen2.5:7b et mistral-nemo apres cette retouche ciblee "consequence immediate"
  • P0 Isoler une variante prompt/repair pour mistral-nemorewrite_v2_nemo.txt + repair_v2_nemo.txt + prompt_profile dans PromptStore
  • P0 Garder qwen2.5:7b comme baseline Ollama — passe dans priority_models via Mascarade P2P (2026-03-23)
  • P1 Durcir la normalisation schema/consistance des verdicts gate/judge pour les petits modeles locaux avant persistence ANE
  • P1 Ajouter un post-traitement semantique optionnel pour les contradictions restantes (summary vs blockers) si on veut promouvoir Qwen2.5-7B comme evaluateur local ANE

Qualite code (P1, lot refonte)

  • P0 Extraire une couche core/runtime/* claire (profil, contraintes, healthcheck) sans casser la facade core/generation/provider.py
  • P1 Faire converger core/generation/provider.py vers core/runtime/config.py pour eliminer la duplication de config runtime
  • P1 Faire consommer une partie de cette couche par next_lots et ops_tui (runtime_probe_profile, runtime_model_ids)
  • P1 Extraire hors de next_lots les checkpoints manuels Apple et le preflight Ollama natif vers core/runtime/checkpoints.py et core/runtime/preflight.py
  • P1 Ajouter des profils runtime explicites (mascarade_local, mascarade_remote_*, apple_coreml_single_model, ollama_openai_compatible, llama_cpp_local)
  • P1 Encoder response_format comme capacite runtime explicite plutot que supposition globale
  • P1 Faire converger scripts/mascarade_remote_tui.py et les preflights distants sur le registre de profils runtime
  • P1 Reduire encore core/next_lots.py au role orchestration + sync documentaire maintenant que core/runtime/orchestration.py existe
  • P1 Extraire la synchro documentaire residuelle dans core/tracking_sync.py pour garder core/next_lots.py sur l'orchestration, l'etat et l'execution de commandes
  • Fix 4 bare except Exception dans core/next_lots.py — restreints a (OSError, json.JSONDecodeError, ValueError)
  • Fix des except Exception restants sur chemins critiques (core/next_lots.py preflight + scripts/ops_tui.py probe URL)
  • Prompts draft_v1, rewrite_v1, repair_v1 : output primer + few-shot BAD/GOOD
  • Tests IntentionGate, PromptStore, CLI intention — suite a 77 tests verts
  • _finish_stage() extrait dans pipeline.pygenerate_chapter() -12 lignes
  • _iter_chapters_with_status() extrait dans loader.py — 3 fonctions factorisees
  • Makefile enrichi : healthcheck, smoke-apple/ollama/mistral, lot-priority/baselines/french/full/sync, resume, test-v
  • README.md nettoye : bloc CHANTIER:AUDIT stale supprime
  • P2 Typer metadata avec ChapterMetadata(TypedDict) dans pipeline.py — reporte: 20+ signatures a changer, impact eleve pour gain faible avant reruns stables
  • P2 Robustifier _close_json_delimiters() dans models.py — closers mal assortis et stray closers geres, 3 nouveaux tests, 80 tests verts
  • Ecritures JSON atomiques (temp file + replace) sur pipeline._write_json() et RunState.dump()
  • Lectures metadata/index tolerantes aux JSON corrompus (pipeline + loader)

Veille et docs (P2)

  • docs/OSS_LANDSCAPE_2026-03-16.md enrichi : GOAT, prometheus-eval, story-evaluation-llm, outlines, DeepEval, story-bench, lechmazur/writing, COLE FR benchmark
  • docs/OSS_LANDSCAPE_2026-03-21.md ajoute : veille sourcee runtime/eval pour guider la refonte ANE
  • docs/OSS_RUNTIME_EVAL_2026-03-21.md ajoute : synthese courte orientee runtime local, evals et generation structuree
  • docs/AGENTS_2026-03-16.md mis a jour avec Agent 6 Qualite code
  • docs/FEATURE_MAP_2026-03-16.md mis a jour avec Carte 7 Qualite code + french_models
  • README aligne manifeste (principes, governance) + runbook recovery
  • Nouveau runbook docs/runbooks/RECOVERY_PROCEDURES.md (resume lot, recovery metadata/state)
  • docs/OSS_LANDSCAPE_2026-03-21.md ajoute avec sources web et recommandations de refonte
  • P1 Realigner les plans/TODOs/docs de app_AI-novel-engine sur l'etat reel Mascarade + pipeline ANE
  • P2 Evaluer prometheus-eval ou story-evaluation-llm comme remplacement gate heuristique — candidats confirmes (veille agent session 3)
  • P2 Regarder lm-format-enforcer + llama-cpp-python comme premier fix logit anti-Markdown (plus facile qu'outlines selon veille)
  • P2 Regarder dottxt/outlines pour contraintes logits si grammar sampling dispo dans llama-server
  • P3 Tester CroissantLLM comme juge natif FR pour Prometheus sur sortie mistral-nemo

Exploitation remote Mascarade (P0 nouveau)

  • P0 Ajouter un cockpit TUI remote scripts/mascarade_remote_tui.py pour tower et kxkm
  • P0 Ajouter la config centralisee automation/mascarade_hosts.toml
  • P0 Ajouter la persistance launchd (scripts/setup_mascarade_launchd.py + automation/launchd/*.plist)
  • P1 Ajouter les tests tests/test_setup_mascarade_launchd.py
  • P0 Valider les tunnels SSH permanents (8110 tower, 8111 kxkm) via session reelle
  • P1 Activer launchd en reel (install) et verifier status
  • P1 Optionnel: ajouter autossh si launchd seul ne suffit pas

Bloque

  • P0 ollama natif 0.17.7 sur macOS 26.3.1 / Apple M5 echoue encore en generation sur qwen2.5:7b et qwen2.5:1.5b avec une erreur Metal / HTTP 500 — contourne via llama-server sur :8091
  • P0 Les secrets locaux Mistral et OpenAI sont invalides/expirés sur cette machine; les corriger pour re-activer ces providers dans Mascarade local_server
  • P1 Le runtime Apple local ne sert qu'un seul model_id a la fois; tout switch Apple reste semi-manuel (prepare_runtime_step.sh)
  • P1 Le runtime remote :8110 repond a /health mais reste inutilisable pour POST /v1/chat/completions (Temporary failure in name resolution)
  • P1 :8100 ne repond pas — CORRIGE (mascarade relance, UP)
  • P1 :8091 ne repond pas — CORRIGE (llama-server relance, UP avec qwen2.5:7b)

Prochain ordre

  • P0 Remonter le core OpenAI-compatible :8100 — mascarade UP
  • P0 Relancer llama-server sur :8091 pour qwen2.5:7b — UP
  • P0 Reprendre priority_models: checkpoint Apple en attente (prepare_runtime_step.sh puis --resume) si et seulement si un lot Apple est relance
  • P1 Lancer python3 scripts/run_next_lots.py --lot french_models — done, rapport 20260316T220423Z
  • P1 Garder automation/reports/apple_rerun_preset_20260313T223555Z comme rerun de reference pour les comparaisons Apple futures
  • P1 Verifier la purge reports en dry-run (prune --days 14) — 2 candidats, dont 1 reference a proteger
  • P1 Garder python3 scripts/reports_ops.py prune --days 14 en dry-run par defaut tant que les reports references ne sont pas marques
  • P1 Analyser logs et tenter purge chirurgicale (analyze-logs --top 15, prune --days 14 --delete-workspaces) — 0 suppression necessaire
  • P0 Brancher priority_models sur ollama:qwen2.5:7b — fait via Mascarade routing (2026-03-23)
  • P0 Creer une retouche specifique mistral-nemo moins directive sur la structure de fin, puis rejouer automation/reports/20260322_mistral_nemo_judge_consequencefix

Auto-sync

  • dernier cycle automatique: 2026-03-23T21:34:05+00:00
  • modeles accepted: mistral:mistral-large-latest
  • modeles ayant atteint gate: mistral:mistral-large-latest
  • quality_blocked: aucun
  • provider_failed: ollama:qwen2.5:7b, ollama:mistral-nemo:latest
  • prochain lot recommande: Reference locale reconfirmee; retablir le runtime des modeles provider_failed avant de poursuivre.
  • checkpoint manuel en attente: Le runtime Apple sert aucun modèle au lieu de qwen3-4b-instruct-2507-q4f16.
  • commande preparee: bash scripts/prepare_runtime_step.sh --apple-model qwen3-4b-instruct-2507-q4f16 --resume-state /Users/electron/Documents/Lelectron_rare/ai-novel-engine/automation/state/next_lots_state.json --ane-script /Users/electron/Documents/Lelectron_rare/ai-novel-engine/scripts/run_next_lots.py
  • reprise: python3 scripts/run_next_lots.py --resume /Users/electron/Documents/Lelectron_rare/ai-novel-engine/automation/state/next_lots_state.json