Files
Momento/docs/fonctionnalites-ia.md
Antigravity 96e7902f01
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 1m22s
CI / Deploy production (on server) (push) Has been skipped
feat: publication IA (magazine/brief/essay) + fixes critique
Publication IA:
- 4 templates (magazine, brief, essay, simple) avec CSS riche
- Rewrite IA (article/exercises/tutorial/reference/mixed)
- Modération avec timeout 12s + fallback safe
- Quotas publish_enhance par tier (basic=2, pro=15, business=100)
- Détection contenu stale (hash)
- Migration DB publishedContent/publishedTemplate/publishedSourceHash

Fixes:
- cheerio v1.2: Element -> AnyNode (domhandler), decodeEntities cast
- _isShared ajouté au type Note (champ virtuel serveur)
- callout colors PDF export: extraction fonction pure testable
- admin/published: guard note.userId null
- Cmd+S fonctionne en mode dialog (pas seulement fullPage)

i18n:
- 23 clés publish* traduites dans les 15 locales
- Extension Web Clipper: 13 locales mise à jour

Tests:
- callout-colors.test.ts (6 tests)
- note-visible-in-view.test.ts (5 tests)
- entitlements.test.ts + byok-entitlements.test.ts: mock usageLog + unstubAllEnvs
- 199/199 tests passent

Tracker: user-stories.md sync avec sprint-status.yaml
2026-06-28 07:32:57 +00:00

254 lines
8.4 KiB
Markdown

# Fonctionnalités IA — Memento
## Architecture
Trois fournisseurs IA indépendants, chacun configurable séparément :
| Tier | Usage | Variables |
|---|---|---|
| **Tags** | Tags, labels, reformulation, suggestions de titre | `AI_PROVIDER_TAGS`, `AI_MODEL_TAGS` |
| **Embedding** | Recherche sémantique, Memory Echo, similarité | `AI_PROVIDER_EMBEDDING`, `AI_MODEL_EMBEDDING` |
| **Chat** | Chat RAG, agents, résumés, vision, brainstorm | `AI_PROVIDER_CHAT`, `AI_MODEL_CHAT` |
**13 fournisseurs supportés** : OpenAI, Google Gemini, Anthropic, DeepSeek, OpenRouter, Mistral, Ollama, ZAI, LM Studio, Custom OpenAI, MiniMax, GLM, Anthropic Custom.
Hiérarchie de fallback : Config spécifique → Tags → Embedding → Général → Env.
---
## 1. Notes — Écriture intelligente
### Suggestions de titre
- 3 propositions (Direct, Question, Créatif) en 3-8 mots
- Détection automatique de la langue du contenu
- Toggle utilisateur `titleSuggestions`
### Tags contextuels automatiques (IA2)
- Suggestions parmi les labels existants du carnet OU création de nouveaux
- Confiance > 0.5 (labels existants), > 0.3 (nouveaux)
- Toggle utilisateur `autoLabeling`
### Création auto de labels (IA4)
- Analyse un carnet (15+ notes) et détecte les thèmes récurrents
- Un thème doit apparaître dans 5+ notes, confiance > 0.60
- Max 5 suggestions, labels marqués `type='ai'`
### Reformulation de paragraphe — 6 modes
- **Clarifier** : élimine l'ambiguïté
- **Raccourcir** : condense 30-50%
- **Améliorer le style** : vocabulaire, structure
- **Corriger la grammaire** : corrections minimales
- **Traduire** : vers langue cible
- **Améliorer tous les modes** : les 3 principaux en un appel
### Traduction
- Traduction vers n'importe quelle langue cible
### Description d'images (Vision)
- Mode **description** : décrit le contenu (max 100 mots)
- Mode **titre** : 3 titres descriptifs de 3-7 mots
- Supporte images locales et distantes
### Suggestion de carnet
- Suggère le carnet le plus approprié lors de la création d'une note
- Analyse contenu + labels existants
---
## 2. Recherche sémantique
### Recherche hybride (FTS + Vectorielle)
- **Phase 1** : PostgreSQL FTS (`tsvector` / `plainto_ts_query`, index GIN) → 50 candidats
- **Phase 2** : pgvector recherche cosinus-distance (index HNSW) → 50 candidats, seuil 0.3
- **Phase 3** : Reciprocal Rank Fusion (RRF, k=60) pour le classement final
- Filtrage par carnet optionnel
- Fallback FTS-only si vectorielle échoue
### Embeddings
- pgvector(1536) dans PostgreSQL
- Régénération automatique après 7 jours
- Génération par lot avec `Promise.all`
---
## 3. Memory Echo — Connexions proactives
### Insights automatiques
- Détecte les connexions sémantiques entre notes via similarité cosinus
- Seuil de similarité : 0.75 (normal), 0.50 (démo)
- Génère une explication en 1 phrase (max 15 mots) via IA
- Fréquence configurable : daily / weekly / custom (3/jour)
### Feedback adaptatif
- **Thumbs up** → baisse le seuil de 0.05 (plus de suggestions)
- **Thumbs down** → monte le seuil de 0.15 (moins de suggestions)
### Fusion de notes
- Fusion intelligente de plusieurs notes en une seule structurée
- Consolidation, suppression des doublons, organisation logique
### Connexions par note
- Liste toutes les connexions sémantiques pour une note avec pagination
---
## 4. Chat IA — RAG avec outils
### Chat contextuel (streaming)
- Retrieval-Augmented Generation avec notes de l'utilisateur
- Recherche sémantique (seuil 0.5, 0.3 pour carnet spécifique)
- Prompt système en français
- **Outils disponibles** : `note_search`, `note_read`, `web_search`, `web_scrape`
- Max 5 steps d'outils
- Supporte contexte de carnet, contexte Copilot (note en cours), images (vision)
- Conversations persistées, historique 10 derniers messages
- Prompts localisés (en, fr, fa, es)
### Insights de chat
- Résumé synthétique ou 3 insights à partir des 5 notes les plus récentes
---
## 5. Organisation automatique
### Organisation par lot (IA3)
- Classe les notes sans carnet dans les carnets existants
- Guide de classification thématique (sport → Personnel, travail → Travail, etc.)
- Confiance > 0.60, max 50 notes analysées
- Prompts localisés en 12 langues
### Résumé de carnet (IA6)
- 5 sections : Thèmes Principaux, Statistiques, Éléments Temporels, Points d'Attention, Insights Clés
- Analyse jusqu'à 100 notes récentes
- Prompts localisés en 5 langues
---
## 6. Agents IA — 6 types
### Scraper
- Scrape des URLs (Jina Reader), détecte et parse les flux RSS
- Synthèse IA, extraction d'images (Cheerio + Sharp)
- Placement intelligent d'images via IA
- Titre généré par IA, notification par email
### Researcher
- Génère des requêtes de recherche, scrape les sources
- Crée une note de recherche structurée
### Monitor
- Analyse les notes récentes d'un carnet
- Produit des insights et connexions récurrents
### Custom
- Rôle personnalisé libre avec URLs source optionnelles
### Slide Generator
- Crée des présentations via `pptx_create` (PowerPoint) ou `slides_create` (HTML Reveal.js)
### Excalidraw Generator
- Crée des diagrammes Excalidraw à partir d'un format simplifié
- 7 types : flowchart, mindmap, architecture-cloud, org-chart, timeline, process-map, auto
- Auto-layout via Dagre
### Ordonnancement
- Fréquences : manual, hourly, daily, weekly, monthly
- Fuseaux horaires IANA supportés
---
## 7. Génération de contenu
### PowerPoint (PptxGenJS)
- 20 thèmes de couleur, 4 styles (sharp/soft/rounded/pill)
- 15 layouts de slides
- Pré-fetch d'images en base64
### Slides HTML (Reveal.js)
- Mêmes thèmes et layouts que PPTX
- Interactif, speaker notes, cadre décoratif optionnel
### Excalidraw
- Format simplifié (nodes + edges) → auto-layout Dagre
- Calcul de qualité (overlaps, croisements)
- Sauvegarde en DB
---
## 8. Brainstorm — Vagues de pensée
### Génération de vagues IA
- 3 vagues successives : Variations → Analogies → Disruptions
- Chaque vague enrichie avec contexte des notes existantes
- Connexions aux notes existantes via embeddings (derived_from, opposes, extends, synthesizes, transposes)
### Enrichissement d'idées manuelles
- LLM enrichit titre, description, connectionToSeed, noveltyScore
- Placement sémantique auto : embedding → similarité cosinus → meilleur parent
### Canvas D3 interactif
- Graphe radial avec 3 anneaux (vagues 1-2-3)
- Drag & drop, zoom, sélection, création inline
- Curseur fantôme AI pendant la génération
### Collaboration temps réel
- Socket.io : curseurs live, déplacement de nœuds, activité
- Partage via modèle NoteShare (email → notification → accepter/refuser)
- Avatars avec présence émeraude
### Export → Note
- Crée une note structurée avec résumé, vagues, connexions, notes sollicitées
- Ouvre directement la note créée
---
## 9. Outils disponibles pour les agents
| Outil | Description |
|---|---|
| `web_search` | Recherche web via SearXNG ou Brave Search |
| `web_scrape` | Scraping via Jina Reader (markdown) + RSS auto-détection |
| `note_search` | Recherche hybride dans les notes (sémantique + mots-clés) |
| `note_read` | Lit une note par ID |
| `note_create` | Crée une note (markdown, images optionnelles) |
| `note_update` | Modifie titre/contenu d'une note |
| `url_fetch` | Fetch d'URL avec parsing JSON/CSV/texte |
| `memory_search` | Recherche dans l'historique des exécutions d'agent |
| `pptx_create` | Génère un PowerPoint |
| `slides_create` | Génère des slides HTML Reveal.js |
| `excalidraw_create` | Génère un diagramme Excalidraw |
---
## 10. Détection de langue
- Hybride : TinyLD pour notes courtes (<50 mots, ~8ms), IA pour notes longues
- Mapping TinyLD → ISO 639-1, 62 langues dont le persan
- 19 codes explicitement mappés + fallback
---
## Toggles utilisateur (UserAISettings)
| Toggle | Fonctionnalité |
|---|---|
| `autoLabeling` | Tags contextuels automatiques |
| `paragraphRefactor` | Reformulation de paragraphe |
| `titleSuggestions` | Suggestions de titre |
| `memoryEcho` | Memory Echo proactif |
| `memoryEchoFrequency` | daily / weekly / custom |
| `demoMode` | Seuils abaissés pour démo |
| `preferredLanguage` | Langue préférée pour les agents |
---
## Chiffres
- **46 fichiers IA**
- **~10 500+ lignes de code**
- **26 routes API IA**
- **12 outils enregistrés**
- **6 types d'agents**
- **13 fournisseurs supportés**
- **Prompts localisés** : fr, en, fa, es, de, it, pt, nl, pl, ru, ja, ko, zh, ar, hi