Documentation fonctionnelle de l'assistant IA integre dans l'editeur rich text (documentation v3).
L'editeur rich text (RichEditor) dispose d'un bouton Assistant IA dans son ribbon. Ce bouton ouvre une modale permettant de generer du contenu HTML via l'IA, puis de l'integrer directement dans l'editeur.
Le workflow se deroule en 3 etapes :
Le bouton IA apparait dans le groupe IA du ribbon de l'editeur rich text, sous forme d'un bouton avec l'icone fa-solid fa-wand-magic-sparkles.
Au clic, une modale s'ouvre avec le composant Livewire ai.rich-editor-ai-chat.
L'utilisateur voit deux sections en accordions :
| Section | Etat par defaut | Contenu |
|---|---|---|
| Recommande | Ouvert | Prompts dont le slug est dans la liste des recommandes (boutons bleus) |
| Autres assistants | Ferme | Tous les autres prompts accessibles (boutons gris) |
Les prompts recommandes sont definis par leurs slugs :
documentation-generatoractualite-generatorSeuls les prompts actifs et accessibles par l'entite de l'utilisateur sont affiches.
Apres avoir selectionne un prompt, l'utilisateur choisit un modele IA :
| Section | Etat par defaut | Contenu |
|---|---|---|
| Recommande | Ouvert | Modeles avec bldefault = true (boutons bleus + badge provider) |
| Parametres avances | Ferme | Autres modeles actifs (boutons gris + badge provider) |
Si le prompt selectionne est lie a un provider specifique (idprovider), seuls les modeles de ce provider sont proposes. Sinon, tous les modeles actifs de tous les providers actifs sont affiches.
Si aucun modele n'a bldefault = true, le premier modele est automatiquement place dans la section "Recommande".
| Element | Description |
|---|---|
| Checkbox "Inclure le contenu actuel" | Active par defaut. Envoie le contenu de l'editeur comme contexte a l'IA |
| Zone de texte | Description de ce que l'utilisateur souhaite generer |
| Bouton Generer | Lance la generation (desactive si le message est vide) |
Un skeleton de contenu s'affiche (titres, paragraphes simulees) avec un spinner.
Le contenu HTML genere est affiche dans une zone de previsualisation (max 500px de hauteur, scrollable).
Trois actions sont disponibles :
| Action | Comportement |
|---|---|
| Regenerer | Relance la generation avec les memes parametres |
| Ajouter en dessous | Insere le contenu a la suite du contenu existant dans l'editeur |
| Remplacer la documentation | Remplace tout le contenu de l'editeur (avec dialogue de confirmation) |
AiLimitReachedException), le message d'erreur du quota s'afficheLe contenu retourne par l'IA passe par un pipeline de nettoyage (cleanHtmlContent) :
strip_tags), il est converti en HTML via Str::markdown()<style> et <script> sont supprimes avec leur contenu<code> est echappe pour eviter l'interpretation navigateurDOMDocument corrige les balises HTML non fermeesDOMDocument echoue, un nettoyage basique supprime les balises DOCTYPE, html, head, body, metaLe system prompt inclut des regles de formatage obligatoires pour que l'IA genere du HTML compatible avec l'editeur :
<div> racineDOCTYPE, html, head, body, style, script<code>| Fichier | Role |
|---|---|
app/Livewire/Ai/RichEditorAiChat.php |
Composant Livewire (logique 3 etapes) |
resources/views/livewire/ai/rich-editor-ai-chat.blade.php |
Vue Blade (accordions Onyx, skeleton, formulaire) |
app/Livewire/RichEditor.php |
Composant RichEditor parent |
resources/views/livewire/rich-editor.blade.php |
Vue de l'editeur (ribbon + zone d'edition) |
public/assets/css/rich-editor.css |
Styles CSS du panneau AI et de l'editeur |
| Evenement | Direction | Description |
|---|---|---|
modalOpen |
Editor -> Modal | Ouvre la modale avec les parametres du composant |
richEditorAiInsert |
AiChat -> Editor | Insere le contenu genere (mode append ou replace) |
modalClose |
AiChat -> Modal | Ferme la modale apres integration |
pushNotifyCustom |
AiChat -> UI | Notification de succes |
La generation utilise AiManager pour communiquer avec les providers IA :
$model->idprovider)Les prompts sont geres dans Administration > IA > Prompts. Pour qu'un prompt apparaisse dans l'assistant rich editor :
blactive = true)_id ou AiPromptEntity)lbcontext n'a pas d'impact sur l'affichage (tous les contextes sont visibles)Pour qu'un prompt apparaisse dans la section "Recommande", son lbslug doit etre documentation-generator ou actualite-generator.
Pour qu'un modele apparaisse dans la section "Recommande", il doit avoir bldefault = true.
Les providers doivent etre actifs pour que leurs modeles soient proposes.