12.1.0 - 2026-10-12
Improvements
- AIChat is built on
Microsoft.Extensions.AI.AIChatServicetalks to the model throughIChatClient: register the client of any provider (OpenAI, Azure OpenAI, Ollama and others) withAddChatClientand the chat picks it up, or keep the built-inOpenAICompatibleChatClient, which streams from any OpenAI-compatible chat completions endpoint and now parses tool calls.IAIChatService.GetChatClient()exposes the configured pipeline, with theModel,MaxTokensandTemperaturedefaults applied, to your own code. - AIChat calls your C# code.
Toolstakes theAIFunctions created withAIFunctionFactory; calls run automatically and render as cards with the arguments, status and result,ToolCallTemplaterenders a result with Radzen components (generative UI),ApprovalRequiredAIFunctionmakes the chat ask the user before a tool runs (ApproveToolCall,RejectToolCall), andToolCallCompleted,ShowToolCallsandAllowMultipleToolCallscontrol the rest. Multiple approvals in one answer are batched and the answer continues once all of them are decided. - AIChat shows the reasoning of models that expose it as a collapsible block above the answer (
ShowReasoning), lists the sources of an answer under it (ChatMessage.Citations,ShowCitations,CitationTemplate) from the citation annotations of providers such as OpenAI web search or Perplexity and from tools that returnChatCitation, and normalizes the citation markers of gpt-oss models to plain[n]. - AIChat takes file attachments.
AllowAttachmentsrenders a paperclip (AcceptedAttachmentTypes,MaxAttachmentSize,Error),AddAttachmentadds files from code and pending attachments show as thumbnails under the input. Images go to multimodal models as image content, text files (txt, csv, md, json, xml and similar) as text so any model can read them, PDF files as file parts for providers that support them. A stop button replaces the send button while an answer streams;Stop()keeps the text received so far.ShowUsageshows the tokens the provider reports for each answer. - AIChat conversations persist through
IConversationStore.InMemoryConversationStorekeeps them for the lifetime of the application andAddConversationStore<TStore>()plugs in a database store;ConversationSessionSerializerround-trips a session with its model history, tool calls, results and attachments as JSON. The service saves after every answer,UserIdtells whose conversation it is andGetOrCreateSessionAsync,GetSessionsAsync,ClearSessionAsyncandDeleteSessionAsyncmanage the saved ones; a chat with aSessionIdrestores its conversation on initialization. - AIPrompt is a new component: a prompt box for one-shot AI tasks with suggested prompts, a streaming markdown output panel with copy and regenerate, and commands such as Shorter, Formal or Translate that refine the output.
Contextapplies every prompt to a piece of text, for example the content or selection of an editor;Value,Output,GeneratedandOutputTemplatewire it into the page. - InlineAIPrompt is a new component that adds an AI assistant to any text field. A button opens an AIPrompt in a popup, the bound
Valueis the context and the output replaces it, is appended to it or is discarded. WithTargetIdset to the id of the input or textarea, the text selected in it becomes the context and only the selection is replaced.ShowButton="false"withOpenAsync(element)opens the popup from your own trigger andAppliedreports the new value. - SmartPasteButton is a new component that fills a form from the text in the clipboard: it describes the properties of
TModelto the model (DescriptionandDisplayattributes guide it), asks for a JSON object and assigns the converted values toData, including dates, numbers, enums and Guids, notifying theEditContext.FieldsandInstructionsnarrow the request andPaste(text)works without the clipboard. - Embeddings are available through
IAIChatService.GetEmbeddingGenerator():OpenAICompatibleEmbeddingGeneratorimplementsIEmbeddingGenerator<string, Embedding<float>>over any OpenAI-compatible embeddings endpoint (EmbeddingsEndpoint,EmbeddingsProxy,EmbeddingsModelinAIChatServiceOptions), or register the generator of your provider. - AIChatService refuses an API key in the browser. Everything in a WebAssembly client is visible to its users, so configuring
ApiKeythere, through the options, the component parameter or a per-message override, throws with a message that says to keep the key on the server and setProxyto a server endpoint that adds it; Blazor Server applications keep working as before. - AIChat, AIPrompt and Chat render markdown while the answer streams instead of after it ends.
- Markdown and the MarkdownEditor design view style lists, code, blockquotes, horizontal rules and inline HTML tags.
- Demos get an AI section in the navigation and a redesigned AI overview page, with new demos for tool calling, generative UI, human in the loop, voice input, file attachments, citations and conversation persistence in AIChat, AI assistants for the DataGrid (natural language filtering, an AI column, semantic search with embeddings, AI highlight), the Scheduler, the Chart, the HtmlEditor and the MarkdownEditor.