# Prompt log — 24h 2026-09-10 ======================================================================== ## [1] summariseModule:ai:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI (Artificial Intelligence) (machine name: ai) Reporting period: last 24h (2026-09-10T12:08:50+00:00 to 2026-09-11T12:08:50+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Abhisek Mazumdar (abhisekmazumdar), Artem Dmitriiev (a.dmitriiev), Dezső Biczó (mxr576), Juan Correa (jucs7), Petar Bašić (petar_basic), Sven Decabooter (svendecabooter)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

AI (Artificial Intelligence)

then use

,

,

    /
  • , and as needed. Output only the HTML fragment with no surrounding , , or
    tags. After the project summary prose, add a single subsection titled "

    How can I help on this project?

    " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [LLM: Metatag generates and stores tags that were never configured, and keeps only one of them](https://git.drupalcode.org/project/ai/-/work_items/3586723) State: opened | Updated: 2026-09-11 | Author: Ahmad Khader (Ahmad-Khader) | Assigned: unassigned | Labels: category::bug, priority::normal, state::rtbc Description: ## Summary Two defects in the Metatag automator, both independent of the decoding regression fixed in #3586713 and both invisible until that one is fixed, because until then nothing was stored at all. 1. **Every tag is offered to the model, not the configured ones.** `extraAdvancedFormFields()` renders a textarea for every tag Metatag knows about, so the saved configuration carries a key for all of them. `generate()` builds its "available tags" list from those keys rather than from the ones holding a subprompt. The form is explicit that an empty one means *"Keep empty to not generate anythin… ### [Allow Field Widget Actions to target a specific automator 2.x](https://git.drupalcode.org/project/ai/-/work_items/3586657) State: opened | Updated: 2026-09-11 | Author: Artem Dmitriiev (a.dmitriiev) | Assigned: unassigned | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, ai::inside Description: Port changes from issue https://git.drupalcode.org/project/ai/-/work_items/3571915 to 2.x and 2.0.x branches ### [Review AI issue process and tagging based on recent usage and update docs](https://git.drupalcode.org/project/ai/-/work_items/3550025) State: opened | Updated: 2026-09-11 | Author: drupalbot | Assigned: unassigned | Labels: category::task, documentation, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [kristen pol](https://www.drupal.org/user/8389) >>> Problem/Motivation Review the docs and figure out what needs changing based on how we've been using tags/etc: https://project.pages.drupalcode.org/ai/1.1.x/contribute/issue_guidelines Proposed resolution Update docs as necessary Remaining tasks Review, tweak, review, commit > Related issue: [Issue #3540998](https://www.drupal.org/node/3540998) ### [Create AI assistant API session only after the first message](https://git.drupalcode.org/project/ai/-/work_items/3554797) State: opened | Updated: 2026-09-11 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, aiAssistantsApi, category::bug Description: >>> [!note] Migrated issue Reported by: [omarlopesino](https://www.drupal.org/user/2853043) Related to !978 >>> Problem/Motivation Currently, when the chatbot is added in the site for anonymous users, a new session is started in order to create the thread. This is necessary, but it can be optimized. Creating a session invalidates reverse proxy caches like Varnish or any kind of CDN, decreasing the site's performance. The session may be only created after the first interaction with the chatbot. Steps to reproduce (required for bugs, but not feature requests) Create an assistant with AI a… ### [Add interactive refinement capability to Field Widget Actions 2.x](https://git.drupalcode.org/project/ai/-/work_items/3586655) State: closed | Updated: 2026-09-11 | Author: Artem Dmitriiev (a.dmitriiev) | Assigned: unassigned | Labels: 2026Sprint16, 2026Sprint18, ai::inside, aiAutomators Description: This issue is for cherry-picking / porting the changes from related issue to 2.x. As in 2.x the way ai_automator works was slightly change, it is not a straightforward cherry-pick. MR to port/cherry-pick https://git.drupalcode.org/project/ai/-/merge_requests/1629 ### [Automator FWA buttons give no user feedback when values don't visibly change](https://git.drupalcode.org/project/ai/-/work_items/3585987) State: opened | Updated: 2026-09-11 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, On hold Description: >>> [!note] Migrated issue Reported by: [petar_basic](https://www.drupal.org/user/3626336) >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: [One-line issue summary for stakeholders] Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation When an editor clicks a Field Widget Action (FWA) button backed by an ai_automator, the AJAX call runs, the throbber appears and disappears, but there is no user feedback confirming that the automator actually ran. This is especially visible on th… ### [Restrict access to the AI API Explorer permission](https://git.drupalcode.org/project/ai/-/work_items/3586733) State: opened | Updated: 2026-09-11 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Prabhavathi Vanipenta (prabha1997) | Labels: Novice, Quick Win, Release blocker, aiApiExplorer Description: The AI API Explorer is a pure developer tool, but its `access ai prompt` permission is not marked as security-sensitive. Anyone holding it can invoke AI providers directly, and with provider function calling being added it becomes a way to exercise function calls outside the access checks of the features that normally wrap them. That is a meaningful attack surface if the permission is ever granted to a non-developer role. Proposed change in `modules/ai_api_explorer/ai_api_explorer.permissions.yml`: ```yaml access ai prompt: title: 'Permit access to using the AI API Explorer.' description… ### [SetupVdbServer and SetupVdbIndex config actions aren't idempotent, recipe re-apply fails](https://git.drupalcode.org/project/ai/-/work_items/3586729) State: opened | Updated: 2026-09-10 | Author: Abhisek Mazumdar (abhisekmazumdar) | Assigned: Ahmad Khalil (ahmad-khalil-imagex) | Labels: AI Initiative Sprint, ai::inside, category::bug, priority::normal Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !2000 [fix: #3586729 Add existence checks to `SetupVdbServer` and `SetupVdbIndex` config actions](https://git.drupalcode.org/project/ai/-/merge_requests/2000) | State: opened | Author: Abhisek Mazumdar (abhisekmazumdar), 441 diff lines Description: ## Problem/Motivation `SetupVdbServer::apply()` and `SetupVdbIndex::apply()` both call `->create($value)->save()` unconditionally, with no check for whether the target entity already exists: ```php // SetupVdbServer.php, line 111-113 $this->entityTypeManager->getStorage('search_api_server') ->create($value) ->save(); ``` ```php // SetupVdbIndex.php, line 53-55 $this->entityTypeManager->getStorage('search_api_index') ->create($value) ->save(); ``` Any recipe that uses these config actions (e.g. `ai_recipe_content_search_vector`) can't be applied twice on the same site. Re-applying i… ### [Adding Disable Option for AI Automators](https://git.drupalcode.org/project/ai/-/work_items/3508800) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: aiAutomators, category::feature, priority, priority::normal Description: >>> [!note] Migrated issue Reported by: [vakulrai](https://www.drupal.org/user/3524052) Related to !490 >>> Problem/Motivation While working on the AI automator's i felt there is no way we could disable the automator configured on a field , rather than we have to go to edit the field and remove the automator checkbox in order to remove from the automator chain. the drawback i see is admin's have to reconfigure the same set of changes again if they later on enable the same features. Is it a good idea to add this feature and make sure admins can enable and disable the automator's by clickin… ### [Bug — the "Content Entity Seeder" tool generates a JSON Schema with one extra array level and breaks when creating/editing content](https://git.drupalcode.org/project/ai/-/work_items/3586732) State: opened | Updated: 2026-09-10 | Author: Bruno Carvalho (brunocarvalho) | Assigned: unassigned | Labels: category::bug, priority::normal, state::accepted Description: ### **Environment** | **Item** | **Value** | |----------|-----------| | Drupal | 11.4.6 | | PHP | 8.4 | | `drupal/ai` | 1.4.8 | | `drupal/ai_agents` | 1.3.5 (the same `execute()` is present on the `1.4.x` branch / `1.4.0-beta1`) | | Provider / model | OpenAI `gpt-5.4` (via `ai_provider_openai` 1.2.5) | | Tool | `ai_agent:content_entity_seeder` → `Drupal\ai_agents\Plugin\AiFunctionCall\ContentEntitySeeder` | --- ### **Description** `ContextDefinitionNormalizer` wraps the `ContentEntitySeeder`'s `entity_array` parameter in one extra array level (`multiple` + `ComplexToolItems` applied togeth… ### [textToImage() base64-decodes the image payload twice](https://git.drupalcode.org/project/ai/-/work_items/3586730) State: opened | Updated: 2026-09-10 | Author: Sven Decabooter (svendecabooter) | Assigned: unassigned | Labels: aiCoreModule, category::bug, priority::major, state::accepted Description: ## Summary `OpenAiBasedProviderClientBase::textToImage()` calls `base64_decode()` a second time on data it has already decoded, so the `ImageFile` it returns holds corrupt bytes instead of the generated image. The failure is silent: the mime-type guard immediately above inspects the *correct* bytes and passes, and the corrupt bytes are handed out afterwards, so callers get a successful response and write unusable files. The same line also throws away the mime type it just validated in favour of a hardcoded `image/png`. This is a regression. Before commit bc860ac9 ("Let providers select allow… ### [Regression in ai_translate: Layout Builder content is no longer translated](https://git.drupalcode.org/project/ai/-/work_items/3586731) State: opened | Updated: 2026-09-10 | Author: Sven Decabooter (svendecabooter) | Assigned: unassigned | Labels: No Estimation Available, category::bug, priority::critical, translation Description: This issue has been reported in the standalone version of ai_translate module, but the ai_translate module that ships as a submodule within this module is also affected by this: https://git.drupalcode.org/project/ai_translate/-/work_items/3585553 Once a 1.3.x fix for this issue exists in standalone ai_translate, it should probably be backported here as well. Feel free to review / help move the original issue forward, so a fix can be quickly applied here as well. ### [Streaming chat forces plain-text hostname filtering, corrupting URLs inside HTML attributes (e.g., href="")](https://git.drupalcode.org/project/ai/-/work_items/3586624) State: opened | Updated: 2026-09-10 | Author: Ron Raney (rraney) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, On hold, ai::inside Description: **Problem/Motivation** `StreamChatMessageIteratorTrait::getHostnameFilterService()` forces `HostnameFilter::setPlainTextMode(TRUE)` whenever code isn't running inside a PHP Fiber (which is the normal case for typical request-based streaming consumers, e.g. AI CKEditor's Reformat/Modify tools). With plain-text mode forced on, `HostnameFilter::filterText()` skips the HTML-aware filtering branch and instead runs `filterUrlsInPlainText()` — a raw regex substring replace across the entire response text, with no awareness of HTML structure. When AI-processed content contains an `` tag pointing to … --- MERGE REQUESTS (24h) --- ### [Issue #3586657: Allow Field Widget Actions to target a specific automator 2.x](https://git.drupalcode.org/project/ai/-/merge_requests/1999) State: opened | Author: Juan Correa (jucs7) | Branch: 3586657-allow-field-widget-actions-target-specific-automator-2x | 185 diff lines Description: ## Description **Changes:** - `AiAutomatorEntityModifier::saveEntity()` gains an optional `$specificAutomatorId` parameter. When set, processing is filtered to the matching automator config entity ID before any processor runs. - Unlike 1.x, 2.x's `entityHasAutomators()` already returns automators keyed by config entity ID and sorts them with a key-preserving `uasort()`, so the filter here operates directly on that keyed array instead of 1.x's `array_filter()` placed before a key-destroying `usort()`. - Added `testSaveEntityFiltersBySpecificAutomatorId()` and `testSaveEntityReturnsNullForUnma… ### [Issue #3586655: "Add interactive refinement capability to Field Widget Actions 2.x"](https://git.drupalcode.org/project/ai/-/merge_requests/2002) State: merged 2026-09-11 | Author: Artem Dmitriiev (a.dmitriiev) | Branch: cherry-pick-3d89b17d | 2979 diff lines Description: ## Description ## Testing instructions 1. 2. ## Checklist - [ ] I have linked the related issue in the MR title or description - [ ] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, cache rebuilds, manual changes) - [ ] This MR contains no breaking API or hook changes, or the… ### [feat: #3585987 by petar.basic: Add status message after AI Field Widget Action automator runs.](https://git.drupalcode.org/project/ai/-/merge_requests/1540) State: opened | Author: Petar Bašić (petar_basic) | Branch: 3585987-add-feedback-message | 79 diff lines Description: Closes #3585987 ### [Issue #3586655: "Add interactive refinement capability to Field Widget Actions 2.x"](https://git.drupalcode.org/project/ai/-/merge_requests/1966) State: merged 2026-09-11 | Author: Juan Correa (jucs7) | Branch: 3586655-add-interactive-refinement-capability-to-field-widget-actions-2x | 2967 diff lines Description: ## Summary Ports the interactive refinement capability for Field Widget Actions Automation from `1.x` (issue #3586468, MR !1629) to `2.x`. As noted in the issue, this was **not** a straight cherry-pick: in `2.x` an `ai_automator` config entity holds an `automator_types` **plugin collection** (each entry its own configured plugin instance) instead of `1.x`'s flat `rule` + `plugin_config`. The port re-implements the same feature against that architecture. ### Changes - **New `Traits/AutomatorFieldWidgetActionTrait.php`** , extracted from `AutomatorBaseAction` so both it and the new `Automato… ### [Draft: fix: Fix AI Settings form to display AI Platforms and Inference Providers](https://git.drupalcode.org/project/ai/-/merge_requests/1901) State: opened | Author: Dezső Biczó (mxr576) | Branch: 3586631-ai-platform-providers-does-not-appear-in-ai-default-settings | 60 diff lines Description: ## Description Closes #3586631 ## TODO - [ ] Test coverage ## Testing instructions 1. 2. ## Checklist - [ ] I have linked the related issue in the MR title or description - [ ] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, cache rebuilds, manual changes) - [ ] This MR co… ### [bug: #3586730 textToImage() base64-decodes the image payload twice](https://git.drupalcode.org/project/ai/-/merge_requests/2001) State: opened | Author: Sven Decabooter (svendecabooter) | Branch: 3586730-texttoimage-base64-decodes-the-image-payload-twice | 189 diff lines Description: ## Description Closes #3586730. `OpenAiBasedProviderClientBase::textToImage()` decoded the `b64_json` payload twice, so the `ImageFile` it returned held bytes that are not an image. The second decode keeps roughly a quarter of the payload, and because the mime-type guard directly above it inspects the *correctly* decoded bytes and passes, the call still reports success — the corruption only surfaces when the file is written and opened. The change is one line in `src/Base/OpenAiBasedProviderClientBase.php`: ```php - $images[] = new ImageFile(base64_decode($image_content), 'image/png', 'gene… --- COMMITS (24h) --- (none) ======================================================================== ## [2] summariseModule:ai_integration_eca:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Integration - ECA (machine name: ai_integration_eca) Reporting period: last 24h (2026-09-10T12:08:50+00:00 to 2026-09-11T12:08:50+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Jürgen Haas (jurgenhaas) [1]". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

    AI Integration - ECA

    then use

    ,

    ,

      /
    • , and as needed. Output only the HTML fragment with no surrounding , , or
      tags. After the project summary prose, add a single subsection titled "

      How can I help on this project?

      " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Support media entities for vision models](https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3534289) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: Marcus Johansson (Marcus_Johansson) | Labels: 2026Sprint18, AI Initiative, AI Initiative Sprint, ai::inside Description: >>> [!note] Migrated issue Reported by: [anaconda777](https://www.drupal.org/user/3595801) >>> Problem/Motivation Hi, Currently the ECA Chat task has a text area for prompt. (I am currently using it for categorizing user generated text and it works great) For vision models, there is a need to send media items (like jpg, png etc. files) to the model for categorizing them. So if a content contains a Media field, the file of it should be send to a Model with a prompt. (This by the way works already in Chat Generation Explorer where you can type a prompt and under that is a file upload. ) So a… ### [Stable 1.0.0 release for use in Drupal CMS recipes](https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3585025) State: closed | Updated: 2026-09-10 | Author: Rajab Natshah (RajabNatshah) | Assigned: unassigned | Labels: category::task, priority::normal, state::fixed Description: Thank you so much Jürgen and Marcus for this module. 934 sites report using it. We added it to our products, in the AI base recipe. We would love to ship it in Drupal CMS recipes. Recipes install with `minimum-stability: stable`, and 1.0.x is rc only, so the install stops: ``` Root composer.json requires drupal/ai_integration_eca ~1, found drupal/ai_integration_eca[dev-1.0.x, 1.0.0-alpha2, ..., 1.0.x-dev (alias of dev-1.0.x)] but it does not match your minimum-stability. ``` You are already at rc5, so a stable 1.0.0 tag would open the door for everyone packaging recipes and products. Happy… ### [Replace token references by roken replacements](https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3585027) State: closed | Updated: 2026-09-10 | Author: Jürgen Haas (jurgenhaas) | Assigned: unassigned | Labels: category::bug, code, priority::major, state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !26 [fix: #3585027 Use token replacement for the token input and mask fields](https://git.drupalcode.org/project/ai_integration_eca/-/merge_requests/26) | State: merged 2026-09-10 | Author: Jürgen Haas (jurgenhaas), 1355 diff lines Description: In project/ai_integration_eca#3534289 we've changed the file field from not using token references but token replacement. That should also be done everywhere else in the module. --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- - [204a3af8](https://git.drupalcode.org/project/ai_integration_eca/-/commit/204a3af86dbffeb4c36e38d83fd1dc21efab21df) fix: #3585027 Use token replacement for the token input and mask fields — Jürgen Haas (2026-09-10T13:07:04.000+00:00) ======================================================================== ## [3] summariseModule:ai_provider_openai:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: OpenAI Provider (machine name: ai_provider_openai) Reporting period: last 24h (2026-09-10T12:08:50+00:00 to 2026-09-11T12:08:50+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

      OpenAI Provider

      then use

      ,

      ,

        /
      • , and as needed. Output only the HTML fragment with no surrounding , , or
        tags. After the project summary prose, add a single subsection titled "

        How can I help on this project?

        " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Add missing OpenAI TTS voices to api_defaults.yml](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3522771) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [dan_metille](https://www.drupal.org/user/574844) Related to !32 >>> Thank you for your great work on this module! I noticed that the current list of OpenAI text-to-speech voices in api_defaults.yml only includes 6 options, while the official OpenAI API now supports 11 voices. I've created a patch (attached) that adds the missing voices: ash, ballad, coral, sage, and verse. This ensures all currently available OpenAI TTS voices can be used with the module. ### [Add test coverage for Whisper (speechToText) and TTS (textToSpeech)](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3616894) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::task, code, priority::normal, state::needsReview Description: >>> [!note] Migrated issue Reported by: [alekas](https://www.drupal.org/user/726268) Related to !83 >>> Problem/Motivation The speechToText() (Whisper) and textToSpeech() (TTS) operation overrides in OpenAiProvider currently have zero test coverage. The existing 44 tests only cover Chat, streaming, tool calls, the File API and moderation. Any regression in the audio operations (multipart payload serialization, response parsing, error mapping) would go unnoticed. Proposed resolution Add 43 tests using a real openai-php/client over a Guzzle MockHandler transport — no live API calls, f… ### [Support batched embeddings](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3568659) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai inside Description: >>> [!note] Migrated issue Reported by: [paulsheldrake](https://www.drupal.org/user/1350686) Related to !59 >>> Update the module to support batches for embeddings so they can be inserted into VDBs faster Works with these patches: AI Milvus ### [Moderation endpoint has hardcoded model](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3607418) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::accepted Description: >>> [!note] Migrated issue Reported by: [a.dmitriiev](https://www.drupal.org/user/3235287) >>> Problem/Motivation The method moderationEndpoint is using hardcoded 'omni-moderation-latest' model. This method was there before the moderation operation type was introduced in AI Core module. Now it should of course use the model, that is selected for this operation type. Of course there should be a check that the selected provider is OpenAI. The hardcoded model should be used as a fallback. ### ["Selected API Key not working" after update to AI 1.3.0](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3579428) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, category::bug, code, priority::major Description: >>> [!note] Migrated issue Reported by: [aschiwi](https://www.drupal.org/user/107667) Related to !70 >>> Problem/Motivation This might be a problem caused by the AI module instead of OpenAI Provider but I'm encountering it on an OpenAI Provider config page: I was adding the AI module to an existing site and could not add an OpenAI API key because at admin/config/ai/providers/openai it says this when selecting the valid key "The selected API key is not working. Please double-check the correct API key was entered and that it has credit(s) available.". I tried several things and was confuse… ### [Add reasoning output](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3574226) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !68 >>> Problem/Motivation With the issue https://git.drupalcode.org/project/ai/-/work_items/3546573 we are adding the reasoning summaries as part of the output, so you can see what the model did reason. OpenAI will work as test bed to see that this is working. Steps to reproduce Proposed resolution Introduce reasoning in none-streaming mode. Introduce reasoning in streaming mode if its available while streaming. Remaining tasks User interface changes API changes Data model changes >… ### [Change the way that system prompt is being added in 1.2.x](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3573133) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: Novice, category::task, code, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !65 >>> Problem/Motivation The way historically we set a system prompt was due to the LLM being the main focus at the time, but it was obvious later that the system prompt should be set on the ChatInput instead. This is documented here: https://project.pages.drupalcode.org/ai/1.2.x/developers/develop_third_party_module/#setting-chat-system-messages We should switch over so the OpenAI Provider does this. Proposed resolution Switch from $this->chatSystemRole to fetching it from the i… ### [Add AI usage checkboxes to ai_provider_openai issue template](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3568620) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::task, miscellaneous, priority, priority::major Description: >>> [!note] Migrated issue Reported by: [kristen pol](https://www.drupal.org/user/8389) >>> [Tracker] Update Summary: [One-line status update for stakeholders] Check-in Date: MM/DD/YYYY Additional Collaborators: Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation Parent: https://git.drupalcode.org/project/ai_initiative/-/work_items/3568605 Issues must declare their AI usage, or they violate DA policies as noted in: Abuse of the Contribution Credit system Proposed resolution Update the issue template with checkboxes from the parent issue. Targ… ### [Add AI 2.x / Search AI compatible OpenAI embedding provider (2.x branch)](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3564086) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [mbatterton](https://www.drupal.org/user/1574576) Related to !57 !58 >>> AI framework 2.x introduces new provider and capability interfaces, which are not compatible with the existing 1.2.x OpenAI provider. This issue introduces a new 2.0.x development branch that: - Implements EmbeddingProviderInterface for AI 2.x - Is compatible with search_ai 2.x - Supports OpenAI embedding models - Leaves 1.2.x fully intact for AI 1.x users This is an embeddings-only provider to support AI Search and vector indexing use cases. AI 2.x separates capabilities expli… ### [Support File Handling](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3548526) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, category::feature, code Description: >>> [!note] Migrated issue Reported by: [b_sharpe](https://www.drupal.org/user/2512258) Related to !79 !53 >>> Problem/Motivation See https://platform.openai.com/docs/api-reference/files/create Once https://git.drupalcode.org/project/ai/-/work_items/3546954 lands, we can add the ability to upload files and use them for various purposes. Eventually this could be added automatically in some cases (chats with history, fine-tuning). > Related issue: [Issue #3546954](https://www.drupal.org/node/3546954) ### [Remove OpenAI SDK dependency and extend it from Drupal AI core module](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3531260) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [gxleano](https://www.drupal.org/user/3591999) Related to !44 >>> Problem/Motivation Currently, OpenAI provider is implemented using the OpenAI SDK directly, with only minor variations. This approach has led to significant code duplication (reused by other providers), especially evident when implementing new features like function calling. In such cases, nearly identical logic had to be added in multiple places, making the codebase harder to maintain, test, and evolve. To address this, we already have an AiProviderClientBase class as a common founda… ### [Handle pdf files in chat](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3529603) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [bircher](https://www.drupal.org/user/1344166) Related to !42 >>> Problem/Motivation Openai can handle pdfs in some models: https://platform.openai.com/docs/guides/pdf-files?api-mode=chat Steps to reproduce Attach a pdf to a chat. Proposed resolution Handle PDFs attached to chat. Remaining tasks adjust the messages when pdfs are attached to chat. User interface changes none API changes none Data model changes none > Related issue: [Issue #3529601](https://www.drupal.org/node/3529601) ### [Version of modules can go out of alignment](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3519419) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [mrdalesmith](https://www.drupal.org/user/2612656) Related to !29 >>> Problem/Motivation This is a duplicate of https://www.drupal.org/project/ai_agents/issues/3518506#comment-16067498 to resolve the issue for the main provider in use by people whilst a more generic solution is come up with. Description copied from that issue. In theory you will be able to update the modules in the following order, because of the dependency tree: * AI 1.1.x * AI Agents 1.1.x * Some provider still on 1.0.x This leads to the provider not having any function calling av… ### [Abstract token usage support](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3519302) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [aspilicious](https://www.drupal.org/user/172527) Related to !30 >>> https://www.drupal.org/project/ai/issues/3517618 > Related issue: [Issue #3524435](https://www.drupal.org/node/3524435) > Related issue: [Issue #3526936](https://www.drupal.org/node/3526936) > Related issue: [Issue #3526978](https://www.drupal.org/node/3526978) > Related issue: [Issue #3517618](https://www.drupal.org/node/3517618) ### [Usage stats in streaming chat need conversion to an array.](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3486224) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [shaundychko](https://www.drupal.org/user/475828) Related to !3 >>> Problem/Motivation \Drupal\ai\OperationType\Chat\StreamedChatMessage::__construct expects the third parameter to be an array. However, when a streaming chat is created with usage included, such as with the following example configuration:       /** @var \Drupal\ai_provider_openai\Plugin\AiProvider\OpenAiProvider $provider */      $provider->setConfiguration([        'stream_options' => [ … ### [Log flagged prompts](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3507407) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::rtbc Description: >>> [!note] Migrated issue Reported by: [mindbet](https://www.drupal.org/user/1703106) Related to !21 >>> Problem/Motivation When loading content in bulk to a vector database, certain paragraphs may be flagged by moderation. The interface does not show exactly what content caused the issue so that it can be addressed. Proposed resolution Add code similar to this to OpenAiProvider.php: (lines 626-628) if (!empty($response['results'][0]['flagged'])) { $moderation_alert = 'This prompt was flagged by the moderation model: ' . $prompt; \Drupal::logger('ai_provider_openai')->… ### [Moderation log overview](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3516044) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [jonas139](https://www.drupal.org/user/2873401) Related to !26 >>> Problem/Motivation When using moderation an error will be thrown when a prompt is flagged. In issue https://www.drupal.org/project/ai_provider_openai/issues/3507407 there's already a logging mechanism but the error is still thrown so it's not very user friendly. It seems better to not throw an error but log the flagged prompt in a separate overview that can be used to track down the related entity (if there is any) so a content manager can review the flagged prompt and rewrite the pi… ### [Streaming chat responses gives Call to undefined method Drupal\ai_provider_openai\OpenAiChatMessageIterator::getTools()](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3515885) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [cellear](https://www.drupal.org/user/599892) Related to !27 >>> Problem/Motivation From fresh install of Drupal CMS (1.1x-dev) from the Chat Explorer (admin/config/ai/explorers/chat_generator) with Streamed checked, the following error appears: The website encountered an unexpected error. Try again later.Error: Call to undefined method Drupal\ai_provider_openai\OpenAiChatMessageIterator::getTools() in Drupal\ai_api_explorer\Plugin\AiApiExplorer\ChatGenerator->getResponse() (line 306 of modules/contrib/ai/modules/ai_api_explorer/src/Plugin/AiApiE… ### [Allow skipping of moderations for some embeddings (not all)](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3510601) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, needs forward port, priority::normal Description: >>> [!note] Migrated issue Reported by: [wouters_f](https://www.drupal.org/user/721548) Related to !23 >>> Problem/Motivation Allow the skipping of moderations for some requests, not all. > Related issue: [Issue #3510599](https://www.drupal.org/node/3510599) ### [Bug: Key validation and Rate Limit tester are bypassing host variable; causing Auth errors or Network errors, etc.](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3496412) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [jan kellermann](https://www.drupal.org/user/371731) Related to !43 >>> Problem/Motivation We try to use an openAI compatible API. In OpenAiProvider the config-item `host` is supported - see code. But in OpenAiConfigForm the OpenAi-Client is loaded without custom host - see code so a choise of models is not possible. Proposed resolution Add UI for Host Use \OpenAI::factory() like here. > Related issue: [Issue #3531134](https://www.drupal.org/node/3531134) ### [Selecting "o1" model on automator produces error: "Unsupported parameter: 'max_tokens' is not supported"](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3508042) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, needs backport to 1.1.x, priority::normal Description: >>> [!note] Migrated issue Reported by: [alfthecat](https://www.drupal.org/user/495982) Related to !28 !22 >>> Problem/Motivation Hi, I'm using an automator on a list field and when I switch it to use the "o1" model instead of my previously selected "40o" model under advanced settings, I get the following errors in the log and the field does not get automated/interpolated. "Error invoking model response: Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead." "A general error happened why trying to interpolate, message Error invoking mod… ### [Error with OpenAI o1 models](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3489201) State: closed | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [merilainen](https://www.drupal.org/user/304437) >>> Problem/Motivation I tested the new Open o1 models in AI Chat Explorer, got an error: The following error occurred while processing your request:Error invoking model response: Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.I tied also without max_tokens value but got the same error. ### [Moderation reads confidence scores instead of the actual violation flags, so almost every category shows as flagged](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3622161) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::accepted Description: >>> [!note] Migrated issue Reported by: [rduterte](https://www.drupal.org/user/3809153) >>> Problem/Motivation OpenAI's moderation endpoint returns two different things per category: a confidence score (a number, always present, usually small and non-zero even for harmless text) and a flag (a true or false stating whether that category actually tripped the moderation threshold). This provider's own moderation method reads the confidence scores and stores them as if they were the flags. Since PHP treats any non-zero number as true, and the scores are almost never exactly zero, every categor… ### [Error: Call to undefined method OpenAI\Client::responses() in Drupal\ai_provider_openai\Plugin\AiProvider\OpenAiProvider->chat()](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3620601) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::accepted Description: >>> [!note] Migrated issue Reported by: [kaszarobert](https://www.drupal.org/user/3578328) >>> Problem/Motivation Using 1.3.0-beta2 throws an error for all calls with the latest stable ai module 1.4.8: Error: Call to undefined method OpenAI\Client::responses() in Drupal\ai_provider_openai\Plugin\AiProvider\OpenAiProvider->chat() (line 319 of /app/web/modules/contrib/ai_provider_openai/src/Plugin/AiProvider/OpenAiProvider.php)#0 [internal function]: Drupal\ai_provider_openai\Plugin\AiProvider\OpenAiProvider->chat(Object(Drupal\ai\OperationType\Chat\ChatInput), 'gpt-5.6-terra', Array)#… ### [Add support for fast mode](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3619211) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: >>> [!note] Migrated issue Reported by: [scott_euser](https://www.drupal.org/user/3267594) >>> Problem/Motivation A good chunk of the models support fast mode (seems roughly 2x the cost, for 2.5x the response speed) Steps to reproduce See https://developers.openai.com/api/docs/pricing?latest-pricing=fast Proposed resolution Consider how to support; maybe the providers list needs to return them as separate items e.g. gpt 5.4 mini, gpt 5.4 mini (fast mode) as it does not seem desireable to have an all-or-nothing configuration on the OpenAI provider settings made Remaining tasks Decide/agree … ### [Unable to do GPT 5.4 calls](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3614729) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::accepted Description: >>> [!note] Migrated issue Reported by: [jesmaster](https://www.drupal.org/user/1494544) >>> I have my model set to 5.4-nano and it was working fine until this recent update. Now I get "Function tools with reasoning_effort are not supported for gpt-5.4-nano in /v1/chat/completions." If switch to 5.6 it works fine. Most likely related to https://www.drupal.org/project/ai_provider_openai/issues/3613982 ### [How to enable type: web_search in Chat?](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3613029) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::support, documentation, priority::normal, state::postponed Description: >>> [!note] Migrated issue Reported by: [anybody](https://www.drupal.org/user/291091) >>> Postponed on https://git.drupalcode.org/project/ai/-/work_items/3586616 Problem/Motivation In a project we're using Drupal AI for research, including web sources. We're listing different sources to search for in our prompt and we're using OpenAI Provider. I was a bit curious if AI really searches the web for the results (and I'm still) and I found https://developers.openai.com/api/docs/guides/tools-web-search Can someone tell if type: web_search is required to be enabled for AI looking into current r… ### [Automated Drupal 12 compatibility fixes for ai_provider_openai 1.3.x-dev](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3606117) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: Drupal 12 compatibility, ProjectUpdateBotD12, category::task, code Description: >>> [!note] Migrated issue Reported by: [project update bot](https://www.drupal.org/user/3644742) Related to !77 >>> Problem/Motivation Hello project maintainers, This is an automated issue to help make this module compatible with Drupal 12. Changes will periodically be added to this issue that remove deprecated API uses. To stop further changes from being posted, change the status to anything other than Active, Needs review, Needs work or Reviewed and tested by the community. Alternatively, you can remove the "ProjectUpdateBotD12" tag from the issue to stop the bot from posting updates. … ### [Create a skill to setup the provider](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3605812) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::feature, code Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !82 >>> Description We want an agent skill (under ai_provider_openai/.agents/skills/) that sets up the OpenAI provider from an API key that already exists on the system as an environment variable. The skill must work without ever exposing the key's value: it checks only that the variable is set, then wires it in through the Key module's environment key provider so the secret never lands in configuration. This skill does not use the Tool API — it is driven entirely through drush … ### [Automated Drupal 12 compatibility fixes for ai_provider_openai 1.2.x-dev](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3594765) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: Drupal 12 compatibility, ProjectUpdateBotD12, category::task, code Description: >>> [!note] Migrated issue Reported by: [project update bot](https://www.drupal.org/user/3644742) Related to !75 >>> Problem/Motivation Hello project maintainers, This is an automated issue to help make this module compatible with Drupal 12. Changes will periodically be added to this issue that remove deprecated API uses. To stop further changes from being posted, change the status to anything other than Active, Needs review, Needs work or Reviewed and tested by the community. Alternatively, you can remove the "ProjectUpdateBotD12" tag from the issue to stop the bot from posting updates. … ### [Opt-in to cache embedding lookups](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3552523) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::postponed Description: >>> [!note] Migrated issue Reported by: [scott_euser](https://www.drupal.org/user/3267594) Related to !55 >>> Problem/Motivation https://git.drupalcode.org/project/ai/-/work_items/3552522 provides trait method to cache embeddings lookups. Steps to reproduce Embeddings method does not use it Proposed resolution Use the new caching option Remaining tasks Decide 2.0.x branch vs method_exists check User interface changes N/A API changes N/A Data model changes N/A ### [Turn off moderation if omni-moderation-latest is not available](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3534855) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::task, code, priority::normal, state::needsReview Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !49 >>> Problem/Motivation When working with a company account in OpenAI, there is the possibility to only allow certain models. This means that you can turn off the moderation models. This is very bad practice since the accounts can get banned, but we have one reported instance of such an account. We need the OpenAI model to still work in these instances and people might not know that we do the opinionated thing of turning on moderation by default. We need to inform when this happens… ### [Add gpt-image-1 image to image capabilitites](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3531289) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::needsReview Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !45 >>> Problem/Motivation We have added an image to image operation type in https://git.drupalcode.org/project/ai/-/work_items/3531212, meaning that we will be able to take an image and defined parameters and use them and generate an image. OpenAI gpt-image-1 can do this. We should implement it. Steps to reproduce Proposed resolution Implement the ImageToImage operation type with gpt-image-1. Remaining tasks User interface changes API changes Data model changes ### [Warning appears while using automators for image type field "Warning: Undefined array key "b64_json" in Drupal\ai_provider_openai\Plugin\AiProvider\OpenAiProvider->textToImage() "](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3504849) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::postponed Description: >>> [!note] Migrated issue Reported by: [vakulrai](https://www.drupal.org/user/3524052) >>> Problem/Motivation When i enabled image automator to generate image and selected "default Image to text model" the node save was triggering warnings and not able to generate and save the image in the field. Warning: Undefined array key "b64_json" in Drupal\ai_provider_openai\Plugin\AiProvider\OpenAiProvider->textToImage() (line 404 of /var/www/html/docroot/modules/contrib/ai_provider_openai/src/Plugin/AiProvider/OpenAiProvider.php) Steps to reproduce Enable and configure the Openai module add a… ### [Add event triggering for streaming](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3489846) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::task, code, priority::normal, state::needsReview Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !48 >>> Problem/Motivation Add the methods that makes logging possilbe of responses on streaming events from here: https://www.drupal.org/project/ai/issues/3489690 Steps to reproduce Proposed resolution Remaining tasks User interface changes API changes Data model changes ### [Improve documentation on setting key](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3486487) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::task, documentation, priority::normal, state::accepted Description: >>> [!note] Migrated issue Reported by: [jvdkolk](https://www.drupal.org/user/562054) >>> The section 'Post-Installation' states: "Set up an API key using the Key module with your OpenAI credentials." Nevertheless, on admin/config/system/keys/add there is a section 'Type settings' - Key type (4 types) - Provider settings - etc. What to set there? I also had to clear the cache before my key showed up on admin/config/ai/providers/openai Proposed text "Set up an API key using the Key module with your OpenAI credentials. Under 'Key type', choose 'Authentication'. Under 'Key provider' choose '… ### [Enable Drupal AI Module Functionality for Environments Behind a Proxy](https://git.drupalcode.org/project/ai_provider_openai/-/work_items/3481664) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, proxy Description: >>> [!note] Migrated issue Reported by: [olegiv](https://www.drupal.org/user/3268706) >>> Problem/Motivation The Drupal AI module currently does not support environments where requests must be routed through an HTTP/HTTPS proxy. Many organizations use proxies to secure and manage external communications, especially in development and corporate environments. Without proper proxy support, external API calls made by the module may fail, rendering the module unusable in these environments. Steps to reproduce 1. Set up Drupal in a local or corporate environment where internet access is restrict… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [4] summariseModule:ai_provider_aws_bedrock:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AWS Bedrock Provider (machine name: ai_provider_aws_bedrock) Reporting period: last 24h (2026-09-10T12:08:50+00:00 to 2026-09-11T12:08:50+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Besart Bytyqi (besart)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

        AWS Bedrock Provider

        then use

        ,

        ,

          /
        • , and as needed. Output only the HTML fragment with no surrounding , , or
          tags. After the project summary prose, add a single subsection titled "

          How can I help on this project?

          " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Reasoning models return an empty message, and model-specific parameters are rejected by Converse](https://git.drupalcode.org/project/ai_provider_aws_bedrock/-/work_items/3594715) State: opened | Updated: 2026-09-10 | Author: Besart Bytyqi (besart) | Assigned: unassigned | Labels: category::bug, code, priority::normal, state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !19 [Issue #3594715: Read the first content block that carries text, and route model-specific parameters to additionalModelRequestFields](https://git.drupalcode.org/project/ai_provider_aws_bedrock/-/merge_requests/19) | State: opened | Author: Besart Bytyqi (besart), 50 diff lines Description: ## Issue summary ### Problem 1: the response is empty for any reasoning model `chat()` reads the answer from content block zero: ```php $message = new ChatMessage($response['output']['message']['role'], $response['output']['message']['content'][0]['text'] ?? ""); ``` Reasoning models put their reasoning in its own content block, and it arrives first. Block zero holds `reasoningContent`, not `text`, so the `?? ""` fires and the provider returns an empty `ChatMessage`. Nothing errors, so the caller sees a successful call that produced no text. That `?? ""` came from #3517795, where block ze… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [5] summariseModule:ai_provider_azure:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Microsoft Azure AI (machine name: ai_provider_azure) Reporting period: last 24h (2026-09-10T12:08:50+00:00 to 2026-09-11T12:08:50+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

          Microsoft Azure AI

          then use

          ,

          ,

            /
          • , and as needed. Output only the HTML fragment with no surrounding , , or
            tags. After the project summary prose, add a single subsection titled "

            How can I help on this project?

            " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Structured output: an invalid JSON schema is silently accepted instead of throwing an exception](https://git.drupalcode.org/project/ai_provider_azure/-/work_items/3618013) State: opened | Updated: 2026-09-10 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::bug, code, priority::normal, v1.2.x-dev Description: ## Summary Structured output calls do not fail when the supplied JSON schema is itself invalid. A schema whose `required` array lists a key that is not defined in `properties` is forwarded to the Azure API and the call succeeds, so the caller never learns that the schema is broken. The schema below should not be usable — `description` is listed as required but never defined, while `caption` is defined but never required: ```json { "type": "object", "properties": { "alt": { "type": "string", "description": "Concise alt text for accessibility (max 125 characters)" }, … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [6] summariseModule:ai_vdb_provider_postgres:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Postgres VDB Provider (machine name: ai_vdb_provider_postgres) Reporting period: last 24h (2026-09-10T12:08:50+00:00 to 2026-09-11T12:08:50+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Sergiu Nagailic (Nikro), Zeeshaan khann (zeeshan_khan)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

            Postgres VDB Provider

            then use

            ,

            ,

              /
            • , and as needed. Output only the HTML fragment with no surrounding , , or
              tags. After the project summary prose, add a single subsection titled "

              How can I help on this project?

              " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Add batch embeddings](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509) State: opened | Updated: 2026-09-10 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint16, AI Initiative Sprint, ai inside Description: >>> [!note] Migrated issue Reported by: [nikro](https://www.drupal.org/user/576416) Related to !30 >>> Problem/Motivation The AI module is introducing batch embeddings as a first-class capability, so indexing can embed and store multiple chunks per request instead of one at a time. This meaningfully reduces indexing time. See the parent work item #3568648: Batch embeddings for improved indexing performance. Vector database providers are being aligned with this capability so they participate in the batched indexing path. The Milvus provider has already been updated in ai_vdb_provider_milvu… ### [indexItems() throws TypeError on array_diff() because $skipDeleteItemIds is never declared](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3614504) State: opened | Updated: 2026-09-10 | Author: Zeeshaan khann (zeeshan_khan) | Assigned: unassigned | Labels: Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !33 [Issue #3614504: Fix TypeError in indexItems() from undeclared $skipDeleteItemIds property](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/merge_requests/33) | State: opened | Author: Zeeshaan khann (zeeshan_khan), 18 diff lines Description: ### Problem/Motivation Indexing any content through a Search API index backed by this provider fails with: TypeError: array_diff(): Argument #2 must be of type array, null given in PostgresProvider.php on line 685 This happens on every call to PostgresProvider::indexItems(), because the property $this->skipDeleteItemIds is read but never declared or initialized anywhere in the class (or in its parent, AiVdbProviderClientBase). PHP treats the undefined property access as null, which array_diff() rejects as an invalid second argument. ### Steps to reproduce Step 1: Set up a Search API serve… --- MERGE REQUESTS (24h) --- ### [feat: #3610509 Add batch embeddings](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/merge_requests/30) State: opened | Author: Sergiu Nagailic (Nikro) | Branch: 3610509-add-batch-embeddings | 656 diff lines Description: By: nikro Closes #3610509 --- COMMITS (24h) --- (none) ======================================================================== ## [7] summariseModule:canvas:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Drupal Canvas (machine name: canvas) Reporting period: last 24h (2026-09-10T12:08:50+00:00 to 2026-09-11T12:08:50+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), Ahmad Khalil (ahmad-khalil-imagex) [1], AKHIL BABU (AkhilBabu), Bálint Kléri (balintbrews), Chandan Singh (chandu7929), dpi, Feliksas Mazeikis (f.mazeikis), Fons Vandamme (f0ns), Georgi Ivanov (givanov), John Locke (freelock), Jordan Graham (COBadger), julio retkwa (julioretkwa), Konstantine Kirkitadze (kotekirkitadze), Lauri Timmanee (lauriii), Matt Hand (matthand), Narendra Singh Rathore (NarendraR), Ted Bowman (tedbow), utkarsh_33 (Utkarsh_33), Wim Leers (wimleers), wotnak". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

              Drupal Canvas

              then use

              ,

              ,

                /
              • , and as needed. Output only the HTML fragment with no surrounding , , or
                tags. After the project summary prose, add a single subsection titled "

                How can I help on this project?

                " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Dependency Dashboard](https://git.drupalcode.org/project/canvas/-/work_items/3591657) State: opened | Updated: 2026-09-11 | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Assigned: unassigned | Labels: projectManagement Description: This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more. ## Repository Problems Renovate tried to run on this repository, but found these problems. - ⚠️ WARN: Failed to set branch status - ⚠️ WARN: No github.com token has been configured. Skipping release notes retrieval - ⚠️ WARN: Rate limit exceeded for api.github.com, as no hostRules set for this host. Please set a GITHUB_COM_TOKEN - ⚠️ WARN: No tool releases found. ## Deprecations / Replacements > ⚠️ **Warning** > The foll… ### [[>=11.4.7] Broaden our check to determine if a recipe is being applied, use 11.4.7's new `RecipeRunner::isApplying()`](https://git.drupalcode.org/project/canvas/-/work_items/3591985) State: opened | Updated: 2026-09-11 | Author: Adam G-H (phenaproxima) | Assigned: unassigned | Labels: Needs issue summary update, Needs upstream bugfix, Recipes initiative, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1554 [Check for the recipe runner](https://git.drupalcode.org/project/canvas/-/merge_requests/1554) | State: opened | Author: Adam G-H (phenaproxima), 86 diff lines Description: Right now, we use a pretty narrow hack to determine if a recipe is being applied: https://git.drupalcode.org/project/canvas/-/blob/1.x/src/ComponentSource/ComponentSourceManager.php?ref_type=heads#L100 As the comment notes, the "config is syncing" flag is inconsistent about recipe application. There's no core API to differentiate a normal config sync from a config sync happening during a recipe. Core _will_ add that API in https://www.drupal.org/project/drupal/issues/3613607, but it's not done yet. So until then, we need this hack. But the hack isn't broad enough; we need to know if a recipe… ### [RecipeAppliedEvent listener installs a module and invalidates the container for every listener after it](https://git.drupalcode.org/project/canvas/-/work_items/3591996) State: opened | Updated: 2026-09-11 | Author: Jakub Piasecki (zaporylie) | Assigned: unassigned | Labels: category::bug, priority::critical, state::needsReview Description: ## Overview Applying a site template recipe fails with: In ContainerBuilder.php line 1104: You have requested a synthetic service ("kernel"). The DIC does not know how to construct this service. `RecipeSubscriber::onApply()` calls `PageVariantMigration::migrateDefaultTheme()`, which calls `createFromPageRegions()`, which installs `canvas_page_template_component` when it is missing: ``` // src/PageVariantMigration.php:131 if (!\Drupal::moduleHandler()… ### [[PP-1] Add logic + docs to not ship Component config entities with Drupal extensions (modules, themes, recipes), and how to do it anyway when there's a good enough reason (pre-populated component trees in Canvas Pages or ContentTemplates)](https://git.drupalcode.org/project/canvas/-/work_items/3565712) State: opened | Updated: 2026-09-11 | Author: drupalbot | Assigned: Adam G-H (phenaproxima), Wim Leers (wimleers) | Labels: DX (Developer Experience), Recipes initiative, category::task, configManagement Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1634 [Add docs/recipes.md: how Canvas Component versions interact with recipes...](https://git.drupalcode.org/project/canvas/-/merge_requests/1634) | State: opened | Author: Wim Leers (wimleers), 158 diff lines Description: > [!NOTE] > Issue summary needs updating. Incorporate #3564135+'s different focus. >>> [!note] Migrated issue Reported by: [wim leers](https://www.drupal.org/user/99777) >>> Overview Ever since Component versions were introduced (#3523841: Versioned Component config entities (SDC, JS: prop_field_definitions, block: default_setting, all: slots for fallback) + component instances refer to versions ⇒ less data to store per XB field row), it became implicitly unsupported to ship an exported Component config entity with some Drupal extension in its config/install or config/optional direct… ### [Allow Canvas Patterns+PageRegions+ContentTemplates provided by Recipes to NOT specify component versions](https://git.drupalcode.org/project/canvas/-/work_items/3571366) State: opened | Updated: 2026-09-11 | Author: drupalbot | Assigned: Matt Glaman (mglaman) | Labels: AI-accelerated, Chicago2026, DX (Developer Experience), Drupal CMS dependency critical Description: >>> [!note] Migrated issue Reported by: [penyaskito](https://www.drupal.org/user/959536) Related to !811 >>> Overview In https://git.drupalcode.org/project/canvas/-/work_items/3567413 we added the infra for updating component instances to the latest (active) version if there is no data impact. That is pretty defensive per nature, so we ensure no data loss. But there are some cases where e.g. contrib should be able to impact that. e.g. In \Drupal\canvas\Hook\ShapeMatchingHooks::mediaLibraryStorablePropShapeAlter we implement hook_canvas_storable_prop_shape_alter for media_library, and for… ### [Canvas AI: Add Playwright coverage for the chat Tools dropdown](https://git.drupalcode.org/project/canvas/-/work_items/3591951) State: opened | Updated: 2026-09-11 | Author: AKHIL BABU (AkhilBabu) | Assigned: Konstantine Kirkitadze (kotekirkitadze) | Labels: 2026Sprint17, 2026Sprint18, AI Initiative Sprint, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1607 [test(AI): #3591951 Canvas AI: Add Playwright coverage for the chat Tools dropdown](https://git.drupalcode.org/project/canvas/-/merge_requests/1607) | State: opened | Author: Konstantine Kirkitadze (kotekirkitadze), 202 diff lines Description: ## Summary https://git.drupalcode.org/project/canvas/-/work_items/3591856 added a Tools dropdown to the dev chat UI. Install `canvas_dev_ai`, open the chat, and the dropdown is there. Nothing covers it in a browser. Add Playwright coverage. ## Current behavior No browser coverage exists for the dropdown. The tool list, the selection, the active tool pill, and the `selected_tool` request parameter are all untested. ## Proposed Cover these assertions: 1. Every tool configured in `canvas_dev_ai.settings` renders in the dropdown, with its label and description. 2. With no tools configured, t… ### [Config in language other than site default language causes an exception](https://git.drupalcode.org/project/canvas/-/work_items/3591850) State: opened | Updated: 2026-09-11 | Author: Ted Bowman (tedbow) | Assigned: unassigned | Labels: category::bug, state::needsWork, translation Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1400 [🤖 bug: #3591850 Use entity langcode, not site default, as default translation](https://git.drupalcode.org/project/canvas/-/merge_requests/1400) | State: opened | Author: Ted Bowman (tedbow), 809 diff lines Description: ### Problem When a Canvas config entity's `langcode` differs from the site default language, the Canvas editor throws exceptions. This happens when `PageRegion` (or `ContentTemplate`) entities are created while one language is the site default, and the site default is changed later. The entities keep their original `langcode`. Two exceptions: 1. `InvalidArgumentException: getTranslation() must not be called with the langcode of the default translation ("en")` — thrown when the preview validates a region with an auto-save draft. `CanvasConfigEntityTranslationsAreValidConstraintValidator` and… ### [Canvas AI: Proper chat history management in the backend](https://git.drupalcode.org/project/canvas/-/work_items/3592032) State: opened | Updated: 2026-09-11 | Author: AKHIL BABU (AkhilBabu) | Assigned: AKHIL BABU (AkhilBabu) | Labels: 2026Sprint18, AI Initiative, AI Initiative Sprint, ai Description: ## Summary Before starting, read https://git.drupalcode.org/project/canvas/-/work_items/3591923#note_2377604. The dev chat does not keep the agent's history across turns. Each turn runs as a fresh agent: the stored agent state is deleted when the turn finishes, and the next turn rebuilds its history from the client transcript. ## Why Within one turn the backend owns a complete history — every tool call and every tool result — restored from the stored agent state on each hop. At the turn boundary that state is deleted, and the client transcript that replaces it carries message text only, so… ### [Canvas AI: Prevent the selected Tool from changing during a chat turn](https://git.drupalcode.org/project/canvas/-/work_items/3591952) State: closed | Updated: 2026-09-11 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1604 [#3591952 Canvas AI: Prevent the selected Tool from changing during a chat turn](https://git.drupalcode.org/project/canvas/-/merge_requests/1604) | State: merged 2026-09-11 | Author: Ahmad Khalil (ahmad-khalil-imagex), 741 diff lines Description: ## Summary One chat turn in the dev AI chat runs as several requests to `/admin/api/canvas/ai-dev`, all sharing one `request_id`. Each of those requests carries the selected Tool as `selected_tool`. The Tools dropdown stays interactive throughout, so the user can change or clear the Tool while a turn is still running. The selection must be fixed for the whole turn, in the UI and on the server. Part of https://git.drupalcode.org/project/canvas/-/work_items/3591777. ## Current behavior A turn is not one request. Set the component agent as the main agent, open the chat with the browser networ… ### [Site template installation fails with Canvas 1.11](https://git.drupalcode.org/project/canvas/-/work_items/3592052) State: opened | Updated: 2026-09-11 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: Description: ### Steps to reproduce Setup Drupal CMS with ddev ``` mkdir -p my-drupalcms-site && cd my-drupalcms-site ddev config --project-type=drupal11 --docroot=web ddev start ddev composer create-project drupal/cms ddev composer drupal:recipe-unpack ``` Verify that the canvas version is 1.11.0 ``` ddev composer show drupal/canvas ``` Now run the install command ``` ddev drush si recipes/drupal_cms_starter ``` The install fails with the following error message _`You have requested a synthetic service ("kernel"). The DIC does not know how to construct this service.`_ Now downgrade canvas ve… ### [Canvas AI: Unify error handling in `canvas_component_agent`'s tools](https://git.drupalcode.org/project/canvas/-/work_items/3592021) State: opened | Updated: 2026-09-11 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint18, AI Initiative, AI Initiative Sprint, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1626 [3592021: Add AiResponseValidator::formatErrors() to render accumulated tool...](https://git.drupalcode.org/project/canvas/-/merge_requests/1626) | State: opened | Author: Ahmad Khalil (ahmad-khalil-imagex), 978 diff lines Description: Apply the error-handling pattern from https://git.drupalcode.org/project/canvas/-/work_items/3591958 to the tools `canvas_component_agent` uses: the access check throws first, unchanged; every other check accumulates instead of stopping at the first error; and the accumulated errors are reported through `AiResponseValidator::formatErrors()`. See the "Proposed solution" section of https://git.drupalcode.org/project/canvas/-/work_items/3591958 for the full pattern, and `place_components`/`edit_components` (https://git.drupalcode.org/project/canvas/-/merge_requests/1584) for the reference implem… ### [Remove Canvas-only text format guidelines from non-Canvas forms](https://git.drupalcode.org/project/canvas/-/work_items/3592061) State: opened | Updated: 2026-09-10 | Author: John Locke (freelock) | Assigned: unassigned | Labels: category::bug, priority::minor, state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1637 [bug: #3592061 Remove Canvas-only text format guidelines from non-Canvas forms](https://git.drupalcode.org/project/canvas/-/merge_requests/1637) | State: opened | Author: John Locke (freelock), 133 diff lines Description: Canvas’s block and inline HTML guidelines appear on ordinary text-format fields even though those formats cannot be selected there. Only guidelines for the field’s available formats should appear. ## What is happening? On an anonymous comment form, three sets of instructions appear: - Filtered HTML - Drupal Canvas — Block HTML (locked) - Drupal Canvas — Inline HTML (locked) The form has no text-format selector, so Drupal’s guideline-switching JavaScript cannot hide the extra instructions. Canvas removes its exclusive formats from the selector options on non-Canvas forms, but leaves their … ### [