wpf-405607-ai-powered-extensions-ai-chat-control-manage-multiple-chat-clients.md
The WPF AI Chat Control supports multiple AI services in a single application, which enables you to compare AI providers, separate conversation contexts, and provide specialized AI assistants for different user tasks.
Register multiple AI services and distinguish them by a unique key.
using DevExpress.AIIntegration;
using DevExpress.Xpf.Core;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using OllamaSharp;
using System;
using System.ClientModel;
using System.Windows;
namespace DXWPFMultipleChatClients {
public partial class App : Application {
static App() {
CompatibilitySettings.UseLightweightThemes = true;
// Create an Azure OpenAI client.
var azureOpenAiClient = new Azure.AI.OpenAI.AzureOpenAIClient(AzureOpenAIEndpoint, AzureOpenAIKey);
// Create an Ollama API client.
IChatClient ollamaClient = new OllamaApiClient(new Uri("http://localhost:11434/"), "MODEL_NAME");
// Create a service collection to register AI chat clients.
var serviceCollection = new ServiceCollection();
// Register the Azure OpenAI client with a unique key.
serviceCollection.AddKeyedChatClient("azureOpenAIClient", azureOpenAiClient.GetChatClient(ModelId).AsIChatClient());
// Register the Ollama client with a different key.
serviceCollection.AddKeyedChatClient("ollamaClient", ollamaClient);
// Add DevExpress AI Desktop services (required for AIChatControl).
serviceCollection.AddDevExpressAIDesktop();
}
private static Uri AzureOpenAIEndpoint = new Uri("YOUR_AZURE_END_POINT");
private static ApiKeyCredential AzureOpenAIKey = new ApiKeyCredential("YOUR_OPENAI_API_KEY");
static string ModelId = "MODEL_NAME"; // For example, gpt-4o-mini
}
}
Place several AIChatControl instances within a window and specify a different ChatClientServiceKey for each chat control to interact with different AI services.
<dx:ThemedWindow
x:Class="DXWPFMultipleChatClients.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxaichat="http://schemas.devexpress.com/winfx/2008/xaml/aichat"
Title="MainWindow" Height="800" Width="1000">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<dxaichat:AIChatControl
x:Name="azureChat"
ChatClientServiceKey="azureOpenAIClient"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="10"/>
<dxaichat:AIChatControl
x:Name="ollamaChat"
ChatClientServiceKey="ollamaClient"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="10"
Grid.Column="1"/>
</Grid>
</dx:ThemedWindow>
The following animation illustrates the result:
Use a single AIChatControl and modify its ChatClientServiceKey property to switch between AI services or AI agents.
This error occurs when the AIChatControl cannot find a registered chat client that matches its configuration.
Do one of the following:
Check ChatClientServiceKeyEnsure that the AIChatControl.ChatClientServiceKey property matches the key of one of the chat clients you registered in the service collection.Register a Default Chat Client
If you do not assign a ChatClientServiceKey to the chat control, register a default chat client in the desktop container to ensure that the chat control can automatically resolve the AI service:
AIExtensionsContainerDesktop.Default.RegisterChatClient(chatClient);
See the following help topic for more information: Register AI Client.
See Also