Drupal AI Contribution meeting 2025-12-01
>>> [!note] Migrated issue
<!-- Drupal.org comment -->
<!-- Migrated from issue #3560640. -->
Reported by: [valthebald](https://www.drupal.org/user/239562)
>>>
<p>Drupal AI Contribution meeting from Dec 1, 2025 at 17:00 UTC to Dec 2, 2025 17:00 UTC (Check your local time at <a href="https://www.timebie.com/std/universal.php?q=17">https://www.timebie.com/std/universal.php?q=17</a>)</p>
<p>Previous meeting <span class="drupalorg-gitlab-issue-link project-issue-status-info project-issue-status-7"><a href="https://www.drupal.org/project/ai/issues/3559530" title="Status: Closed (fixed)">#3559530: Drupal AI Contribution meeting 2025-11-24</a></span><br>
Next meeting <span class="drupalorg-gitlab-issue-link drupalorg-gitlab-link-wrapper"><a href="https://git.drupalcode.org/project/ai/-/work_items/3561893" class="drupalorg-gitlab-link">https://git.drupalcode.org/project/ai/-/work_items/3561893</a></span></p>
<h2>Where</h2>
<p>#ai-contrib channel in <a href="https://www.drupal.org/slack/">Drupal Slack</a></p>
<h2>Agenda</h2>
<h3>Attendees self-intro and interests</h3>
<h3>Follow-up to topics of previous meeting</h3>
<h3>Suggest your topic in comments</h3>
<h3>Add the issue you want to discuss as a related issue to this meeting</h3>
<h2>Transcript</h2>
<p>Hello everyone, and welcome to the Drupal AI contribution meeting!<br>
This meeting:<br>
➤ Happens every Monday in #ai-contrib channel<br>
➤ Starts at 16:00 UTC (check your time at <a href="https://www.timebie.com/std/universal.php?q=16">https://www.timebie.com/std/universal.php?q=16</a>)<br>
➤ Is text only!<br>
➤ Happens in threads, which you can follow to be notified of new replies even if you don’t comment in the thread. You may also join the meeting later and participate asynchronously.<br>
➤ New topics are posted at least 5 minutes after previous, to give attendees time to respond/suggest their (sub) topics<br>
➤ Refers to various issues and plans tracking in d.o project: <a href="https://www.drupal.org/project/ai/issues/3560640">https://www.drupal.org/project/ai/issues/3560640</a> Please comment there so we can grant you credit for attending/contributing! Please note, we will only give attributions for active engagement.<br>
➤ Transcript will be exported and posted* to the agenda issue. For anonymous comments, start with a :bust_in_silhouette: emoji. To take a comment or thread off the record, start with a :no_entry_sign: emoji.<br>
Some other emojis used in this meeting:<br>
:construction: - issue is in the works<br>
:blob_help: - help needed<br>
:status_needs_review: - needs review<br>
:pear: - low hanging fruit (novice or easy success issue)<br>
:comment: - call for discussion</p>
<h2>0️⃣ Roll call! Who's here? Please mention your <a href="http://drupal.org">drupal.org</a> username. And, if you're up for a small talk, imagine some tireless fund raisers gathered 1.5 million dollars to improve Drupal AI</h2>
<table>
<tr>
<td>valthebald</td>
<td>(Don't imagine, this actually happened 🙂)Can you suggest ideas (including crazy ones) how to best spend this investment?</td>
</tr>
<tr>
<td>matthews</td>
<td>matthews here!Remember, it isn't just cash that's been raised. It is a combination of cash and the value people's time committed.A (perhaps not) crazy idea? Keep us all employed to work on these things...... (at a resort in Bali for 3 months of the year). :laughing:</td>
</tr>
<tr>
<td>valthebald</td>
<td>Keep us all employed to work on these things.that's not crazy at all @matthews! 🙂</td>
</tr>
<tr>
<td>dan2k3k4</td>
<td>dan2k3k4 aroundA small Drupal AI branded yacht ? :eyes: then dock it in a few places like Monaco or the Hamptons?Then all the billionaires on their super yachts will wonder "what's this Drupal AI?" and they'll want to buy into it too because otherwise they'd be missing out?</td>
</tr>
<tr>
<td>Gurwinder</td>
<td>gantal :wave::skin-tone-4: and I fully support @matthews’s idea!</td>
</tr>
<tr>
<td>matthews</td>
<td>@dan2k3k4 hmmmmmm.... <a href="https://www.siyachts.com/search-price/used-boats-for-sale-under-15-million?srsltid=AfmBOoob7OG0c5b19l2_u-1rlU5slo2mu4ebUHZQWGsk-byLFYVjfsIi">https://www.siyachts.com/search-price/used-boats-for-sale-under-15-million?srsltid=AfmBOoob7OG0c5b19l2_u-1rlU5slo2mu4ebUHZQWGsk-byLFYVjfsIi</a> :thinking_face:</td>
</tr>
<tr>
<td>Tyler Staples (nexusnovaz)</td>
<td>nexusnovaz - I can't even fathom that kind of money. I wouldn't have a clue where to begin!</td>
</tr>
<tr>
<td>Kristen Pol (she/her)</td>
<td>Kristen, California :wave:$110k in the Bay Area (California) is considered low income 1.5M would fund only 10+ people hereIt would be great instead to find a place with lots of potential contributors where the cost if living is half or a quarter of thatThen we could fund 20 to 50 people!That would be amazing! (edited)</td>
</tr>
<tr>
<td>Nick Opris</td>
<td>unqunq I need a job. :smile: And not as pricey as the Bay Area people. :man-surfing:</td>
</tr>
<tr>
<td>Anmol Goel (anmolgoyal74)</td>
<td>Anmol Goel, anmolgoyal74 , IndiaI agree with @Kristen Pol (she/her), You can easily hire 30-40 people from locations where cost of living is low.</td>
</tr>
<tr>
<td>valthebald</td>
<td>being not as pricey as the Bay Area is easy 🙂I can think of several locations in Europe (not only because I live here, but also Europe's placement allows time zone sync with Americas and India), starting from Serbia</td>
</tr>
<tr>
<td>svendecabooter</td>
<td>svendecabooter</td>
</tr>
<tr>
<td>robertoperuzzo</td>
<td>hi there, robertoperuzzo</td>
</tr>
<tr>
<td>Marcus Johansson</td>
<td>marcus_johansson</td>
</tr>
<tr>
<td>the_g_bomb</td>
<td>Gareth the_g_bomb . I would pay a really good project manager to plan and prioritise the backlog, and then get mobilise all the developers to be working towards a unified goal</td>
</tr>
<tr>
<td>littlepixiez</td>
<td>@littlepixiez - too late to join as I'm sure all parents are just snowed under from the elves descending upon us - but for funsies I would make an AI paper-clip friend for Drupal sites that could just make us all happy and fix all our problems. Kinda like the chatbot. But animated and cute. :face_exhaling: :smile:</td>
</tr>
<tr>
<td>bryan</td>
<td>:wave: b_sharpe - missed this one somehow</td>
</tr>
<tr>
<td>michaellander</td>
<td>michaellander. I'm mostly MIA this week but back to normal next week. Some of us need funding and can't necessarily be replaced by cheaper devs. 🙂 (edited)</td>
</tr>
</table>
<h2>1️⃣ Release schedule</h2>
<table>
</table>
<h2>1️⃣ 1️⃣ Release window for 1.2.x is this Wednesday</h2>
<table>
<tr>
<td>valthebald</td>
<td>with a number of new commits since 1.2.3, it is likely that 1.2.4 will be released this Wednesday, December 3</td>
</tr>
</table>
<h2>1️⃣ 2️⃣ No release of 2.0.x this week</h2>
<table>
<tr>
<td>valthebald</td>
<td>Regular reminder to not use AI 2.0.x on production websites (edited)</td>
</tr>
</table>
<h2>2️⃣ Follow-up from the previous week</h2>
<table>
</table>
<h2>2️⃣ 1️⃣ <a href="https://www.drupal.org/project/ai/issues/3552887">Move AI Translate from the core</a> :status_needs_review:</h2>
<table>
<tr>
<td>valthebald</td>
<td>development is complete (simplified version of Chat LLM implementation of translate_text operation moved to core), so this is ready for review</td>
</tr>
<tr>
<td>svendecabooter</td>
<td>having a look</td>
</tr>
</table>
<h2>2️⃣ 2️⃣ <a href="https://www.drupal.org/project/ai/issues/3492940">Add ChatConsumer</a> :status_needs_review:</h2>
<table>
<tr>
<td>valthebald</td>
<td>No changes since last week, waiting for UX review</td>
</tr>
<tr>
<td>valthebald</td>
<td>Having this issue merged would allow to use chat engines different from DeepChat in ai_chatbot and related modules</td>
</tr>
</table>
<h2>2️⃣ 3️⃣ <a href="https://www.drupal.org/project/ai/issues/3552774">Linkable schema for providers</a> :status_needs_review:</h2>
<table>
<tr>
<td>valthebald</td>
<td>Work done by @harivansh is ready for review by someone else</td>
</tr>
<tr>
<td>svendecabooter</td>
<td>reviewed and added some remarks</td>
</tr>
</table>
<h2>2️⃣ 4️⃣ <a href="https://www.drupal.org/project/ai/issues/3552904">Move out Field Widget Actions</a> :status_needs_review:</h2>
<table>
<tr>
<td>valthebald</td>
<td>Another "move out" issue. Work done by @artem is waiting for review</td>
</tr>
</table>
<h2>2️⃣ 5️⃣ <a href="https://www.drupal.org/project/ai/issues/3552885">Move out and find a better name for "content suggestions"</a></h2>
<table>
<tr>
<td>valthebald</td>
<td>As discussed last week, module name is somewhat confusing, and there is contrib module <a href="https://www.drupal.org/project/ai_content_advisor">https://www.drupal.org/project/ai_content_advisor</a> having similar functionality</td>
</tr>
<tr>
<td>valthebald</td>
<td>@Aidan Foster and his team agreed to take stewardship over the module, and join forces with maintainers of similar modules</td>
</tr>
<tr>
<td>Aidan Foster</td>
<td>I'm in touch with the maintainer of content advisor and we're planning a call to talk over our approach</td>
</tr>
</table>
<h2>2️⃣ 6️⃣ <a href="https://www.drupal.org/project/ai/issues/3553398">Move AI agents Entity to AI core</a> :construction:</h2>
<table>
<tr>
<td>harivansh</td>
<td>harivansh here, I will working on this.</td>
</tr>
</table>
<h2>3️⃣ Discussions</h2>
<table>
</table>
<h2>3️⃣ 1️⃣ <a href="https://www.drupal.org/project/ai/issues/3552140">Make Add/Edit Agent UI less overwhelming</a> :comment:</h2>
<table>
<tr>
<td>Emma Horrell</td>
<td>Aidan and I added this to the Messy UI backlog</td>
</tr>
</table>
<h2>3️⃣ 2️⃣ <a href="https://www.drupal.org/project/ai/issues/3456768">Interface suggestion for text classification operation type</a> :comment:</h2>
<table>
</table>
<h2>3️⃣ 3️⃣ <a href="https://www.drupal.org/project/ai/issues/3556187">System prompt form element</a>? :comment:</h2>
<table>
</table>
<h2>3️⃣ 4️⃣ <a href="https://www.drupal.org/project/ai/issues/3556140">Allow usage of Tool API in Agents</a> :comment:</h2>
<table>
</table>
<h2>3️⃣ 5️⃣ <a href="https://www.drupal.org/project/ai/issues/3552825">Multiple providers of the same type</a> :comment:</h2>
<table>
</table>
<h2>3️⃣ 6️⃣ <a href="https://www.drupal.org/project/ai/issues/3559800">Operation types vs Provider plugins</a> :comment:</h2>
<table>
</table>
<h2>4️⃣ Not only code</h2>
<table>
</table>
<h2>4️⃣ 1️⃣ Oaisys'25</h2>
<table>
<tr>
<td>valthebald</td>
<td>from what I hear, last week's Oaisys'25 conference was a success!</td>
</tr>
<tr>
<td>valthebald</td>
<td>if you were there, what are your impressions?</td>
</tr>
<tr>
<td>Kristen Pol (she/her)</td>
<td>I heard nothing but glowing things from @yautja_cetanu (Jamie)</td>
</tr>
<tr>
<td>matthews</td>
<td>Yeah me too. He was positively bursting with excitement on his car drive back to the airport.</td>
</tr>
<tr>
<td>Kristen Pol (she/her)</td>
<td>100%</td>
</tr>
<tr>
<td>Anmol Goel (anmolgoyal74)</td>
<td>I was there. The conf was really amazing. So many great discussions happened in the contribution room.</td>
</tr>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td><a href="https://www.linkedin.com/posts/james-abrahams-62ab0418_oaisys-drupal-drupalai-activity-7400903388353232896-Iyvn?utm_source=share&utm_medium=member_desktop&rcm=ACoAAAO5IoIBfhaRjkJeIZJ6hvYPSr-4OSF4pmw">https://www.linkedin.com/posts/james-abrahams-62ab0418_oaisys-drupal-drupalai-activit[…]m=member_desktop&rcm=ACoAAAO5IoIBfhaRjkJeIZJ6hvYPSr-4OSF4pmw</a> - A little video about it on my way back</td>
</tr>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td><a href="https://www.drupal.org/project/ai_initiative/issues/3560637">https://www.drupal.org/project/ai_initiative/issues/3560637</a> - I'm putting a lot of effort into trying to get this made which is a single place linking to all the potential work/ roadmap that came out of Oaisys</td>
</tr>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td>I've written the above: I have two next steps:Get issues for every bullet (and issues for everything inside it)Present it nicely on <a href="http://www.drupalstarforge.ai">www.drupalstarforge.ai</a> so its all in one place</td>
</tr>
</table>
<h2>5️⃣ Open Mike! What are you working on? Are you blocked? Or do you want to discuss a specific topic? Add your status, questions, and topics (and discuss them in threads) for another 23 hours. Start a new thread named 5️⃣ 1️⃣ , 5️⃣ 2️⃣ etc.</h2>
<table>
</table>
<h2>5️⃣ 1️⃣ Focused on redesign/rearchitecture of Context Control Center (CCC)</h2>
<table>
<tr>
<td>Kristen Pol (she/her)</td>
<td>Join #ai-context if interested</td>
</tr>
<tr>
<td>Kristen Pol (she/her)</td>
<td>More will be posted over the next week</td>
</tr>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td><a href="https://www.gov.uk/government/publications/govuk-brand-guidelineshttps://www.gov.uk/guidance/style-guide/a-to-zI">https://www.gov.uk/government/publications/govuk-brand-guidelineshttps://www.gov.uk/guidance/style-guide/a-to-zI</a>'ll make an issue for it at some point. But one thing we'd like to do with the Local Gov Drupal is a Brand guideline/ Style guideline Agent that uses MCP to make use of this.For EC we want to use an MCP endpoint to provide a guideline for Alt text linked to a specific page.If you look at the Style guideline there are two major types of Style guidelines:Simple Find and replace rules (foundation schools should be lower case).Medium Complexity where LLMs are needed:Lower case unless the full name of the foundation trust is being used: Salisbury NHS Foundation Trust.Complex examples:fineUse ‘fine’ instead of ‘financial penalty’.For example, “You’ll pay a £50 fine.”For other types of sanction, say what will happen to the user - you’ll get points on your licence, go to court and so on. Only say ‘civil penalty’ if there’s evidence users are searching for the term.Describe what the user might need to do, rather than what government calls a thing.Abbreviations and acronymsThe first time you use an abbreviation or acronym, explain it in full on each page unless it’s well known, like UK, DVLA, USA, EU, VAT and MP. This includes government departments or schemes. Then refer to it by initials.Always use <a href="https://www.gov.uk/guidance/how-to-publish-on-gov-uk/markdown#acronyms">acronym Markdown</a> so the full explanation is available as hover text.If you think an acronym is well known, please provide evidence that 80% of the UK population will understand and commonly use it. Evidence can be from search analytics or testing of a representative sample.Do not use full stops in abbreviations: BBC, not B.B.C.There are a lot of these rules and we may run into Context window problems.</td>
</tr>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td><a href="https://www.drupal.org/project/ai_initiative/issues/3561088">https://www.drupal.org/project/ai_initiative/issues/3561088</a> - Made an issue here.... Its for local gov drupal not EC and it would be a lot of work so I don't know where this should live.... But its a really good use-case for the CCC so I think having an issue is a good idea</td>
</tr>
</table>
<h2>5️⃣ 2️⃣ In the last week I built this: <a href="https://www.drupal.org/project/searxng">https://www.drupal.org/project/searxng</a> It has a submodule providing a Tool. I am still testing it with an Assistant and I have some issues going back to Tool API so I might have to ask for help if I can't figure out the fix.</h2>
<table>
</table>
<h2>5️⃣ 3️⃣ <a href="https://www.drupal.org/project/mcp_client">MCP Client</a> </h2>
<table>
<tr>
<td>robertoperuzzo</td>
<td>:status_needs_review: <a href="https://www.drupal.org/project/mcp_client/issues/3559869">Set tool operation per tool</a>@Marcus Johansson @harivansh I just proposed an implementation for the tool operations setting (edited)</td>
</tr>
<tr>
<td>harivansh</td>
<td>Hi @robertoperuzzo thank you, I will be looking into it tonight . (edited)</td>
</tr>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td>This is amazing! Btw @robertoperuzzo - would you be interested in getting involved with the official PHP MCP SDK? And the Symfony AI framework? As they are lacking an MCP client</td>
</tr>
<tr>
<td>robertoperuzzo</td>
<td>Hi @yautja_cetanu (Jamie), yes, of course, it would be a pleasure! As I said to Marcus last week, I spoke with my company (SparkFabrik) about the possibility of contributing to the Symfony AI initiative alongside @lussoluca. It seems to be happy to reserve some budget for that. Therefore, we would like to understand how we can be involved (to formalise our time allocation). Marcus suggests talking with Christoph Hertel. We could organise a brief call to talk about that. c/c @Alessandro De Vecchi</td>
</tr>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td>yeah!</td>
</tr>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td>I'm sure he'd be super happy about it @chertzog</td>
</tr>
<tr>
<td>harivansh</td>
<td>Hi @robertoperuzzo @Marcus JohanssonFYI: Just reposting my comment from the issue.I think we should consolidate all tool configuration into a single tools property on the entity. This would eliminate the separate enabled_tools, locked_tools, and tool_operations arrays.[<br>
'name' => 'tool_name', // Required: tool name<br>
'description' => 'Tool description', // Required: tool description<br>
'input_schema' => [...], // Required: MCP tool schema
<p> // Configuration<br>
'enabled' => true, // Boolean: is tool enabled<br>
'locked' => false, // Boolean: is tool locked<br>
'operation' => 'read', // String: read|write</p>
<p> // Locked definition (only if locked === true)<br>
'locked_definition' => [<br>
'name' => 'tool_name',<br>
'description' => 'Tool description',<br>
'input_schema' => [...],<br>
],<br>
]To make this more maintainable and type-safe, we should also create dedicated DTOs/Value Objects for this:ToolCollection - represents the collection of all toolsTool - represents a single tool with all its configurationInputSchema - represents the tool's input schemaLockDefinition - represents the locked tool definitionThis would give us a single source of truth, cleaner code, and better type safety throughout the codebase. I would also love some getter and setter method.What your though on this ?</p></td>
</tr>
<tr>
<td>robertoperuzzo</td>
<td>I agree with you! I just wrote the code so far to prove the concept and make things work. I think it is time to consolidate the module for the alpha release.</td>
</tr>
<tr>
<td>Marcus Johansson</td>
<td>Sorry, saw this now -l its @chris we want to loop in here 🙂 Sorry about the notification @chertzog. I'll move the helping out with Symfony AI/MCP Client into its own discussion thread on here.</td>
</tr>
<tr>
<td>robertoperuzzo</td>
<td>@harivansh, I opened this <a href="https://www.drupal.org/project/mcp_client/issues/3561170">issue</a> for the refactoring</td>
</tr>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td>lol I spoke to @chris on linkedin, and he couldn't find this thread until I explicitly copied the link and that's why! He seems very interested in us helping with that but won't be on slack for a couple of dyas</td>
</tr>
<tr>
<td>Marcus Johansson</td>
<td><a href="https://drupal.slack.com/archives/C0803LX4536/p1764747374496449?thread_ts=1764747374.496449&cid=C0803LX4536">https://drupal.slack.com/archives/C0803LX4536/p1764747374496449?thread_ts=1764747374.496449&cid=C0803LX4536</a></td>
</tr>
<tr>
<td>robertoperuzzo</td>
<td>@harivansh I just fixed coding standards and unit tests. The DTO classes work properly! Thank you very much.<span class="drupalorg-gitlab-issue-link project-issue-status-info project-issue-status-7"><a href="https://www.drupal.org/project/mcp_client/issues/3561170" title="Status: Closed (fixed)">#3561170: Consolidate Tool Configuration Into a Single tools Property</a></span>#comment-16370541</td>
</tr>
</table>
<h2>5️⃣4️⃣ <a href="https://www.drupal.org/project/ai/issues/3549657">AI CKEditor: use prompt entities instead of custom configurations</a> :status_needs_review: - small remarks from last review round were addressed - just needs final review / go-ahead</h2>
<table>
</table>
<h2>5️⃣5️⃣ Would it be possible to have a Provider API key per user? Or is it strictly 1 key per installation?I am thinking editors could spend their own credits rather than mine.</h2>
<table>
<tr>
<td>yautja_cetanu (Jamie)</td>
<td>It would be possible, not something we support yet. I think someone else had a module that tracked credits in Drupal per user.LiteLLM have these kind of features but it costs money. So we could set something up.I think this is worth an issue and possibly putting that in the AI module/ contrib</td>
</tr>
<tr>
<td>svendecabooter</td>
<td>From what I can tell, each AI provider manages their own reference to the appropriate Key entity id.That would make it a bit more difficult to add functionality that swaps the key based on the current user :cry:Maybe it would be good as first step to add a key reference field to the standardized config schema we want to provide for AI providers?See[#3552774]</td>
</tr>
<tr>
<td>svendecabooter</td>
<td>Mmm nevermind, that schema is for modules that want to store a link to a specific provider, not to configure the provider itself</td>
</tr>
<tr>
<td>svendecabooter</td>
<td>For a provider-specific implementation, I'd guess you need a system that dynamically overrides the active config value (e.g. ai_provider_openai.api_key) and swaps it with a key assigned to that user, if available</td>
</tr>
<p>Participants:</p>
<p>valthebald, matthews, dan2k3k4, Gurwinder, Tyler Staples (nexusnovaz), Kristen Pol, Nick Opris, Anmol Goel (anmolgoyal74), svendecabooter, robertoperuzzo, Marcus Johansson, the_g_bomb, littlepixiez, bryan, michaellander</p>
</table>
issue