15 implementations of IChatClient
Microsoft.Extensions.AI.Abstractions (2)
Microsoft.Extensions.AI.Abstractions.Tests (2)
Microsoft.Extensions.AI.Evaluation.Safety (1)
Microsoft.Extensions.AI.Integration.Tests (2)
Microsoft.Extensions.AI.OpenAI (3)
Microsoft.Extensions.AI.Tests (3)
Microsoft.Extensions.DataIngestion.Tests (1)
Microsoft.ML.GenAI.Core (1)
669 references to IChatClient
Aspire.Azure.AI.Inference (7)
Aspire.Azure.AI.Inference.Tests (8)
Aspire.Azure.AI.OpenAI.Tests (25)
Aspire.Dashboard (5)
Aspire.OpenAI (8)
Aspire.OpenAI.Tests (25)
Microsoft.AspNetCore.Components.AI (9)
Microsoft.Extensions.AI (127)
ChatCompletion\AnonymousDelegatingChatClient.cs (6)
21private readonly Func<IEnumerable<ChatMessage>, ChatOptions?, IChatClient, CancellationToken, Task<ChatResponse>>? _getResponseFunc;
29private readonly Func<IEnumerable<ChatMessage>, ChatOptions?, IChatClient, CancellationToken, IAsyncEnumerable<ChatResponseUpdate>>? _getStreamingResponseFunc;
50IChatClient innerClient,
76IChatClient innerClient,
77Func<IEnumerable<ChatMessage>, ChatOptions?, IChatClient, CancellationToken, Task<ChatResponse>>? getResponseFunc,
78Func<IEnumerable<ChatMessage>, ChatOptions?, IChatClient, CancellationToken, IAsyncEnumerable<ChatResponseUpdate>>? getStreamingResponseFunc)
ChatCompletion\ChatClientBuilder.cs (34)
12/// <summary>A builder for creating pipelines of <see cref="IChatClient"/>.</summary>
15private readonly Func<IServiceProvider, IChatClient> _innerClientFactory;
18private List<Func<IChatClient, IServiceProvider, IChatClient>>? _clientFactories;
21/// <param name="innerClient">The inner <see cref="IChatClient"/> that represents the underlying backend.</param>
23public ChatClientBuilder(IChatClient innerClient)
30/// <param name="innerClientFactory">A callback that produces the inner <see cref="IChatClient"/> that represents the underlying backend.</param>
31public ChatClientBuilder(Func<IServiceProvider, IChatClient> innerClientFactory)
36/// <summary>Builds an <see cref="IChatClient"/> that represents the entire pipeline. Calls to this instance will pass through each of the pipeline stages in turn.</summary>
38/// The <see cref="IServiceProvider"/> that should provide services to the <see cref="IChatClient"/> instances.
41/// <returns>An instance of <see cref="IChatClient"/> that represents the entire pipeline.</returns>
42public IChatClient Build(IServiceProvider? services = null)
45var chatClient = _innerClientFactory(services);
57$"Ensure that the callbacks passed to {nameof(Use)} return non-null {nameof(IChatClient)} instances.");
70public ChatClientBuilder Use(Func<IChatClient, IChatClient> clientFactory)
82public ChatClientBuilder Use(Func<IChatClient, IServiceProvider, IChatClient> clientFactory)
92/// an implementation for both <see cref="IChatClient.GetResponseAsync"/> and <see cref="IChatClient.GetStreamingResponseAsync"/>.
95/// A delegate that provides the implementation for both <see cref="IChatClient.GetResponseAsync"/> and
96/// <see cref="IChatClient.GetStreamingResponseAsync"/>. This delegate is invoked with the list of chat messages, the chat
117/// an implementation for both <see cref="IChatClient.GetResponseAsync"/> and <see cref="IChatClient.GetStreamingResponseAsync"/>.
120/// A delegate that provides the implementation for <see cref="IChatClient.GetResponseAsync"/>. When <see langword="null"/>,
121/// <paramref name="getStreamingResponseFunc"/> must be non-null, and the implementation of <see cref="IChatClient.GetResponseAsync"/>
125/// A delegate that provides the implementation for <see cref="IChatClient.GetStreamingResponseAsync"/>. When <see langword="null"/>,
126/// <paramref name="getResponseFunc"/> must be non-null, and the implementation of <see cref="IChatClient.GetStreamingResponseAsync"/>
132/// <paramref name="getResponseFunc"/> will provide the implementation of <see cref="IChatClient.GetResponseAsync"/>, and
133/// <paramref name="getStreamingResponseFunc"/> will provide the implementation of <see cref="IChatClient.GetStreamingResponseAsync"/>.
135/// is supplied without <paramref name="getStreamingResponseFunc"/>, the implementation of <see cref="IChatClient.GetStreamingResponseAsync"/>
138/// <see cref="IChatClient.GetResponseAsync"/> will be implemented by combining the updates from <paramref name="getStreamingResponseFunc"/>.
143Func<IEnumerable<ChatMessage>, ChatOptions?, IChatClient, CancellationToken, Task<ChatResponse>>? getResponseFunc,
144Func<IEnumerable<ChatMessage>, ChatOptions?, IChatClient, CancellationToken, IAsyncEnumerable<ChatResponseUpdate>>? getStreamingResponseFunc)
ChatCompletion\ChatClientBuilderServiceCollectionExtensions.cs (15)
10/// <summary>Provides extension methods for registering <see cref="IChatClient"/> with a <see cref="IServiceCollection"/>.</summary>
13/// <summary>Registers a singleton <see cref="IChatClient"/> in the <see cref="IServiceCollection"/>.</summary>
15/// <param name="innerClient">The inner <see cref="IChatClient"/> that represents the underlying backend.</param>
23IChatClient innerClient,
32/// <summary>Registers a singleton <see cref="IChatClient"/> in the <see cref="IServiceCollection"/>.</summary>
34/// <param name="innerClientFactory">A callback that produces the inner <see cref="IChatClient"/> that represents the underlying backend.</param>
42Func<IServiceProvider, IChatClient> innerClientFactory,
49serviceCollection.Add(new ServiceDescriptor(typeof(IChatClient), builder.Build, lifetime));
53/// <summary>Registers a keyed singleton <see cref="IChatClient"/> in the <see cref="IServiceCollection"/>.</summary>
56/// <param name="innerClient">The inner <see cref="IChatClient"/> that represents the underlying backend.</param>
65IChatClient innerClient,
74/// <summary>Registers a keyed singleton <see cref="IChatClient"/> in the <see cref="IServiceCollection"/>.</summary>
77/// <param name="innerClientFactory">A callback that produces the inner <see cref="IChatClient"/> that represents the underlying backend.</param>
86Func<IServiceProvider, IChatClient> innerClientFactory,
93serviceCollection.Add(new ServiceDescriptor(typeof(IChatClient), serviceKey, factory: (services, serviceKey) => builder.Build(services), lifetime));
Microsoft.Extensions.AI.Abstractions (71)
ChatCompletion\ChatClientExtensions.cs (14)
12/// <summary>Provides a collection of static methods for extending <see cref="IChatClient"/> instances.</summary>
15/// <summary>Asks the <see cref="IChatClient"/> for an object of type <typeparamref name="TService"/>.</summary>
22/// The purpose of this method is to allow for the retrieval of strongly typed services that may be provided by the <see cref="IChatClient"/>,
25public static TService? GetService<TService>(this IChatClient client, object? serviceKey = null)
33/// Asks the <see cref="IChatClient"/> for an object of the specified type <paramref name="serviceType"/>
44/// The purpose of this method is to allow for the retrieval of services that are required to be provided by the <see cref="IChatClient"/>,
47public static object GetRequiredService(this IChatClient client, Type serviceType, object? serviceKey = null)
58/// Asks the <see cref="IChatClient"/> for an object of type <typeparamref name="TService"/>
68/// The purpose of this method is to allow for the retrieval of strongly typed services that are required to be provided by the <see cref="IChatClient"/>,
71public static TService GetRequiredService<TService>(this IChatClient client, object? serviceKey = null)
92this IChatClient client,
112this IChatClient client,
132this IChatClient client,
152this IChatClient client,
Microsoft.Extensions.AI.Abstractions.Tests (12)
Microsoft.Extensions.AI.Evaluation (14)
Microsoft.Extensions.AI.Evaluation.Console (1)
Microsoft.Extensions.AI.Evaluation.Integration.Tests (12)
Microsoft.Extensions.AI.Evaluation.Reporting (13)
Microsoft.Extensions.AI.Evaluation.Reporting.Azure (1)
Microsoft.Extensions.AI.Evaluation.Safety (10)
Microsoft.Extensions.AI.Integration.Tests (23)
Microsoft.Extensions.AI.OllamaSharp.Integration.Tests (5)
Microsoft.Extensions.AI.OpenAI (30)
Microsoft.Extensions.AI.OpenAI.Tests (162)
OpenAIChatClientTests.cs (33)
40IChatClient chatClient = client.GetChatClient(model).AsIChatClient();
57IChatClient chatClient = openAIClient.AsIChatClient();
59Assert.Same(chatClient, chatClient.GetService<IChatClient>());
65using IChatClient pipeline = chatClient
78Assert.IsType<FunctionInvokingChatClient>(pipeline.GetService<IChatClient>());
85IChatClient chatClient = openAIClient.AsIChatClient();
87Assert.Same(chatClient, chatClient.GetService<IChatClient>());
90using IChatClient pipeline = chatClient
103Assert.IsType<FunctionInvokingChatClient>(pipeline.GetService<IChatClient>());
153using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
232using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
330using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
383using IChatClient client = CreateChatClient(httpClient, modelId: "gpt-4o-mini");
460using IChatClient client = CreateChatClient(httpClient, modelId: "gpt-4o-mini");
543using IChatClient client = CreateChatClient(httpClient, modelId: "gpt-4o-mini");
617using IChatClient client = CreateChatClient(httpClient, modelId: "gpt-4o-mini");
726using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
817using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
924using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1020using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1139using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1224using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1323using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1463using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1583using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1630using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1678using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1724using IChatClient client = CreateChatClient(httpClient, "gpt-4o-mini");
1741private static IChatClient CreateChatClient(HttpClient httpClient, string modelId) =>
1863using IChatClient client = CreateChatClient(httpClient, "o4-mini");
1908using IChatClient client = CreateChatClient(httpClient, "gpt-oss-120b");
1958using IChatClient client = CreateChatClient(httpClient, "gpt-oss-120b");
2026using IChatClient client = new OpenAIClient(new ApiKeyCredential("apikey"), new OpenAIClientOptions { Transport = new HttpClientPipelineTransport(httpClient) })
OpenAIResponseClientTests.cs (106)
43IChatClient chatClient = client.GetResponsesClient().AsIChatClient(model);
54IChatClient chatClient = openAIClient.AsIChatClient("model");
56Assert.Same(chatClient, chatClient.GetService<IChatClient>());
59using IChatClient pipeline = chatClient
72Assert.IsType<FunctionInvokingChatClient>(pipeline.GetService<IChatClient>());
151using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
294using IChatClient client = CreateResponseClient(httpClient, "o4-mini");
424using IChatClient client = CreateResponseClient(httpClient, "o4-mini");
550using IChatClient client = CreateResponseClient(httpClient, "o4-mini");
624using IChatClient client = CreateResponseClient(httpClient, "o4-mini");
744using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
884using IChatClient client = CreateResponseClient(httpClient, "computer-use-preview");
979using IChatClient client = CreateResponseClient(httpClient, "computer-use-preview");
1086using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
1231using IChatClient client = CreateResponseClient(httpClient, modelId: "gpt-4o-mini");
1359using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
1493using (IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini"))
1614using (IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini"))
1753using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
1981using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
2394using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
2601using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
2712using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
2802using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
2874using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
2963using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
3015using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
3110using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-2024-08-06");
3191using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-2024-08-06");
3258using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-2024-08-06");
3382using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-2024-08-06");
3602using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-2024-08-06");
3689using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-2024-08-06");
3758using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
3810using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
3868using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
3927using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
3988using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4050using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4113using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4186using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4267using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4338using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4408using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4485using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4563using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4629using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4690using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4760using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4819using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4875using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4936using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
4994using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5051using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5110using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5172using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5228using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5283using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5340using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5397using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5434using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5466using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5510using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5563using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5611using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5646using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5681using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5716using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5754using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5792using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5812using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5850using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5893using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5936using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
5979using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
6054using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
6126using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
6167using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
6221using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
6284using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
6357using IChatClient client = CreateResponseClient(httpClient, "gpt-4o");
6457using IChatClient client = CreateResponseClient(httpClient, "gpt-4o");
6574using IChatClient client = CreateResponseClient(httpClient, "gpt-4o");
6704using IChatClient client = CreateResponseClient(httpClient, "o4-mini");
6768using IChatClient client = new OpenAIClient(new ApiKeyCredential("apikey"), new OpenAIClientOptions { Transport = new HttpClientPipelineTransport(httpClient) })
6843using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-2024-08-06");
6864private static IChatClient CreateResponseClient(HttpClient httpClient, string modelId) =>
7125using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-2024-08-06");
7252using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-2024-08-06");
7362using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
7446using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
7538using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
7608using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
7714using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
7815using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
7920using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
8020using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
8107using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
8198using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
8283using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
8396using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
8495using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
8600using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
8713using IChatClient client = CreateResponseClient(httpClient, "gpt-5.4-mini");
8818using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
8911using IChatClient client = CreateResponseClient(httpClient, "gpt-4o-mini");
Microsoft.Extensions.AI.Tests (99)
ChatRouting\SemanticRoutingChatClientTests.cs (12)
21var profiles = new Dictionary<IChatClient, IReadOnlyList<string>>(ChatClientReferenceComparer.Instance)
35new Dictionary<IChatClient, IReadOnlyList<string>>(),
40new Dictionary<IChatClient, IReadOnlyList<string>>
48new Dictionary<IChatClient, IReadOnlyList<string>>
107var profiles = new Dictionary<IChatClient, IReadOnlyList<string>>(ChatClientReferenceComparer.Instance)
156var profiles = new Dictionary<IChatClient, IReadOnlyList<string>>(ChatClientReferenceComparer.Instance)
199var profiles = new Dictionary<IChatClient, IReadOnlyList<string>>(ChatClientReferenceComparer.Instance)
223var profiles = new Dictionary<IChatClient, IReadOnlyList<string>>(ChatClientReferenceComparer.Instance)
277private sealed class ChatClientReferenceComparer : IEqualityComparer<IChatClient>
281public bool Equals(IChatClient? x, IChatClient? y) => ReferenceEquals(x, y);
283public int GetHashCode(IChatClient obj) => RuntimeHelpers.GetHashCode(obj);
Microsoft.Extensions.DataIngestion (2)