I think we should either make the icon look nice OR put the MR on hold.
I tested with a fresh installation of Drupal CMS:
mkdir my-drupal-site && cd my-drupal-site
ddev config --project-type=drupal11 --docroot=web
ddev start
ddev composer create-project drupal/cms
Launch the website and setup without any additional functionality.
Add ai and a provider:
ddev composer require drupal/ai
ddev composer require drupal/ai_provider_openai
ddev drush en ai_provider_openai
Configure chat assistant and place block in content section with styling setting 'Toolbar'
When you visit the page, the chat shows nicely in the toolbar:
The only difference I can see, is that the chat is initially vertically centered. I am not sure if this is correct. In the design it is aligned on top.
Here is a screen recording: https://www.drupal.org/files/issues/2025-11-21/Home-Drupal-CMS-2025-11-21.mp4 →
Now, when I apply the MR from the issue, I see the AI button has changed to an icon (like canvas). AFAIK, the icon is too big. Personally, I like the button more than the icon.
Here is a recording with the MR: https://www.drupal.org/files/issues/2025-11-21/Home-Drupal-CMS-2025-11-21%20%281%29.mp4 →
This is a good idea. The list of "Official AI Recipes" should not live in the dashboard module, it should live in the AI module itself.
A similar mechanism should be established for "Official AI Modules".
However, I suggest to tackle this mechanism a bit later, because we want to get to speed first. Once we have the dashboard with "Official AI Recipes" running and we have a plan how to select and show "Official AI Modules", we can refactor it and for example place the functionality or yaml files in the AI module.
The dashboard will be created in this contrib module: https://www.drupal.org/project/ai_dashboard →
The related issue was updated, we are progressing, checkout the latest comment 📌 [Metag] UX concept for AI Dashboard / Status Page / Kickstarter Active .
We are reaching a first version of AI overview page. This is what it looks like:
The Figma wireframe is discussed in this related issue 📌 [Metag] UX concept for AI Dashboard / Status Page / Kickstarter Active .
This does not affect the related issue. It is rather a requirement for AI recipes, that they must include useful error handling for missing models / operations.
If this can be verified before, the recipe can be de-activated (greyed out). Otherwise a sensible error message should be shown if the user tries to install a recipe.
The same mechanism should be implemented on the recipe page withing Drupal CMS.
Steps 1-2 are sort of required, because without AI key and providers you cannot use it. The others are optional. So it is a mixutre, I see it more as a recommeded first steps. Also, the completeness it not determinstic (the circles on the right). One enabled and configured provider could also be a full circle.
@pdjohson - I created the content for you: https://docs.google.com/document/d/179hlPrX-wBjvfORlPlMwW_iXd-V3zMCBKwz2.... Feel free to use as is, or adapt to your liking.
Hello @mxr576 - you are right, we need a better solution, the menu can contain all kinds of links (not only to nodes).
UX / Concept is created in this related issue 📌 [Metag] UX concept for AI Dashboard / Status Page / Kickstarter Active . Setting to postponed, until we have clear concept.
Let's take a proper round of UX, then we implement the best solution.
breidert → created an issue. See original summary → .
- Workshop - Start with Drupal and AI. Up and running with the AI ecosystem in Drupal in no time.
- Speaker(s): Christoph Breidert (breidert), Frederik Wouters (Wouters_f)
- Drupal AI Workshop Slides
I tested the functionality in detail and it works great !
However, I found a small error:
The content sections in /llms.txt correctly show the links as Markdown links (.md appended to the URL). However, the menu links do not show Markdown links (.md missing in the URL)
Testing steps:
- Setup Drupal CMS without any additional settings
- Require recipe:
$ ddev composer require drupal/ai_recipe_llm_optimized_content - Apply recipe:
$ ddev drush recipe ../recipes/ai_recipe_llm_optimized_content - Checkout settings and
/llms.txt - Add new page and add to menu and observe the change in
/llms.txt - Add blog post content type to Drupal CMS via project browser (
/admin/modules/browse/recipes) - Add LLMs.txt content section called 'Blog' with some description
- Create blog post, and add to content section 'Blog'
- Observe that
/llms.txtnow contains a new section with the blog - Enable footer section and observe footer links in
/llms.txt
After completing the steps /llms.txt looks like this:
# Demo Website
Cool website slogan
## Main menu
- [Blog](https://drupal-cms.ddev.site/blog)
- [Demo Page](https://drupal-cms.ddev.site/demo-page)
- [Home](https://drupal-cms.ddev.site/)
## Blog
Blog articles.
- [A celebration of Drupal and open-source contributions](https://drupal-cms.ddev.site/blog/2025-01/celebration-drupal-and-open-source-contributions.md)
The Drupal project continues to serve as a model for open-source collaboration, powered by a global community of contributors. With more than 100,000 contributors from around the globe, the project highlights the transformative impact of open-source on the digital landscape.
- [Cool Blog post](https://drupal-cms.ddev.site/blog/2025-10/cool-blog-post.md)
Y, viéndole don Quijote de aquella manera, con muestras de tanta tristeza, le dijo: Sábete, Sancho, que no es un hombre más que otro si no hace más que otro. Todas estas borrascas que nos suceden son señales de que presto ha de serenar el tiempo y han de sucedernos bien las cosas; porque no es posible que el mal ni el bien sean durables, y de aquí se sigue que, habiendo durado mucho el mal, el bien está ya cerca. Así que, no debes congojarte por las desgracias que a mí me suceden, pues a ti no te cabe parte dellas.Y, viéndole don Quijote de aquella manera, con muestras de tanta tristeza, le dijo: Sábete, Sancho, que no es un hombre más que otro si no hace más que otro.
## Footer menu
- [Privacy policy](https://drupal-cms.ddev.site/privacy-policy)
First content was created: https://www.drupal.org/project/ai_recipe_content_classification →
Content styling was updated on AI Image Classification project page → .
Design of project page will happen in child issue #3549923: Create design of Image Classification Product Page →
The bulk operation will be handled in a child issue #3549922: Create bulk operation for image classification → .
Recipe was updated, it now has descriptions for the new fields.
Recipe project → page was updated. Design and layout is needed.
This works nicely and was tested here 🌱 [Meta] AI Image Classification Active
It works as expected
When you apply the recipe you get the following functionality automatically configured:
* Media type image has AI alt text configured using "Field widget actions"
* Media type image has the additional fields "Image Description" and "Image Tags" which are automatically filled out using AI automators
Steps for testing:
mkdir my-drupal-site && cd my-drupal-site
ddev config --project-type=drupal11 --docroot=web
ddev start
ddev composer create-project "drupal/recommended-project:^11"
ddev composer require drush/drush
ddev drush site:install --account-name=admin --account-pass=admin -y
ddev launch
ddev composer require 'drupal/ai:^1.2@RC'
ddev composer require drupal/token
ddev composer require 'drupal/ai_provider_openai:^1.1'
git clone git@git.drupal.org:project/ai_recipe_image_classification.git recipes/
ddev drush en ai token ai_provider_openai
Setup OpenAI via UI and leave default settings.
ddev drush recipe ../recipes/ai_recipe_image_classification
ddev drush recipe ../recipes/ai_recipe_image_classification
8/8 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓]
Applied AI Image Classification recipe recipe.
[OK] AI Image Classification recipe applied successfully
I tested but get an error.
Steps to reproduce:
mkdir my-drupal-site && cd my-drupal-site
ddev config --project-type=drupal11 --docroot=web
ddev start
ddev composer create-project "drupal/recommended-project:^11"
ddev composer require drush/drush
ddev drush site:install --account-name=admin --account-pass=admin -y
ddev launch
ddev composer require drupal/ai:"1.2.0-beta1"
ddev composer require drupal/token
git clone git@git.drupal.org:project/ai_recipe_image_classification.git recipes/
ddev drush en ai token
ddev composer require 'drupal/ai_provider_openai:^1.1'
Setup OpenAI via UI and configure GPT-4 for all default settings.
ddev drush recipe ../recipes/ai_recipe_image_classification
7/7 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓]
Applied AI Image Classification recipe recipe.
[OK] AI Image Classification recipe applied successfully
Upload and save image (manually enter alt text)
Error message:
Referrer https://my-drupal-site.ddev.site/media/1/edit?destination=/admin/content/media
Message Error invoking model response: Invalid content type. image_url is only supported by certain models.
No stack trace.
Features:
Limit llms.txt to default language (multilingual we do later): [# https://www.drupal.org/project/llm_support/issues/3548950] →
Populate llms.txt with sensible default values:
- Meta description of startpage with fallback to site slogan
- Main Menu
- View with included pages
Todo:
Create tokens, view, and field "Include in llms.txt" as base field
Implementation idea: Create a custom field using https://www.drupal.org/project/custom_field → with two values and an automator to populate this field.
In the first iteration the recipe should only have a button to create an alt text.
However, it would be nice if it also came with a a views bulk operation, to generate multiple alt texts.
breidert → created an issue.
breidert → created an issue.
breidert → created an issue. See original summary → .
Design work is done in this issue: [Meta] - UX / Design Conversational Interface 📌 [Meta] - UX / Design Conversational Interface Active
Commenting on here as requested in the slack message.
Based on the last conversation about chat placements and options we concluded the following for the "Fullscreen Icon of the chat":
Chats can be place via blocks. The chat placement block will have the following position settings:
- Sticky: Right or Left
- Inline
- Sidebar: Expand or Fullscreen or None
When sidebar is selected the chat appears as in the screenshot. The screenshot shows the full screen setting, in which the chat opens on a modal. Note we still chose to name it "Fullscreen" because this is more common terminology. If "Expand" is chose an expander icon is show which simply increases and resets the width of the sidebar. Potentially both settings have more options like pixels or percent. We are also considering a setting to automatically set the chat to fullscreen, if the response has a certain length. This is useful if the response does not fit into the sidebar. However, this is not relevant to the wireframe. If "None" no icon is shown.
The screenshot is based on the L&F of the Figma wireframe available here.
I was also thinking about the last part of the sentence ...can be created from ground up.
@thomas.Wardin → - Do you have a better suggestion for the whole sentence?
Existing pages can be reused as templates, or dedicated templates can be created from the ground up.
The text was changed from
Content templates module provides a user-friendly and flexible solution for creating and managing custom templates to control the layouts of content (nodes) and streamline editorial workflow. It allows site administrators and content editors to create visually appealing templates for different types of content tailored to specific target audiences. Templates can be easily created from existing nodes and can be customised later on. With a single click, new content is created from a template, and a reference to the template is retained for easy retrieval of all nodes created from specific templates.
to
Content templates module provides an intuitive and flexible way to create and manage custom templates based on existing content (nodes). Existing pages can be reused as templates, or dedicated templates can be created from the ground up. This enables site administrators and content editors to design templates for different use cases. Templates can be organized by topic, and new content can be generated from a template with a single click. Each new page keeps a reference to the template it was created from, making it easy to retrieve and manage all content associated with a specific template.
The relevant sentence that was confusing was changed to ... to create and manage custom templates based on existing content (nodes). Existing pages can be reused as templates, or dedicated templates can be created ...
kristen pol → credited breidert → .
valthebald → credited breidert → .
breidert → created an issue.
Sounds interesting
A first version of the report was created and is reviewed internally. Feedback from Paul, Baddý, and Dries was requested.
Design and layout of the report have started.
kristen pol → credited breidert → .
valthebald → credited breidert → .
First draft is in this Google-Doc.
breidert → created an issue.
kristen pol → credited breidert → .
I tested locally. Of course it would be better to disable the button, if no text is selected and show a tooltip. But I think it is good for now.
Before:
After:
Add skill tags for issue discovery