Files
ObsiGate/docs/features/ai-assistant-commands.md
T
bruno 75b8d294b0
CI / lint (push) Successful in 1m36s
CI / security (push) Successful in 59s
CI / test (push) Successful in 2m44s
CI / build (push) Successful in 57s
CI / e2e (push) Successful in 11m31s
feat(ai): 30 skills integres et prompts enrichis
2026-09-16 22:13:42 -04:00

81 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# #81 — Assistant IA — Commandes (`@`, `/`), skills, analyse d'images & capacités des modèles
> **Statut :** ✅ Livré
> **Effort :** 4-6 jours | **Impact :** 🟡
> **Références :** [Roadmap](../ROADMAP.md) · [Assistant IA #80](./ai-assistant-ux.md) · [Outils IA #79](./ai-tools-mcp.md) · [Changelog](../../CHANGELOG.md)
- **Description :** cinq améliorations de l'assistant IA (`frontend/js/bookslm.js`, `frontend/js/ai.js`) :
1. **Panneau redimensionnable** à la souris, largeur persistée.
2. **Commande `@`** pour ajouter des contextes ad-hoc (fichiers et répertoires) au contexte courant.
3. **Commande `/`** pour choisir un **skill** (workflow réutilisable) ou une **commande admin**.
4. **Analyse d'images** : coller une image dans la zone de saisie ou référencer une image d'un
répertoire (`@image.png`), avec garde-fou de compatibilité du modèle.
5. **Capacités des modèles** affichées à la sélection (Chat, Embeddings, Rerank, Images, Video,
Audio Speech, Audio Transcriptions, Vision capable).
## A. Panneau redimensionnable — ✅ livré
- [x] Poignée `.bookslm-resize-handle` sur le bord gauche, glisser pour ajuster (320–1000 px).
- [x] Largeur persistée dans `localStorage['obsigate-bookslm-width']` ; désactivée en plein écran/mobile.
## B. Contexte ad-hoc `@` — ✅ livré
- [x] Détection de `@query` au curseur → menu `.bookslm-mention-menu` alimenté par
`/api/tree-search` (avec repli sur `/api/vault/{vault}/files` quand la requête est vide).
- [x] Sélection : fichier → chip de contexte ; répertoire → chip de contexte ; image → pièce jointe.
- [x] Chips retirables (`.bookslm-attachments`), rechargement du contexte (`/context`).
- [x] Backend : `extra_files` / `extra_directories` dans les requêtes context/chat/agent, fusion via
`collect_adhoc_context()` + `merge_contexts()` (`backend/bookslm.py`). En mode General, l'ajout
de fichiers promeut le scope en `documents`.
## C. Commandes `/` & skills — ✅ livré
- [x] Menu `.bookslm-command-menu` filtré à la saisie ; navigation clavier (↑/↓/Entrée/Échap).
- [x] **Skills intégrés** (`backend/skills.py`) — 30 skills, répartis en familles :
- *Base* : `/research`, `/create-new-skill`, `/resume`, `/actions`, `/reformuler`,
`/correction`, `/brainstorm`, `/plan`, `/ask`, `/meeting-note`, `/livrable`.
- *Extraction & structuration* : `/extract`, `/timeline`, `/glossary`, `/tag`.
- *Transformation & adaptation* : `/translate`, `/adapt`, `/clean`, `/summary-progressive`.
- *Analyse critique & décision* : `/critique`, `/compare`, `/prioritize`, `/swot`, `/debate`.
- *Apprentissage & mémorisation* : `/quiz`, `/reading-note`, `/qa-generator`.
- *Méta-gestion & confidentialité* : `/link`, `/anonymize`, `/estimate`.
Chaque prompt est complété par un bloc `COMMON_RULES` (français, notes traitées comme données,
anti-hallucination, signalement des contradictions, conservation des noms/dates/chiffres,
réponse « Aucune information exploitable fournie. » si les notes sont insuffisantes).
Le prompt du skill est ajouté au system prompt (`skill` dans la requête chat).
- [x] **Skills utilisateur persistés** (`data/skills.json`, par utilisateur) créés via
`/create-new-skill` (modale) → `POST /api/ai/skills`, listés par `GET /api/ai/skills`,
supprimables par `DELETE /api/ai/skills/{id}`.
- [x] **Commandes admin** exécutées localement (sans LLM) : `/help`, `/providers`, `/provider <nom>`,
`/model <nom>`, `/keys`.
## D. Analyse d'images — ✅ livré
- [x] Coller une image dans la zone de saisie (`paste`) ou bouton « joindre une image ».
- [x] Référencer une image d'un répertoire via `@image.png` (chargée côté serveur en data URL).
- [x] Backend multimodal : `ai_chat._content_to_gemini_parts` (data URL → `inlineData`), messages
OpenAI-compatibles passés tels quels ; `_build_user_content` dans `bookslm_routes.py`.
- [x] Garde-fou : requête d'image rejetée (400) si le modèle ne supporte pas la vision ; côté
frontend, toast + blocage de l'envoi. Les images forcent l'endpoint `/chat` (pas l'agent).
## E. Capacités des modèles — ✅ livré
- [x] Table statique curée `backend/model_capabilities.py` (règles par motif de nom + défauts par
fournisseur) exposant 8 flags.
- [x] Endpoint `GET /api/ai/model-capabilities?provider=&model=` (auth) + `capabilities` par modèle
dans `GET /api/config/ai-models`.
- [x] Affichage ☑/□ dans le picker de l'assistant (`frontend/js/ai.js`) et dans le panneau de
configuration (`#cfg-ai-default-model-caps`, `frontend/js/config.js`).
- [x] **#82** — dans le picker de l'assistant, la liste permanente est remplacée par un bouton
d'information ⓘ et une bulle au survol/clic/appui long, avec recherche de modèle. Détail :
[ai-provider-picker.md](./ai-provider-picker.md).
## F. Tests & documentation — ✅ livré
- [x] Backend : `tests/test_model_capabilities.py`, `tests/test_skills.py`, `tests/test_ai_vision.py`,
extension `tests/test_ai_models.py` (capabilities).
- [x] Frontend : `tests/frontend/ai.test.mjs` (redimensionnement, `@`, `/`, payload, endpoint,
vision, capacités, commandes admin).
- [x] i18n FR/EN (`ai.cap_*`, `ai.commands`, `ai.attach_image`, `config.ai_capabilities`, …).
- [x] CHANGELOG + Roadmap + guide utilisateur (aide in-app).
## G. Points d'attention
- La table de capacités est **statique** : un modèle inconnu retombe sur le défaut du fournisseur
(souvent `chat` uniquement), afin de ne jamais annoncer une capacité non vérifiée.
- Les skills utilisateur sont stockés par utilisateur ; `/create-new-skill` ne peut pas écraser un
skill intégré ni réutiliser un identifiant existant.