Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ de l'instance vivent dans un `.env` **non commité** ; seuls les

- Pour piloter la même plateforme **par l'API** plutôt qu'à la souris,
suivre la série **AI Engine par son API**, à partir de
[`presenter-ai-engine-par-son-api.ipynb`](../03-Functional/03-5-Multi-Provider/presenter-ai-engine-par-son-api.ipynb).
[`presenter-ai-engine-par-son-api.ipynb`](../03-Functional/03-5-Multi-Provider/presenter-ai-engine-par-son-api.html).
- Pour monter l'instance jetable chez soi et rejouer ce tour :
[`../instance-jetable/README.md`](../instance-jetable/README.md).
- Pour la même visite côté Open WebUI, voir le
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ Le chatbot vu par l'API : c'est un document JSON qu'on lit, écrit et interroge

## Notebooks

- [`configurer-chatbots-par-l-api.ipynb`](configurer-chatbots-par-l-api.ipynb) — le chatbot est un document JSON
- [`donner-une-memoire-ephemere-au-chatbot-par-l-api.ipynb`](donner-une-memoire-ephemere-au-chatbot-par-l-api.ipynb) — les fichiers du chatbot, une mémoire éphémère
- [`parler-au-chatbot-en-visiteur-par-l-api.ipynb`](parler-au-chatbot-en-visiteur-par-l-api.ipynb) — la face navigateur de l'API
- [`joindre-un-fichier-au-chatbot-par-l-api.ipynb`](joindre-un-fichier-au-chatbot-par-l-api.ipynb) — ignoré, annoté, ou vraiment vu
- [`obtenir-des-donnees-structurees-par-l-api.ipynb`](obtenir-des-donnees-structurees-par-l-api.ipynb) — la case json, le fallback sans env et le null silencieux
- [`interroger-lassistant-de-lediteur-par-l-api.ipynb`](interroger-lassistant-de-lediteur-par-l-api.ipynb) — la quatrième face du plugin
- [`mesurer-la-derive-dun-copilot.ipynb`](mesurer-la-derive-dun-copilot.ipynb) — le gate par étape ne protège pas la chaîne
- [`configurer-chatbots-par-l-api.ipynb`](configurer-chatbots-par-l-api.html) — le chatbot est un document JSON
- [`donner-une-memoire-ephemere-au-chatbot-par-l-api.ipynb`](donner-une-memoire-ephemere-au-chatbot-par-l-api.html) — les fichiers du chatbot, une mémoire éphémère
- [`parler-au-chatbot-en-visiteur-par-l-api.ipynb`](parler-au-chatbot-en-visiteur-par-l-api.html) — la face navigateur de l'API
- [`joindre-un-fichier-au-chatbot-par-l-api.ipynb`](joindre-un-fichier-au-chatbot-par-l-api.html) — ignoré, annoté, ou vraiment vu
- [`obtenir-des-donnees-structurees-par-l-api.ipynb`](obtenir-des-donnees-structurees-par-l-api.html) — la case json, le fallback sans env et le null silencieux
- [`interroger-lassistant-de-lediteur-par-l-api.ipynb`](interroger-lassistant-de-lediteur-par-l-api.html) — la quatrième face du plugin
- [`mesurer-la-derive-dun-copilot.ipynb`](mesurer-la-derive-dun-copilot.html) — le gate par étape ne protège pas la chaîne
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ Le formulaire conditionnel vu par l'API : c'est un contenu WordPress, pas une ta

## Notebooks

- [`administrer-les-formulaires-par-l-api.ipynb`](administrer-les-formulaires-par-l-api.ipynb) — le formulaire est un contenu, pas une table
- [`auditer-un-formulaire-conditionnel.ipynb`](auditer-un-formulaire-conditionnel.ipynb) — l'état que vous ne voyez pas
- [`administrer-les-formulaires-par-l-api.ipynb`](administrer-les-formulaires-par-l-api.html) — le formulaire est un contenu, pas une table
- [`auditer-un-formulaire-conditionnel.ipynb`](auditer-un-formulaire-conditionnel.html) — l'état que vous ne voyez pas
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Cinq vector stores supportés (Chroma, Qdrant, Pinecone, OpenAI Vector Store, **

## Notebooks

- [`ingestion-corpus-long-rag.ipynb`](ingestion-corpus-long-rag.ipynb) — ingestion d'un corpus long structuré
- [`separer-les-environnements-de-vecteurs.ipynb`](separer-les-environnements-de-vecteurs.ipynb) — isoler les vector stores par environnement
- [`ingestion-corpus-long-rag.ipynb`](ingestion-corpus-long-rag.html) — ingestion d'un corpus long structuré
- [`separer-les-environnements-de-vecteurs.ipynb`](separer-les-environnements-de-vecteurs.html) — isoler les vector stores par environnement

→ détail et comparaison avec la pile RAG native d'Open WebUI dans la [section dédiée du comparatif](../../02-Comparatif/comparatif-owui-vs-ai-engine.md#rag-et-embeddings).
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ AI-Engine transforme WordPress en **serveur MCP** : des outils permission-aware

## Notebooks

- [`auditer-un-serveur-mcp.ipynb`](auditer-un-serveur-mcp.ipynb) — auditer un serveur MCP qu'on n'a pas écrit
- [`autour-du-consent-oauth-du-serveur-mcp.ipynb`](autour-du-consent-oauth-du-serveur-mcp.ipynb) — OAuth de bout en bout
- [`consommer-vs-exposer-le-mcp.ipynb`](consommer-vs-exposer-le-mcp.ipynb) — les deux sens du fil
- [`piloter-wordpress-par-mcp.ipynb`](piloter-wordpress-par-mcp.ipynb) — le serveur, pas l'API d'administration
- [`auditer-un-serveur-mcp.ipynb`](auditer-un-serveur-mcp.html) — auditer un serveur MCP qu'on n'a pas écrit
- [`autour-du-consent-oauth-du-serveur-mcp.ipynb`](autour-du-consent-oauth-du-serveur-mcp.html) — OAuth de bout en bout
- [`consommer-vs-exposer-le-mcp.ipynb`](consommer-vs-exposer-le-mcp.html) — les deux sens du fil
- [`piloter-wordpress-par-mcp.ipynb`](piloter-wordpress-par-mcp.html) — le serveur, pas l'API d'administration

→ terrain de comparaison avec les **Tools / MCP** d'Open WebUI dans la [section dédiée du comparatif](../../02-Comparatif/comparatif-owui-vs-ai-engine.md#mcp-server-natif).
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ Neuf providers distants + un connecteur auto-hébergé : la matrice environnemen

## Notebooks

- [`brancher-plusieurs-providers-par-l-api.ipynb`](brancher-plusieurs-providers-par-l-api.ipynb) — environnements et matrice d'usages
- [`eval-choisir-son-modele.ipynb`](eval-choisir-son-modele.ipynb) — une mini-évaluation reproductible
- [`presenter-ai-engine-par-son-api.ipynb`](presenter-ai-engine-par-son-api.ipynb) — le tour de l'API sur l'instance jetable Maison Valmont
- [`brancher-plusieurs-providers-par-l-api.ipynb`](brancher-plusieurs-providers-par-l-api.html) — environnements et matrice d'usages
- [`eval-choisir-son-modele.ipynb`](eval-choisir-son-modele.html) — une mini-évaluation reproductible
- [`presenter-ai-engine-par-son-api.ipynb`](presenter-ai-engine-par-son-api.html) — le tour de l'API sur l'instance jetable Maison Valmont
Original file line number Diff line number Diff line change
Expand Up @@ -24,75 +24,75 @@ précédent, et des **compagnons autonomes**, exploitables seuls.
Onze notebooks, dans l'ordre où la série les a construits : chaque étape
reprend la question laissée ouverte par la précédente.

1. [`presenter-ai-engine-par-son-api.ipynb`](03-5-Multi-Provider/presenter-ai-engine-par-son-api.ipynb)
1. [`presenter-ai-engine-par-son-api.ipynb`](03-5-Multi-Provider/presenter-ai-engine-par-son-api.html)
pose le socle : instance, catalogue des routes `mwai/v1`, première
completion réelle avec compte de tokens.

2. [`configurer-chatbots-par-l-api.ipynb`](03-1-Chatbots/configurer-chatbots-par-l-api.ipynb)
2. [`configurer-chatbots-par-l-api.ipynb`](03-1-Chatbots/configurer-chatbots-par-l-api.html)
traite les chatbots comme des **documents JSON** — lecture,
duplication, écriture read-modify-write — puis mesure honnêtement ce
que les instructions d'un persona changent, et ce qu'elles ne changent
pas.

3. [`administrer-les-formulaires-par-l-api.ipynb`](03-2-Forms/administrer-les-formulaires-par-l-api.ipynb)
3. [`administrer-les-formulaires-par-l-api.ipynb`](03-2-Forms/administrer-les-formulaires-par-l-api.html)
montre l'autre style d'API du plugin : le formulaire est un
**contenu** WordPress (custom post type `mwai_form`, CRUD unitaire,
corps Gutenberg, rendu public par shortcode) — et mesure la frontière
gratuite/Pro (du contenu rendu, pas encore des champs).

4. [`piloter-wordpress-par-mcp.ipynb`](03-4-MCP-Server/piloter-wordpress-par-mcp.ipynb)
4. [`piloter-wordpress-par-mcp.ipynb`](03-4-MCP-Server/piloter-wordpress-par-mcp.html)
ouvre la seconde face du plugin : **WordPress comme serveur MCP** —
endpoint JSON-RPC `mcp/v1/http`, handshake avec négociation de
version, catalogue de 43 outils à JSON Schema, et de vrais
`tools/call` en lecture puis en écriture — la frontière
d'authentification mesurée à 401 sur chaque méthode.

5. [`brancher-plusieurs-providers-par-l-api.ipynb`](03-5-Multi-Provider/brancher-plusieurs-providers-par-l-api.ipynb)
5. [`brancher-plusieurs-providers-par-l-api.ipynb`](03-5-Multi-Provider/brancher-plusieurs-providers-par-l-api.html)
ouvre la régie des **environnements** : la matrice
`ai_<usage>_default_env` lue et écrite par l'API, l'interrogation
d'un provider, le cycle déclarer/basculer/rétablir — et le piège
mesuré par accident : `settings/update` **ne met pas à jour, il
remplace**. La matrice croisée laisse des cases vides, dont la case
json.

6. [`parler-au-chatbot-en-visiteur-par-l-api.ipynb`](03-1-Chatbots/parler-au-chatbot-en-visiteur-par-l-api.ipynb)
6. [`parler-au-chatbot-en-visiteur-par-l-api.ipynb`](03-1-Chatbots/parler-au-chatbot-en-visiteur-par-l-api.html)
ouvre la troisième face, celle du **navigateur d'un visiteur
anonyme** (namespace `mwai-ui/v1`) : la page publique n'embarque
aucun jeton, l'amorçage passe par `start_session`, la conversation
par `chats/submit` au `X-WP-Nonce` — et la nuance : un nonce est un
anti-CSRF, pas une authentification.

7. [`obtenir-des-donnees-structurees-par-l-api.ipynb`](03-1-Chatbots/obtenir-des-donnees-structurees-par-l-api.ipynb)
7. [`obtenir-des-donnees-structurees-par-l-api.ipynb`](03-1-Chatbots/obtenir-des-donnees-structurees-par-l-api.html)
ferme la dernière veine « non prouvée » : la route `/ai/json`, qui
ignore `envId`/`model` et lit **la case json de la matrice d'usages**
laissée vide à l'étape 5. Le notebook reproduit l'erreur à froid,
remplit la case par read-modify-write, obtient du JSON réellement
exploitable, puis mesure honnêtement la promesse : le **null
silencieux** du parser PHP et la nature de la contrainte de format.

8. [`autour-du-consent-oauth-du-serveur-mcp.ipynb`](03-4-MCP-Server/autour-du-consent-oauth-du-serveur-mcp.ipynb)
8. [`autour-du-consent-oauth-du-serveur-mcp.ipynb`](03-4-MCP-Server/autour-du-consent-oauth-du-serveur-mcp.html)
reprend la question laissée ouverte par l'étape 4 : comment un client
tiers se connecte-t-il **sans les clés de l'admin** ? Serveur
d'autorisation OAuth 2.0 embarqué, enregistrement dynamique, PKCE,
consentement réservé aux administrateurs, code → token → appel MCP
réel au bearer délégué — puis révocation mesurée.

9. [`interroger-lassistant-de-lediteur-par-l-api.ipynb`](03-1-Chatbots/interroger-lassistant-de-lediteur-par-l-api.ipynb)
9. [`interroger-lassistant-de-lediteur-par-l-api.ipynb`](03-1-Chatbots/interroger-lassistant-de-lediteur-par-l-api.html)
complète le tour des **quatre faces** du plugin — admin, agent,
visiteur, éditeur — par celle de celui qui écrit : la route
`mwai-ui/v1/editor/submit`, dont le contrat se découvre par les
refus, et où la frontière gratuite/Pro est inscrite dans la réponse
elle-même. La route est stateless : le tour isolé oublie, le tour qui
re-apporte `messages` souvient.

10. [`donner-une-memoire-ephemere-au-chatbot-par-l-api.ipynb`](03-1-Chatbots/donner-une-memoire-ephemere-au-chatbot-par-l-api.ipynb)
10. [`donner-une-memoire-ephemere-au-chatbot-par-l-api.ipynb`](03-1-Chatbots/donner-une-memoire-ephemere-au-chatbot-par-l-api.html)
ouvre la cinquième surface : la famille `mwai-ui/v1/files/*`, celle
des **pièces jointes** — éphémères par architecture (TTL d'une heure
prouvé par soustraction), partitionnées par utilisateur, avec le
miroir admin `mwai/v1/openai/files/*`. Le stockage est fait ; la
question devient son usage.

11. [`joindre-un-fichier-au-chatbot-par-l-api.ipynb`](03-1-Chatbots/joindre-un-fichier-au-chatbot-par-l-api.ipynb)
11. [`joindre-un-fichier-au-chatbot-par-l-api.ipynb`](03-1-Chatbots/joindre-un-fichier-au-chatbot-par-l-api.html)
ferme le dossier pièces jointes par la question qui suit le
stockage : **comment un fichier téléversé entre-t-il dans une
completion ?** La réponse mesurée est un drame en trois actes — le
Expand All @@ -103,25 +103,25 @@ reprend la question laissée ouverte par la précédente.

Sept notebooks de ce niveau se lisent seuls, sans suivre la chaîne :

- [`eval-choisir-son-modele.ipynb`](03-5-Multi-Provider/eval-choisir-son-modele.ipynb)
- [`eval-choisir-son-modele.ipynb`](03-5-Multi-Provider/eval-choisir-son-modele.html)
— cinq propriétés discriminantes contre n'importe quel endpoint
compatible OpenAI, en stdlib pur sans clé ni réseau : « je l'ai
essayé, il répond bien » devient un tableau reproductible.
- [`ingestion-corpus-long-rag.ipynb`](03-3-RAG-et-Embeddings/ingestion-corpus-long-rag.ipynb)
- [`ingestion-corpus-long-rag.ipynb`](03-3-RAG-et-Embeddings/ingestion-corpus-long-rag.html)
— découper un catalogue avant de l'indexer : la dégradation du
retrieval vient du chunking, pas de l'embedder.
- [`separer-les-environnements-de-vecteurs.ipynb`](03-3-RAG-et-Embeddings/separer-les-environnements-de-vecteurs.ipynb)
- [`separer-les-environnements-de-vecteurs.ipynb`](03-3-RAG-et-Embeddings/separer-les-environnements-de-vecteurs.html)
— fuite cross-environnement et accident de réindexation, mesurés sur
un vector store partitionné.
- [`auditer-un-serveur-mcp.ipynb`](03-4-MCP-Server/auditer-un-serveur-mcp.ipynb)
- [`auditer-un-serveur-mcp.ipynb`](03-4-MCP-Server/auditer-un-serveur-mcp.html)
— un serveur MCP utile expose les verbes du métier, pas les tables.
- [`consommer-vs-exposer-le-mcp.ipynb`](03-4-MCP-Server/consommer-vs-exposer-le-mcp.ipynb)
- [`consommer-vs-exposer-le-mcp.ipynb`](03-4-MCP-Server/consommer-vs-exposer-le-mcp.html)
— les deux sens du fil : chevauchement cross-catalogue, redondance
d'écriture dangereuse.
- [`auditer-un-formulaire-conditionnel.ipynb`](03-2-Forms/auditer-un-formulaire-conditionnel.ipynb)
- [`auditer-un-formulaire-conditionnel.ipynb`](03-2-Forms/auditer-un-formulaire-conditionnel.html)
— un formulaire à branchement est une machine à états implicite :
sept champs engendrent treize états.
- [`mesurer-la-derive-dun-copilot.ipynb`](03-1-Chatbots/mesurer-la-derive-dun-copilot.ipynb)
- [`mesurer-la-derive-dun-copilot.ipynb`](03-1-Chatbots/mesurer-la-derive-dun-copilot.html)
— le gate humain à chaque étape ne protège pas la chaîne : des
destructrices complémentaires perdent la moitié du document.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ des constats, pas par symétrie d'arborescence.

## Le parcours — ce qu'il mesure

[`00-Parcours-QA-AI-Engine.ipynb`](00-Parcours-QA-AI-Engine.ipynb) suit
[`00-Parcours-QA-AI-Engine.ipynb`](00-Parcours-QA-AI-Engine.html) suit
un escalier de quatre paliers sur un indicateur témoin,
`module_workspace` :

Expand Down Expand Up @@ -144,7 +144,7 @@ grep -nE "Bearer |password|localhost:80(8|9)[0-9]" 00-Parcours-QA-AI-Engine.ipyn
- [`../00-Tour-Plateforme/README.md`](../00-Tour-Plateforme/README.md) —
le tour guidé de l'interface, où ce comportement a été rencontré pour
la première fois, au détour d'une capture
- [`../parler-au-chatbot-en-visiteur-par-l-api.ipynb`](../03-Functional/03-1-Chatbots/parler-au-chatbot-en-visiteur-par-l-api.ipynb)
- [`../parler-au-chatbot-en-visiteur-par-l-api.ipynb`](../03-Functional/03-1-Chatbots/parler-au-chatbot-en-visiteur-par-l-api.html)
— dernier grain de la série « par son API », qui épuisait les faces
atteignables sans navigateur
- [`../../Open-WebUI/Playwright-OWUI/README.md`](../../Open-WebUI/Playwright-OWUI/README.md)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ du dépôt.

## Notebooks

- [`auditer-la-conformite-visuelle.ipynb`](auditer-la-conformite-visuelle.ipynb) —
- [`auditer-la-conformite-visuelle.ipynb`](auditer-la-conformite-visuelle.html) —
smoke test structurel vs conformité visuelle : contraste WCAG, primaires
Bootstrap, affordance des CTA. Quatre pages synthétiques portant une
violation délibérée chacune, trois détecteurs dédiés, et la démonstration
Expand Down
Loading
Loading