Introduce a modern AI Chatbot frontend library
<!-- Please search existing work items before filing to avoid duplicates. --> ## Description The current AI Chatbot module is tightly coupled to the DeepChat library. DeepChat does more than render the UI - it also handles the API communication, chat state, and message history. Functionality such as tool calling, conversation history, and thread management is implemented in a DeepChat-specific way, making it difficult to swap in alternative chat interfaces. [assistant-ui](https://www.assistant-ui.com/) was identified as a promising alternative - a React-based component library that supports custom API endpoints and offers significantly easier customization than DeepChat. This would be built as a separate contrib module, keeping it out of AI Core. This is also a priority for anonymous-focused chatbot use cases, since the existing Core solution is more targeted to Admin users ## Tasks * [ ] Evaluate assistant-ui as a DeepChat replacement, specifically its [custom runtime](https://www.assistant-ui.com/docs/runtimes/custom/overview) for connecting to a Drupal-side API endpoint * [ ] Audit what DeepChat-specific logic exists in the current chatbot (tool calling, history, thread IDs) and define an abstraction boundary * [ ] Create a new contrib module * [ ] Check the chat consumer / API endpoint that assistant-ui can talk to * [ ] Port or re-implement thread ID handling, conversation history, and tool call support against the new interface * [ ] Provide a basic working demo ## Acceptance criteria * A new contrib module exists that renders a functional chat UI powered by assistant-ui. * The module connects to Drupal's AI stack via a custom API endpoint — no direct provider keys required in the frontend. * Thread IDs and conversation history are preserved across messages within a session. * Tool calling works equivalently to the current DeepChat implementation. * The module has no hard dependency on the DeepChat module. * Anonymous chatbot use cases are supported (i.e. the chat works without a logged-in user, subject to configuration).
issue