Files
veille-ia-gen/plan_prd_veille_ia.md
T
cyber-mawonaj dc6bf1bbde chore : import initial du dossier de travail (PRD, guides, recommandations doc2sveltekit)
Inclut SPECS_SVELTE.md : conventions Svelte 5/SvelteKit pour veille-ia,
consolidées depuis doc2sveltekit-transition (playbook, charte OKI, best practices).
2026-08-01 09:18:27 -04:00

12 KiB

PRD — « veille-ia » : observatoire souverain des modèles génératifs

Application YunoHost custom (SvelteKit) pour cyber-mawonaj.net

Version : 1.0 — 1er août 2026 Porteur : factotum numérique indépendant (Guadeloupe) Contraintes : 100 % open-source (licences OSI uniquement), self-hosted YunoHost, ~0 €/mois marginal, pas de dépendance SaaS obligatoire.


1. Problème à résoudre

Les modèles génératifs (image, vidéo, SVG, LLM, audio) et leurs licences changent toutes les 72 h. Le porteur produit dans 5 contextes aux contraintes juridiques différentes (VN Ren'Py CC BY-NC-ND, vente d'images, clips vendus, jeux Steam/itch.io, diffusion libre). La veille manuelle est chronophage ; aucun outil existant ne fait la boucle complète surveiller → analyser → recommander selon le besoin → adapter les workflows.

2. Vision

Un observatoire personnel qui :

  1. Surveille automatiquement sorties de modèles, changements de licence/ToS, leaderboards et changelog ComfyUI ;
  2. Analyse chaque événement avec un LLM local (classification structurée, pas de résumé vague) ;
  3. Maintient un registre des modèles (source de vérité unique, versionnée git) ;
  4. Recommande des modèles en croisant le registre avec des profils de projets à contraintes ;
  5. Régénère les documents (guides markdown) et adapte les workflows ComfyUI paramétriques sans réinventer le graphe.

3. Architecture

┌─ cyber-mawonaj.net (YunoHost) ─────────────────────────────────────┐
│                                                                    │
│  changedetection_ynh ──webhook──┐                                  │
│  (surveillance pages licences,  │                                  │
│   leaderboards, blogs)          ▼                                  │
│                          nodered_ynh (Apache 2.0, ~100 Mo)         │
│                          flows: ingestion RSS, appel LLM,          │
│                          routage, notifications                    │
│                              │        ▲                            │
│              HTTP/classifier │        │ HTTP /api/alerts           │
│                              ▼        │                            │
│  Ollama (local machine ou VPS — voir §8.4)                         │
│  Qwen3-32B / Kimi K2.5 — classifieur JSON structuré                │
│                              │                                     │
│                              ▼                                     │
│  ★ veille-ia (APP CUSTOM — ce projet)                              │
│  SvelteKit + adapter-node, service systemd, SSO YunoHost           │
│  - Registre modèles (YAML + git via Gitea_ynh)                     │
│  - Profils projets (YAML)                                          │
│  - Moteur de recommandation                                        │
│  - Inbox alertes                                                   │
│  - Exporteur de documents markdown                                 │
│  - (Phase 2) Templates ComfyUI paramétriques + smoke tests         │
│                                                                    │
│  FreshRSS_ynh (flux RSS sources) · Gitea_ynh (versioning)          │
└────────────────────────────────────────────────────────────────────┘

Principe d'intégration YunoHost : toutes les briques périphériques existent dans le catalogue officiel — ne rien ré-empaqueter. Le projet ne package que l'app veille-ia.

4. Modules fonctionnels de l'app

4.1 Registre des modèles (MVP)

CRUD sur data/registre_modeles.yaml, versionné git (commit à chaque modification, push optionnel vers Gitea_ynh).

- id: krea-2-turbo
  nom: Krea 2 Turbo
  editeur: Krea AI
  modalites: [image]
  licence:
    nom: Krea 2 Community License
    url: https://huggingface.co/krea/Krea-2-Turbo
    commercial_ok: true
    seuil: "équipes <50 sièges"
    attribution_requise: false
    poids_ouverts: true
    garde_fous_obligatoires: true   # anti-NCII/CSAM
  capacites:
    nsfw_ok: true                   # en local, sous réserve garde-fous licence
    vram_gb: 12                     # fp8
    resolution_max: "2K"
    comfyui_natif: true             # ≥ 0.25.0
    licence_outputs: "commercialisables"
  scores:
    arena_image: 6                  # rang Artificial Analysis, juin 2026
  statut: production                # production | early-access | annonce | mort
  derniere_verif: 2026-08-01
  sources: ["https://..."]
  notes: "Encodeur Qwen3-VL, VAE Qwen Image. LoRA-friendly."

⚠️ Règle anti-hallucination gravée dans le modèle de données : tout champ non vérifié publiquement prend la valeur null + affichage « ⚠️ à vérifier » — jamais de valeur inventée.

4.2 Profils projets (MVP)

CRUD sur data/profils_projets.yaml — pré-rempli avec les 5 contextes :

- id: vn_renpy_adulte
  nom: "VN Ren'Py (CC BY-NC / BY-NC-ND)"
  requiert: [commercial_ok]
  exclut: []
  preferences:
    nsfw_ok: obligatoire
    poids_ouverts: fortement_prefere
    comfyui_natif: prefere
  plateformes: [steam, itch_io]
  contraintes_specifiques: "Déclaration IA Steam + tag itch.io obligatoires. NSFW => local uniquement."

- id: prestation_images
  nom: "Vente d'images (prestataire)"
  requiert: [commercial_ok, licence_outputs_commercialisables]
  exclut: [attribution_requise]      # configurable selon client
  ...

- id: clips_vendus / jeu_steam_itch / diffusion_libre   # idem

4.3 Moteur de recommandation (MVP)

  • Entrée : profil_id + filtres ad hoc (modalite, vram_max, budget: 0).
  • Logique : filtrage dur (requiert/exclut) → scoring pondéré (préférences, rang arena, fraîcheur derniere_verif, pénalité statut != production et champs null).
  • Sortie : shortlist classée avec justification par modèle (pourquoi éligible, quels warnings : attribution, seuil, licence à vérifier, déclaration plateforme).
  • Route API POST /api/recommander + page UI dédiée.

4.4 Inbox alertes (MVP)

  • POST /api/alerts (token secret) reçoit les événements classifiés depuis Node-RED.
  • Schéma : {type: nouvelle_sortie|changement_licence|changement_classement|comfyui_support, modele_id?, titre, resume, impact_profils: [...], urgence, sources[], date}.
  • UI : inbox filtrable par profil impacté ; action « Créer/MAJ fiche modèle » qui pré-remplit le registre ; action « Marquer traité ».

4.5 Exporteur de documents (MVP)

Bouton « Régénérer » : produit les guides markdown (licences, classements) depuis le registre — les documents deviennent des exports, plus des fichiers maintenus à la main. Templates markdown éditables dans l'UI.

4.6 Templates ComfyUI (Phase 2)

  • Stockage de workflows JSON paramétrés (variables : {{modele_checkpoint}}, {{vram_profile}}, {{resolution}}).
  • Quand registre change → régénération des JSON concrets + commit git.
  • Smoke test headless : POST du prompt canari sur l'API ComfyUI (/prompt) de la machine de prod, remontée du statut dans l'UI.
  • ⚠️ Ne pas promettre la réécriture automatique de graphes : on paramètre, on ne régénère pas la topologie.

5. Flows Node-RED à livrer (JSON importables)

  1. rss-ingest : poll flux (HF blog, BFL, MiniMax, Krea, Artificial Analysis, changelog ComfyUI, GitHub releases) via FreshRSS API ou nodes RSS → dédup → POST classifier.
  2. license-watch : réception webhooks changedetection_ynh (URLs ToS/licences configurées : BFL, MiniMax Community License, cards HF, Midjourney, Runway, Suno, Steam/itch.io policies) → diff → POST classifier avec type: changement_licence, urgence haute.
  3. classifier : HTTP POST vers Ollama (/api/chat, format: json) avec prompt système figé (cf. §6) → POST /api/alerts.
  4. notify : routage urgence haute → email (SMTP YunoHost) et/ou ntfy/Matrix ; le reste reste en inbox.

6. Prompt système du classifieur (figé, versionné)

Tu es un classifieur d'événements IA pour un créateur indépendant.
Réponds UNIQUEMENT en JSON valide respectant ce schéma :
{type, modele, editeur, modalites[], licence: {nom, commercial_ok(nullable),
seuil(nullable), attribution_requise(nullable), poids_ouverts(nullable)},
nsfw_ok(nullable), vram_gb(nullable), comfyui_natif(nullable), statut,
impact_profils[], resume(2 phrases max), sources[], confiance: haute|moyenne|faible}
RÈGLES STRICTES : si une information n'est pas explicitement présente dans le
texte source, mets null. N'invente jamais une licence, un prix ou un benchmark.
Signale les benchmarks auto-rapportés par l'éditeur (confiance: moyenne max).

7. Packaging YunoHost (veil-le-ia_ynh)

  • Format packaging v2 (manifest.toml), helpers officiels, doc : doc.yunohost.org/packaging_apps.
  • Ressources : ports (1 port node), nodejs (version LTS), system_user, install_dir (/var/www/veille-ia), data_dir (/home/yunohost.app/veille-ia : YAML + git).
  • Service systemd via ynh_add_systemd_config, reverse proxy nginx via ynh_add_nginx_config.
  • SSO : permission visitors: false — app privée derrière SSOwat ; header SSO validé côté SvelteKit (hooks) ou auth par défaut admin uniquement.
  • Scripts : install, remove, upgrade, backup, restore, change_url.
  • CI : package_check doit passer (niveau ≥ 7 visé).
  • Licence du package et de l'app : AGPL-3.0 (cohérent libriste ; AGPL car app web).

8. Contraintes techniques & décisions

  1. Svelte : recommandations détaillées fournies séparément par le porteur (SPECS_SVELTE.md à la racine du projet — le code doit les suivre strictement ; si absent, appliquer : SvelteKit + TypeScript strict + adapter-node, pas de framework CSS lourd sans accord).
  2. Persistance : fichiers YAML + git (pas de base de données au MVP — lisible, sauvegardable, diffable). SQLite via Drizzle admis en Phase 2 si le volume d'alertes le justifie.
  3. Zéro appel API payant : tout le LLM passe par Ollama local. OpenRouter optionnel derrière un flag de config, désactivé par défaut.
  4. Ollama : si paquet YunoHost indisponible/non maintenu → installation Docker hors YNH ou sur la machine locale du porteur, joignable par HTTP (wireguard/lan). Documenter les deux chemins dans le README.
  5. Anti-hallucination systémique : champs nullables + badge « à vérifier » ; aucune écriture dans registre sans sources[] non vide.
  6. i18n : français d'abord, structure prête pour créole/anglais.

9. Roadmap

Phase Contenu Critère de sortie
0 Socle app SvelteKit + packaging YNH minimal (install/remove/backup OK) package_check vert, app accessible via SSO
1 Registre + profils + moteur de recommandation + UI Shortlist correcte sur les 5 profils pré-remplis
2 Inbox alertes + flow Node-RED classifier + export markdown Une alerte changedetection réelle arrive classifiée dans l'inbox
3 Templates ComfyUI + smoke tests Régénération JSON + test canari vert
4 Durcissement : i18n, SQLite si besoin, niveau 8 package_check

10. Hors périmètre (v1)

  • Réécriture automatique de graphes ComfyUI (topologie) — paramétrage seulement.
  • Scraping de plateformes à login (X/Twitter, Discord) — sources RSS/Atom/web uniquement.
  • Multi-utilisateurs (app personnelle).
  • Notifications push mobile natives (ntfy suffit).