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).
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user