fixed :)
@mpotter you can now test the fix in this new beta release:
https://www.drupal.org/project/ckeditor_ai_agent/releases/1.0.0-beta14 →
Let me know if it works for you too!
I ran into the same problem but I think this is a bug because the host variable is already implemented and generally working fine. The problem for us is that the API key check bypasses the host variable and therefore it fails for us (We use our own API keys on our proxy).
This module seems like exactly what we need so I hope we won't have to make a separate `ai_provider_openai_compatible` module that would duplicate all of the work in this project.
I'm attaching a patch that solves the reported problem as well as a near-identical issue with the rate limit checker.
@ashish.verma85 if we are not using the @dark-mode-preference block to support dark mode through the browser preference, might it be better to just delete the code block? Otherwise it might confuse developers who think the component is going to adapt based on dark mode user preference. Let me know your thought.
@ashish.verma85 I see you modified 2 blocks of CSS:
1. A block specifically targeting dark-mode-preference browser setting, what is now the purpose of this CSS? Previously this CSS was causing problems in themes not supporting dark mode. Did you modify it so that it either
A: Makes the UI component dark but ensuring visibility in themes that are light
B: Disable CSS designed to make the component work on a dark background (in that case why keep this block at all)
2. A block specifically targeting GIN dark mode. The issue did not indicate any bug with Gin theme, did you modify this CSS because you found a bug in Gin theme as well, if so please provide screenshots and steps to reproduce this bug.
@ashish.verma85 before I try it please explain your approach to the problem so that I can test it with the right expectations. From looking at your patch it is not immediately clear to me.
@zengenuity maybe in your case you can simply disable permission to use AI Image Alt text for all roles except administrators? This should let you test the module.
@ultimike Thank you very much for your feedback, I agree this would be an essential feature for large scale Drupal implementations. If there are dozens of content types and possibly over 100 image fields there are likely use cases where this button is not needed! We will put some effort into fleshing out an update for this.
Hi! Sorry for not being able to respond earlier. I had a freelancer work on problems with the Editor config form before and thought all problems related to this form were fixed. Apparently not! I'll see if he is available to look at this again.
My internal team is too busy to look at this now since this is not yet an important project for DXPR.
This should be fixed in 2.7.4! Please confirm and I will close this issue.
Done, thanks for the heads up!
Website still needs to be updated but the the project page is up to speed now.
Hi, can you please share a link to your sitemap so I can see if the module needs additional code to support it?
Thanks!
Thank you for pointing this out. I wasn't previously aware of the Quicklink module, and it does appear to overlap with the goals of Speculative Loading. At a high level, Quicklink prefetches in-viewport links during idle time, while Speculative Loading provides a more flexible, standards-based approach using the browser's native speculation rules, including support for prerendering.
It’s possible that the two modules could be consolidated, and Quicklink might be a more appropriate home given its maturity. However, I haven’t had the time to do a detailed technical comparison or evaluate its current implementation. Until then, I’ll position Speculative Loading as an alternative approach and update the documentation accordingly.
Since the quicklinks module does not mention Speculative Loading I think it only uses the older prefetch tech, here is a quick comparison of the 2 technologies:
| Feature | Quicklink (Prefetch) | Speculative Loading (Browser-native) |
|-----------------------------|------------------------------------------------------|-----------------------------------------------------------|
| **Standard** | JavaScript-based (custom logic) | Based on [speculationrules](https://wicg.github.io/nav-speculation/speculation-rules.html) |
| **Trigger** | In-viewport links during idle time | User interaction (hover, focus), or DOM-based rules |
| **Fetch type** | `fetch` (preloads HTML as text) | `prefetch`, `prerender`, or `preload` (native browser support) |
| **Prerendering support** | No | Yes |
| **Customizability** | Medium (via JS options) | High (via JSON rules, selectors) |
| **Browser support** | Broad (uses standard JS APIs) | Limited (currently Chromium-based browsers only) |
| **Performance impact** | Low | Medium to high (due to prerendering resource usage) |
| **Implementation complexity** | Low | Medium |
| **Best for** | Simple prefetching in SPAs or link-heavy pages | Fine-grained predictive navigation in modern apps |
Sounds good @marcus_johansson — by the way have you looked at how LiteLLM handles it? it works great, with Pydantic models supporting advanced requirements on response schemas:
https://docs.litellm.ai/docs/completion/json_mode
Of course we have no such thing in PHP. In JS, some AI SDK use Zod as an alternative to Pydantic but I think it is not as mature or powerful. I have no idea whether something similar exists in PHP.
I would also include Gemini's structured output docs as I think it is a bit different but Gemini 2.0 is an incredible model for many use cases:
https://ai.google.dev/gemini-api/docs/structured-output
Also in some applications I implement structured output but on top of that I implement my own "dirty json" libraries and/or custom code, so that I can still experiment with faster models that don't supported structured output.
For example with Gemini 2.0 I can get guaranteed structured output but with 2.0-flash-lite I cannot, but with some cleaning I get clean structured output with enough ease to say the juice is worth the squeeze. As with anything it depends on the use case.
Hi Paul! I recommend upgrade to the latest 2.x release. We are now focusing on the 2.x branch and publishing our latest and greatest there. The 3.x branch is mostly there for the deprecation of jQuery, and with that Bootstrap 3 and 4. Let me know how today's 2.7.0-beta5 release works for you.
Hello, this is fixed in the latest release, thank you for your patience:
https://www.drupal.org/project/dxpr_theme/releases/6.0.2 →
Thanks @avpaderno!
@ressa thanks for the tip!
@ressa thanks so much for the swift response!
@avpadermo do we need more reviews? I respect the process but we have been on Planet for 17 years and the feed got removed due to an error in our migration process. Should I ask people for a review? Just trying to help move this forward, thanks for your consideration!
Before DXPR we are called Sooperthemes and before that Alldrupalthemes.com:
I feel like right now we're announcing the most exciting contributions to the community so it would be sad if Planet cannot take part in that.
Can we merge this? :) We're going to launch a very interesting project for the Drupal community today.
Hello there, sorry about that we forgot to push the DXPR Theme Helper release, problem should be fixed now with 1.0.5:
https://www.drupal.org/project/dxpr_theme_helper/releases/1.0.5 →
jurriaanroelofs → created an issue.
Sorry for the delay, it will be released today :)
Not 100% sure but it's highly likely the root cause is with imports breaking due to duplicate IDs, I have a fix for this for the 4.x module but its pretty straightforward to create a similar fix for the D7 version:
https://www.drupal.org/project/google_analytics_reports/issues/3483408 🐛 Drupal\Core\Database\IntegrityConstraintViolationException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'keyEvents:viewed_pricing_page' for key 'PRIMARY': INSERT INTO "google_analytics_reports_fields" RTBC
I had the same problem and the root cause was a bug with field imports, you can ensure you import all fields and keep your views working correctly by reinstalling after applying my patch:
https://www.drupal.org/project/google_analytics_reports/issues/3483408 🐛 Drupal\Core\Database\IntegrityConstraintViolationException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'keyEvents:viewed_pricing_page' for key 'PRIMARY': INSERT INTO "google_analytics_reports_fields" RTBC
@eojthebrave thx for your work on this! I would love to test this but with both the 5.x branch and this patched version I'm not able to load active subscriptions for a user on the /user/nid/subscription page. It will always decide there are no subscriptions for the user and redirect to /user/uid/subscription/signup.
I am able to load the list of plans at /admin/config/services/recurly/subscription-plans so my API keys should be fine.
Is this a known problem on Drupal 10.x and PHP 8.3? Need a workaround for this or help debugging it in order to help you test your patch. Unfortunately I don't get any errors and to debug the API request I think I'd need to edit the recurly-client library, or is there a possibility to get debug info my flipping some verbosity switch?
Even when I create a new susbcription from within the Drupal site, the new subscription will be created with the correct account code (user-uid) but not load for said user.
jurriaanroelofs → created an issue.
I gave you the extra permission, would be great if you can add D11 compatibility. I don't have use for the module right now but it makes sense to update it since D10 and D11 are not too different.
Hello, sorry I forgot about this but are you still interested? Is it hard to make the module D11 compatible?
Hi, we are close to Drupal 11 support for DXPR Theme, it is a lot of complex work due to jquery deprecations in Drupal 11. Once development and testing of the changes are finished, we release DXPR Theme and the helper module for Drupal 11.
Maybe I'm nit-picky but I feel like ChatWithImageVision is a bit redundant and ChatWithVision is more in line with convention:
https://docs.anthropic.com/en/docs/build-with-claude/vision
https://platform.openai.com/docs/guides/vision
I think if they add Video support it would in integration in Vision API and not a separate VideoVision api.
I'm also not sure about the "emotion" part in our prompt, because the Vision API seems to be getting it wrong when it does name an emotion:
"A young woman with a serene expression gazes through a chain-link fence."
This completely turns around the emotion of the image.
jurriaanroelofs → created an issue.
For new projects I can now recommend https://github.com/dxpr/dxpr_cms
The only feature that is left to port from DXPR Marketing CMS is Multilingual tooling.
The great benefit of this new StarterKit is that you don't need WAMP, you can use the included "ddev quikstart" command to launch a pre-configured server.
https://github.com/dxpr/dxpr_cms/blob/main/README.md
All future developments will happen on this project.
How about Weaviate? Has a lot of advanced features, some paid, but also a fully open source vector search engine with a lot of community backing:
https://github.com/weaviate/weaviate
I also see one of the AI module maintainers has created a module for weaviate: https://www.drupal.org/project/search_api_weaviate →
Tested the latest commit and works great! Only thing that we can improve on in this mechanism is streaming the answer rather than waiting for completion of the messages before printing to the UI. It's what users are getting used to now, and it will also prevent time-out problems.
If I prompt the Completion plugin with "Write 2000 words about cats" I'll get "There was an error in the Summarize AI plugin for CKEditor." probably because of the time-out.
That error message is wrong but I addressed that in my MR here: https://www.drupal.org/project/ai/issues/3464266 📌 UI text inconsistencies and user experience issues of main assistant plugin Active
Thx I'll take a look today!
Got it, yeah I agree on all of that too :) We all should be making modules that abstract away from any single LLM service provider.
JurriaanRoelofs → created an issue.
Thx guys I appreciate your feedback and I'm looking forward to dive deeper into the topics. Will check out the video about graph RAG. I also recently saw a video about how Hybrid Search can be a better solution than RAG and maybe that is also easier to implement. I'm just starting out getting into this so you probably thought about this already.
Have you considered integrating with the TMGMT framework? It's a very powerful suite for both human and AI translation and it is very extensible, too.
JurriaanRoelofs → created an issue.
Amazing work on this, with this API it will be easier to create and extend plugins.
I do agree with @wouters_f that the decision to load the selectbox with plugins in a popover is not a good user experience. It would be better to load those options in the native CKEditor dropdown as before, and when clicking them we load the Drupal popover. Did you try that and run into any trouble doing it this way @kevinquillen?
I think this feature is the most important AI feature Drupal can develop. Drupal is uniquely positioned to offer the best AI CMS because Drupal content is typically very clearly structured with semantically named components like entity types, bundles, fields, paragraphs, layouts etc. A lot of content and metacontent (e.g. layout) that an LLM can work with.
"Dear AI, please find most innovative ideas that people have posted on drupal.org in the last 3 months"
For this to work, I think the technology to bet on is RAG (Retrieval Augmented Generation) which involves vectorizing the Drupal data you want to integrate with the LLM. There is a reason there aren't any AI PHP modules while there are many Python AI modules, Python is just much more computationally efficient and therefore suited to computationally intensive work, which vectorization is.
It would already be a great achievement to have a Hello world example that used vectorized Drupal data but here is a list of things I'd like to see as part of this intiative as well:
- Multi tenancy Make it possible for an end user to ask "Why is my latest invoice so high" and for the chatbot to reply something like "A higher than usual metered "Line-Item-X" was consumser through your project "Software-Y". But won't want to expose invoices of other accounts to the chat instance.
- Unsupervised updating of vectorized database. At some point real-time would be great of course
- Integration with Search (API). I think they are already separately working on RAG but I haven't kept track. It would be great if the default search form could leverage LLM capabilities.
- Recommender algorithm: finding related content with fuzzy keyword. If you like reading Drupal issues about RAG from the AI module you might enjoy these issues about using generative AI in search_api module issue queue. etc.
JurriaanRoelofs → created an issue.
Fixed the dependency though, thx!
Thanks, but the module is not functional yet. At present we're sort of just mocking it up and developing it from inside the mock-up. However, I'm curious to know what got you interested and what use case you have in mind for this module that made you want to try it.
You can also write us privately with feedback via our contact form.
Just to manage expectations: our team is currently working intensely on a number of initiatives across all our products and this issue will have to wait, probably a couple months. We might redesign the menu while at the same time refactoring dxpr_theme to be based on Single Directory Components.
JurriaanRoelofs → created an issue.
JurriaanRoelofs → created an issue.
Hi, can you please create a video of this bug? We cannot reproduce it on our side. Please also report what browser and version you are using.
Ok thanks for bringing this to our attention again guys. I consulted with "WCAG-GPT" and indeed we get some recommendations to improve the design. I will create a user story for this and assign it to a UX designer as soon as possible.
For reference, the recommendations:
1. Consistent Navigation (WCAG 2.4.3)
Guideline: Ensure that navigation mechanisms that are repeated on multiple web pages occur in the same relative order each time they are repeated, unless a change is initiated by the user.
Application: The inconsistency between desktop and mobile navigation (where parent links are accessible on desktop but not on mobile) violates this guideline. Ensuring that parent links are accessible on both platforms aligns with WCAG 2.4.3, providing a consistent navigation experience.2. Link Purpose (In Context) (WCAG 2.4.4)
Guideline: The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context.
Application: Current implementation might obscure the purpose of parent links if they are not directly clickable. Making parent links accessible and ensuring their purpose is clear adheres to this guideline, enhancing user understanding and navigation.3. Navigable (WCAG 2.4.1)
Guideline: Provide ways to help users navigate, find content, and determine where they are.
Application: Providing a separate icon or indicator for expanding submenus while keeping parent links clickable makes the navigation more intuitive and easier to use, supporting better content discovery and navigation.4. Keyboard Accessible (WCAG 2.1.1)
Guideline: Make all functionality available from a keyboard.
Application: Ensuring that both the parent link and the submenu are accessible via keyboard navigation is crucial. This can be achieved by making the parent link clickable and using a keyboard-accessible control (such as a button or icon) to expand submenus.5. Multiple Ways (WCAG 2.4.5)
Guideline: Provide more than one way to locate a web page within a set of web pages.
Application: Offering multiple methods to access parent and child pages (e.g., clicking the text for parent pages, using an icon for submenus) ensures users can navigate in the way that best suits them, enhancing accessibility.6. Visible Focus (WCAG 2.4.7)
Guideline: Any keyboard-operable user interface has a mode of operation where the keyboard focus indicator is visible.
Application: Ensuring the focus indicator is visible on both parent links and submenu expand icons helps users understand their current position within the navigation menu, making the site more accessible for keyboard users.Implementation Example:
Parent Link Accessibility: Ensure the text of the parent link is clickable and navigates to the parent page.
Submenu Toggle: Use an accessible icon (e.g., a plus sign or an arrow) adjacent to the parent link that expands the submenu when clicked. Ensure this icon is keyboard accessible.
Consistent Experience: Maintain this behavior across both desktop and mobile platforms to ensure a consistent navigation experience.
I'm also moving this to the correct project.
JurriaanRoelofs → created an issue.
Definitely, that would be a good choice too. Also our own theme DXPR Theme uses Bootstrap 5 theme as a base theme.
Hi,
Indeed we cannot support both in DXPR Theme, this would require custom CSS.
I'll write more about this in your DXPR.com ticket.
Jurriaan
Yes it is, I just added a stable release to make this more clear.
I know this isnt helping but this problem has existed for over 13 years now (!) and still is the reason, besides quite many, we still cannot wholeheartedly start any new Drupal projects.
@sic we have a workaround committed to dxpr_theme that probably works in 99.9% of real-world applications, feel free to use our theme or implement our patch in your custom theme:
https://git.drupalcode.org/project/dxpr_theme/-/commit/7810b0c78d866e705...
Hello guys,
We finally have a commit addressing this issue. It is not a perfect solution, this issue is very complex and needs to be fixed in core. The issue is under discussion in core for 14 years already:
https://www.drupal.org/node/953034 →
Our current workaround is not perfect as it is based on a whitelist of tags:
https://git.drupalcode.org/project/dxpr_theme/-/commit/7810b0c78d866e705...
A proper solution will have to come from Drupal core. Thank you for your help!
I'm marking this fixed because its committed to 6.x branch but I cannot select this as version on the issue, so mind that it is not fixed on 6.0.0-beta1.
JurriaanRoelofs → created an issue. See original summary → .
Hi inst,
In DXPR Theme settings, find the setting Header & Main Menu -> Side Header
Enable it, and you're done :)
Kind regards,
Jurriaan Roelofs
CEO, Chief Product Officer, DXPR
Thank you Tiru, your changes will break the bug fix referenced in this issue regarding rendering of empty regions. We have an alternative fix under review internally that we will merge soon.
@saschaeggi Is there anything in specific keeping you from creating a stable release for your projects? Are there any standards that you are following in this regard?
I hope it is not just perfectionism that is keeping Gin out of reach for projects that demand a stable release with a shield for all their dependencies :)
Hi Luke, one of our developers will be working on this issue this week, we'll keep you posted!
Thanks for the issue and your ideas! We are aware that our current solution is not optimal. The problem we solved with the commit you pointed out is the rendering of empty regions. Without this commit we saw sidebars regions being rendered even when there were no blocks in the sidebars. We need to find a better solution that does not render region markup while also fixing the problem with blocks being undetected when they do not have text nodes.
We will start work on this tomorrow and keep you posted.
Kind regards,
Jurriaan Roelofs
CEO, Chief Product Officer, DXPR
Hi difeor,
Is it possible your server is not able to connect outside to app.dxpr.com?
Kind regards,
Jurriaan Roelofs
CEO, Chief Product Officer, DXPR
JurriaanRoelofs → created an issue.
JurriaanRoelofs → created an issue.
JurriaanRoelofs → created an issue.
Thank you for your input. However, this bug is not reproducible in version 2.6.0, therefore, we do not require any code changes to address this particular issue.
Anyone experiencing the same error should update to the latest release.