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

190 lines
12 KiB
Markdown

# 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).
```yaml
- 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 :
```yaml
- 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).