feat(agent): v4.11.0 - clés API par utilisateur, chargement dynamique modèles, commandes slash
FlowDeck CI / test (push) Failing after 7s
FlowDeck CI / docker (push) Skipped

This commit is contained in:
2026-09-05 11:47:58 -04:00
parent 1c11b9d351
commit 34368a4946
10 changed files with 772 additions and 24 deletions
+36 -1
View File
@@ -1,6 +1,41 @@
# Changelog — FlowDeck
## v4.10.1 (2026-09-05) — Agent IA : configuration LLM dans l'UI
## v4.11.0 (2026-09-05) — Agent IA : clés API par utilisateur & chargement dynamique des modèles
> Suite de v4.10.1 : migre la config LLM d'un **global admin** vers des **credentials par
> utilisateur**. Chacun peut enregistrer plusieurs provider + clé API dans son profil, les modèles
> disponibles sont **chargés automatiquement depuis le fournisseur**, et le provider/modèle actif
> d'une conversation se pilote **directement dans le chat** via des commandes slash.
### Added
- **Clés par utilisateur** : table `user_llm_keys` (UNIQUE(user_id, provider)) + service
`app/services/llm_config.py` : `get_user_llm_key`, `list_user_llm_keys` (masqué),
`upsert_user_llm_key`, `delete_user_llm_key`. Une clé vide conserve l'existante.
- **Chargement dynamique des modèles** : `fetch_provider_models()` (httpx) — GET `{base}/models`
pour OpenAI-compatible (Bearer), headers `x-api-key`/`anthropic-version` (Anthropic),
`x-goog-api-key` (Gemini) ; stockés dans `models_json` et fusionnés dans `GET /providers`.
- **Endpoints API** (tout utilisateur authentifié) :
- `GET /api/agent/keys`, `PUT/DELETE /api/agent/keys/{provider}`,
- `POST /api/agent/keys/{provider}/models` (fallback sur la clé stockée, pas de fuite de clé),
- `PATCH /api/agent/conversations/{id}` (title / provider / model — commande slash).
- **`POST /run`** : utilise la clé API de l'utilisateur pour le provider de la conversation
(sinon config globale / `.env` / offline mock).
- **UI Settings → Agent & IA** (visible pour tous, plus seulement admin) : carte par provider
(clé API masquée, URL API, « Charger les modèles » en live, modèle par défaut,
Enregistrer / Supprimer). La config globale reste admin sous « Configuration globale ».
- **Commandes slash dans le panel agent** : `/help`, `/providers`, `/keys`,
`/provider <nom>`, `/model <nom>` — menu de suggestions live, appliquées via `PATCH`
et sans appel LLM.
### Infra
- `VERSION` → 4.11.0 ; migration idempotente (création table `user_llm_keys` + index).
### Tests
- **239 tests verts** (+7 : CRUD clés + masquage des secrets, isolation par utilisateur,
provider invalide, fetch modèles (clé stockée / body gagnant / erreur), PATCH conversation,
`/run` utilise la clé de l'utilisateur).
> Comble le trou UX de v4.10.0 : l'utilisateur pouvait discuter avec l'agent mais **ne pouvait
> configurer ni provider ni modèle**. Ajout d'un sélecteur provider/modèle dans le panneau, d'une