Microsoft.Extensions.AI.AzureAIInference 9.7.1-preview.1.25365.4
Microsoft.Extensions.AI.AzureAIInference
Provides an implementation of the IChatClient interface for the Azure.AI.Inference package.
Install the package
From the command-line:
dotnet add package Microsoft.Extensions.AI.AzureAIInference
Or directly in the C# project file:
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.AI.AzureAIInference" Version="[CURRENTVERSION]" />
</ItemGroup>
Usage Examples
Chat
using Azure;
using Microsoft.Extensions.AI;
IChatClient client =
new Azure.AI.Inference.ChatCompletionsClient(
new("https://models.inference.ai.azure.com"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("GH_TOKEN")!))
.AsIChatClient("gpt-4o-mini");
Console.WriteLine(await client.GetResponseAsync("What is AI?"));
Note: When connecting with Azure Open AI, the URL passed into the
ChatCompletionsClientneeds to includeopenai/deployments/{yourDeployment}. For example:new Azure.AI.Inference.ChatCompletionsClient( new("https://{your-resource-name}.openai.azure.com/openai/deployments/{yourDeployment}"), new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_OPENAI_KEY")!))
Chat + Conversation History
using Azure;
using Microsoft.Extensions.AI;
IChatClient client =
new Azure.AI.Inference.ChatCompletionsClient(
new("https://models.inference.ai.azure.com"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("GH_TOKEN")!))
.AsIChatClient("gpt-4o-mini");
Console.WriteLine(await client.GetResponseAsync(
[
new ChatMessage(ChatRole.System, "You are a helpful AI assistant"),
new ChatMessage(ChatRole.User, "What is AI?"),
]));
Chat streaming
using Azure;
using Microsoft.Extensions.AI;
IChatClient client =
new Azure.AI.Inference.ChatCompletionsClient(
new("https://models.inference.ai.azure.com"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("GH_TOKEN")!))
.AsIChatClient("gpt-4o-mini");
await foreach (var update in client.GetStreamingResponseAsync("What is AI?"))
{
Console.Write(update);
}
Tool calling
using System.ComponentModel;
using Azure;
using Microsoft.Extensions.AI;
IChatClient azureClient =
new Azure.AI.Inference.ChatCompletionsClient(
new("https://models.inference.ai.azure.com"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("GH_TOKEN")!))
.AsIChatClient("gpt-4o-mini");
IChatClient client = new ChatClientBuilder(azureClient)
.UseFunctionInvocation()
.Build();
ChatOptions chatOptions = new()
{
Tools = [AIFunctionFactory.Create(GetWeather)]
};
await foreach (var message in client.GetStreamingResponseAsync("Do I need an umbrella?", chatOptions))
{
Console.Write(message);
}
[Description("Gets the weather")]
static string GetWeather() => Random.Shared.NextDouble() > 0.5 ? "It's sunny" : "It's raining";
Caching
using Azure;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
IDistributedCache cache = new MemoryDistributedCache(Options.Create(new MemoryDistributedCacheOptions()));
IChatClient azureClient =
new Azure.AI.Inference.ChatCompletionsClient(
new("https://models.inference.ai.azure.com"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("GH_TOKEN")!))
.AsIChatClient("gpt-4o-mini");
IChatClient client = new ChatClientBuilder(azureClient)
.UseDistributedCache(cache)
.Build();
for (int i = 0; i < 3; i++)
{
await foreach (var message in client.GetStreamingResponseAsync("In less than 100 words, what is AI?"))
{
Console.Write(message);
}
Console.WriteLine();
Console.WriteLine();
}
Telemetry
using Azure;
using Microsoft.Extensions.AI;
using OpenTelemetry.Trace;
// Configure OpenTelemetry exporter
var sourceName = Guid.NewGuid().ToString();
var tracerProvider = OpenTelemetry.Sdk.CreateTracerProviderBuilder()
.AddSource(sourceName)
.AddConsoleExporter()
.Build();
IChatClient azureClient =
new Azure.AI.Inference.ChatCompletionsClient(
new("https://models.inference.ai.azure.com"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("GH_TOKEN")!))
.AsIChatClient("gpt-4o-mini");
IChatClient client = new ChatClientBuilder(azureClient)
.UseOpenTelemetry(sourceName: sourceName, configure: c => c.EnableSensitiveData = true)
.Build();
Console.WriteLine(await client.GetResponseAsync("What is AI?"));
Telemetry, Caching, and Tool Calling
using System.ComponentModel;
using Azure;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
using OpenTelemetry.Trace;
// Configure telemetry
var sourceName = Guid.NewGuid().ToString();
var tracerProvider = OpenTelemetry.Sdk.CreateTracerProviderBuilder()
.AddSource(sourceName)
.AddConsoleExporter()
.Build();
// Configure caching
IDistributedCache cache = new MemoryDistributedCache(Options.Create(new MemoryDistributedCacheOptions()));
// Configure tool calling
var chatOptions = new ChatOptions
{
Tools = [AIFunctionFactory.Create(GetPersonAge)]
};
IChatClient azureClient =
new Azure.AI.Inference.ChatCompletionsClient(
new("https://models.inference.ai.azure.com"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("GH_TOKEN")!))
.AsIChatClient("gpt-4o-mini");
IChatClient client = new ChatClientBuilder(azureClient)
.UseDistributedCache(cache)
.UseFunctionInvocation()
.UseOpenTelemetry(sourceName: sourceName, configure: c => c.EnableSensitiveData = true)
.Build();
for (int i = 0; i < 3; i++)
{
Console.WriteLine(await client.GetResponseAsync("How much older is Alice than Bob?", chatOptions));
}
[Description("Gets the age of a person specified by name.")]
static int GetPersonAge(string personName) =>
personName switch
{
"Alice" => 42,
"Bob" => 35,
_ => 26,
};
Dependency Injection
using Azure;
using Azure.AI.Inference;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
// App Setup
var builder = Host.CreateApplicationBuilder();
builder.Services.AddSingleton(
new ChatCompletionsClient(
new("https://models.inference.ai.azure.com"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("GH_TOKEN")!)));
builder.Services.AddDistributedMemoryCache();
builder.Services.AddLogging(b => b.AddConsole().SetMinimumLevel(LogLevel.Trace));
builder.Services.AddChatClient(services => services.GetRequiredService<ChatCompletionsClient>().AsIChatClient("gpt-4o-mini"))
.UseDistributedCache()
.UseLogging();
var app = builder.Build();
// Elsewhere in the app
var chatClient = app.Services.GetRequiredService<IChatClient>();
Console.WriteLine(await chatClient.GetResponseAsync("What is AI?"));
Minimal Web API
using Azure;
using Azure.AI.Inference;
using Microsoft.Extensions.AI;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton(new ChatCompletionsClient(
new("https://models.inference.ai.azure.com"),
new AzureKeyCredential(builder.Configuration["GH_TOKEN"]!)));
builder.Services.AddChatClient(services =>
services.GetRequiredService<ChatCompletionsClient>().AsIChatClient("gpt-4o-mini"));
var app = builder.Build();
app.MapPost("/chat", async (IChatClient client, string message) =>
{
var response = await client.GetResponseAsync(message);
return response.Message;
});
app.Run();
Documentation
Refer to the Microsoft.Extensions.AI libraries documentation for more information and API usage examples.
Feedback & Contributing
We welcome feedback and contributions in our GitHub repo.
No packages depend on Microsoft.Extensions.AI.AzureAIInference.
.NET Framework 4.6.2
- Microsoft.Extensions.AI.Abstractions (>= 9.7.1)
- System.Text.Json (>= 8.0.6)
- System.Memory.Data (>= 8.0.1)
- Azure.AI.Inference (>= 1.0.0-beta.4)
.NET Standard 2.0
- System.Text.Json (>= 8.0.6)
- System.Memory.Data (>= 8.0.1)
- Azure.AI.Inference (>= 1.0.0-beta.4)
- Microsoft.Extensions.AI.Abstractions (>= 9.7.1)
.NET 9.0
- System.Text.Json (>= 9.0.7)
- Azure.AI.Inference (>= 1.0.0-beta.4)
- Microsoft.Extensions.AI.Abstractions (>= 9.7.1)
- System.Memory.Data (>= 9.0.7)
.NET 8.0
- System.Memory.Data (>= 8.0.1)
- Azure.AI.Inference (>= 1.0.0-beta.4)
- Microsoft.Extensions.AI.Abstractions (>= 9.7.1)
- System.Text.Json (>= 8.0.6)
| Version | Downloads | Last updated |
|---|---|---|
| 9.7.1-preview.1.25365.4 | 7 | 07/28/2025 |
| 9.7.0-preview.1.25356.2 | 6 | 07/28/2025 |
| 9.6.0-preview.1.25310.2 | 6 | 07/28/2025 |
| 9.5.0-preview.1.25265.7 | 6 | 07/28/2025 |
| 9.5.0-preview.1.25262.9 | 6 | 07/28/2025 |
| 9.4.4-preview.1.25259.16 | 6 | 07/28/2025 |
| 9.4.3-preview.1.25230.7 | 6 | 07/28/2025 |
| 9.4.0-preview.1.25207.5 | 6 | 07/28/2025 |
| 9.3.0-preview.1.25161.3 | 6 | 07/28/2025 |
| 9.3.0-preview.1.25114.11 | 7 | 07/23/2025 |
| 9.1.0-preview.1.25064.3 | 6 | 07/28/2025 |
| 9.0.1-preview.1.24570.5 | 6 | 07/28/2025 |
| 9.0.0-preview.9.24556.5 | 6 | 07/28/2025 |
| 9.0.0-preview.9.24525.1 | 6 | 07/28/2025 |
| 9.0.0-preview.9.24507.7 | 6 | 07/28/2025 |