Module 06 — Tester les nouveautés v0.10 (“l’ère agentique”)
← Retour Playwright-OWUI | Nouveautés v0.10
Pré-requis. Avoir fait les modules 03 (chat & streaming) et 05 (API testing). Ce module réutilise les deux familles de tests vues précédemment : API (rapide, déterministe) et UI (rendu et interaction).
La ligne v0.10 (juin-juillet 2026) est la plus grosse évolution d’Open WebUI depuis la v0.8. Elle transforme la plateforme en environnement agentique : mémoire repensée, dossiers d’équipe partageables, raisonnement affiché en direct, compaction automatique des longues conversations. Ce module montre comment écrire des tests pour ces surfaces.
Ce qu’on teste ici
| # | Fonctionnalité | Version | Famille | Fichier |
|---|---|---|---|---|
| 1-2 | Mémoire (refonte, champ type) |
v0.10.0 | API | 06-nouveautes.spec.ts (06a) |
| 3-4 | Dossiers (CRUD) | v0.10.0 | API | 06a |
| 5 | Dossiers d’équipe (partage) | v0.10.0 | API | 06a (exercice, 2e compte) |
| 6 | Raisonnement streamé | v0.10.2 | UI | 06b |
| 7 | Compaction automatique | v0.10.0 | UI | 06b |
Concepts pédagogiques nouveaux
1. Tester une donnée qui s’injecte ailleurs — la mémoire
La mémoire est particulière : un souvenir créé est ensuite injecté dans les prompts des conversations. Un test qui crée un souvenir et l’oublie pollue les vraies conversations de l’instance. D’où la règle de ce module :
Tout test d’écriture nettoie derrière lui. On utilise un bloc
finallypour garantir la suppression, même si une assertion échoue avant.
const created = await addMemory(request, OWUI_URL, token, `${TAG} ...`);
let cleaned = false;
try {
// ... assertions ...
cleaned = await deleteMemory(request, OWUI_URL, token, created.id);
} finally {
if (!cleaned) await deleteMemory(request, OWUI_URL, token, created.id).catch(() => {});
}C’est un pattern général en tests d’intégration : isolation par nettoyage. On marque aussi chaque objet créé d’un tag unique ([pw-module06]) pour le repérer facilement si un nettoyage échoue.
2. Feature detection vs assertion stricte
La refonte mémoire v0.10 ajoute un champ type (ex. "context") à chaque souvenir. On s’en sert comme preuve de version :
expect(created.type, 'le champ "type" (v0.10) doit être présent').toBeTruthy();Sur une instance antérieure à v0.10, ce champ serait absent : le test le détecterait. C’est une façon de documenter une différence de version dans le test lui-même.
3. Le raisonnement streamé — un contenu qui n’existe pas toujours
Depuis v0.10.2, les modèles “thinking” affichent leurs étapes de raisonnement en direct. Mais tous les modèles n’en émettent pas. Un bon test ne doit donc pas échouer sur l’absence de raisonnement : il skip proprement si la fonctionnalité n’est pas exercée (modèle non configuré, ou modèle sans raisonnement visible). C’est la différence entre “le test a échoué” et “la pré-condition n’était pas réunie”.
4. Tester la compaction sans saturer le contexte
La compaction automatique résume la conversation quand on approche de la limite de contexte. Impossible de saturer le contexte dans un test rapide : on teste donc le comportement observable — plusieurs tours d’affilée continuent de répondre et le modèle garde le fil (il retrouve une info du 1er tour). C’est un test de non-régression de la conversation longue.
Exécuter ce module
# depuis le dossier Playwright-OWUI/
cp .env.example .env # puis renseigner OWUI_URL / OWUI_EMAIL / OWUI_PASSWORD
npm install
npx playwright install chromium
# tout le module 06
npm run test:module6
# ou un seul test
npx playwright test 06-nouveautes-v0.10 --grep "memoire"Variables .env utiles pour ce module :
| Variable | Rôle | Obligatoire |
|---|---|---|
OWUI_URL / OWUI_EMAIL / OWUI_PASSWORD |
Instance + compte | Oui (06a) |
OWUI_CLOUD_MODEL |
Modèle rapide pour la compaction | Non (défaut gpt-5.1) |
OWUI_REASONING_MODEL |
Modèle “thinking” pour le test de raisonnement | Non (skip si absent) |
OWUI_TENANT2_EMAIL / OWUI_TENANT2_PASSWORD |
2e compte pour le partage | Non (exercice) |
Sans configuration, les tests API se connectent, les tests dépendant d’un modèle de raisonnement ou d’un 2e compte se mettent en pause (
skip) — le module ne produit jamais de faux échec.
Pièges spécifiques v0.10
- Native tool calling par défaut. En v0.10, l’appel d’outils “natif” devient le comportement par défaut. Pour un modèle purement conversationnel appelé via l’API en mode non-streaming, une réponse peut revenir avec
tool_callset uncontentvide. Ce n’est pas un bug : c’est le modèle qui choisit d’appeler un outil. Testez le contenu via l’UI (streaming) ou ciblez des modèles sans outils pour les assertions de texte. - Python côté client en iframe sandbox. L’exécution Python côté navigateur tourne désormais dans une iframe isolée (origine opaque). Si vous testez une fonction qui exécute du Python côté client, le contenu vit dans un
iframe— il faut cibler leframeLocator, pas le document principal. - Migration BDD irréversible. La montée en v0.10 applique des migrations non réversibles (backup obligatoire côté serveur). Sans impact sur vos tests, mais explique pourquoi on ne peut pas “revenir en arrière” sur une instance de cours.
Pour aller plus loin
- Nouveautés détaillées, côté étudiant :
../WHATS-NEW-v0.10.md - Changelog upstream : https://github.com/open-webui/open-webui/blob/main/CHANGELOG.md (sections 0.10.0 → 0.10.2)
Module 06 — Série Playwright-OWUI (CoursIA GenAI). Cible : Open WebUI v0.10.2.