Microsoft.Extensions.AI.OpenAI 9.5.0-preview.1.25265.7
Microsoft.Extensions.AI.OpenAI
Provides an implementation of the IChatClient
interface for the OpenAI
package and OpenAI-compatible endpoints.
Install the package
From the command-line:
dotnet add package Microsoft.Extensions.AI.OpenAI
Or directly in the C# project file:
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="[CURRENTVERSION]" />
</ItemGroup>
Usage Examples
Chat
using Microsoft.Extensions.AI;
IChatClient client =
new OpenAI.Chat.ChatClient("gpt-4o-mini", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsIChatClient();
Console.WriteLine(await client.GetResponseAsync("What is AI?"));
Chat + Conversation History
using Microsoft.Extensions.AI;
IChatClient client =
new OpenAI.Chat.ChatClient("gpt-4o-mini", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsIChatClient();
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 Microsoft.Extensions.AI;
IChatClient client =
new OpenAI.Chat.ChatClient("gpt-4o-mini", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsIChatClient();
await foreach (var update in client.GetStreamingResponseAsync("What is AI?"))
{
Console.Write(update);
}
Tool calling
using System.ComponentModel;
using Microsoft.Extensions.AI;
IChatClient openaiClient =
new OpenAI.Chat.ChatClient("gpt-4o-mini", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsIChatClient();
IChatClient client = new ChatClientBuilder(openaiClient)
.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 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 openaiClient =
new OpenAI.Chat.ChatClient("gpt-4o-mini", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsIChatClient();
IChatClient client = new ChatClientBuilder(openaiClient)
.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 Microsoft.Extensions.AI;
using OpenTelemetry.Trace;
// Configure OpenTelemetry exporter
var sourceName = Guid.NewGuid().ToString();
var tracerProvider = OpenTelemetry.Sdk.CreateTracerProviderBuilder()
.AddSource(sourceName)
.AddConsoleExporter()
.Build();
IChatClient openaiClient =
new OpenAI.Chat.ChatClient("gpt-4o-mini", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsIChatClient();
IChatClient client = new ChatClientBuilder(openaiClient)
.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 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 openaiClient =
new OpenAI.Chat.ChatClient("gpt-4o-mini", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsIChatClient();
IChatClient client = new ChatClientBuilder(openaiClient)
.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,
};
Text embedding generation
using Microsoft.Extensions.AI;
IEmbeddingGenerator<string, Embedding<float>> generator =
new OpenAI.Embeddings.EmbeddingClient("text-embedding-3-small", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsIEmbeddingGenerator();
var embeddings = await generator.GenerateAsync("What is AI?");
Console.WriteLine(string.Join(", ", embeddings[0].Vector.ToArray()));
Text embedding generation with caching
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()));
IEmbeddingGenerator<string, Embedding<float>> openAIGenerator =
new OpenAI.Embeddings.EmbeddingClient("text-embedding-3-small", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsIEmbeddingGenerator();
IEmbeddingGenerator<string, Embedding<float>> generator = new EmbeddingGeneratorBuilder<string, Embedding<float>>(openAIGenerator)
.UseDistributedCache(cache)
.Build();
foreach (var prompt in new[] { "What is AI?", "What is .NET?", "What is AI?" })
{
var embeddings = await generator.GenerateAsync(prompt);
Console.WriteLine(string.Join(", ", embeddings[0].Vector.ToArray()));
}
Dependency Injection
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
// App Setup
var builder = Host.CreateApplicationBuilder();
builder.Services.AddDistributedMemoryCache();
builder.Services.AddLogging(b => b.AddConsole().SetMinimumLevel(LogLevel.Trace));
builder.Services.AddChatClient(services =>
new OpenAI.Chat.ChatClient("gpt-4o-mini", Environment.GetEnvironmentVariable("OPENAI_API_KEY")).AsIChatClient())
.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 Microsoft.Extensions.AI;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddChatClient(services =>
new OpenAI.Chat.ChatClient("gpt-4o-mini", builder.Configuration["OPENAI_API_KEY"]).AsIChatClient());
builder.Services.AddEmbeddingGenerator(services =>
new OpenAI.Embeddings.EmbeddingClient("text-embedding-3-small", builder.Configuration["OPENAI_API_KEY"]).AsIEmbeddingGenerator());
var app = builder.Build();
app.MapPost("/chat", async (IChatClient client, string message) =>
{
var response = await client.GetResponseAsync(message);
return response.Message;
});
app.MapPost("/embedding", async (IEmbeddingGenerator<string, Embedding<float>> client, string message) =>
{
var response = await client.GenerateAsync(message);
return response[0].Vector;
});
app.Run();
Documentation
Learn how to create a conversational .NET console chat app using an OpenAI or Azure OpenAI model with the Quickstart - Build an AI chat app with .NET documentation.
Feedback & Contributing
We welcome feedback and contributions in our GitHub repo.
Showing the top 20 packages that depend on Microsoft.Extensions.AI.OpenAI.
Packages | Downloads |
---|---|
Microsoft.SemanticKernel.Connectors.OpenAI
Semantic Kernel connectors for OpenAI. Contains clients for chat completion, embedding and DALL-E text to image.
|
1 |
.NET Framework 4.6.2
- Microsoft.Extensions.AI.Abstractions (>= 9.5.0)
- System.Text.Json (>= 8.0.5)
- System.Memory.Data (>= 8.0.1)
- OpenAI (>= 2.2.0-beta.4)
.NET Standard 2.0
- System.Text.Json (>= 8.0.5)
- System.Memory.Data (>= 8.0.1)
- OpenAI (>= 2.2.0-beta.4)
- Microsoft.Extensions.AI.Abstractions (>= 9.5.0)
.NET 9.0
- System.Text.Json (>= 9.0.5)
- OpenAI (>= 2.2.0-beta.4)
- Microsoft.Extensions.AI.Abstractions (>= 9.5.0)
- System.Memory.Data (>= 9.0.5)
.NET 8.0
- System.Memory.Data (>= 8.0.1)
- OpenAI (>= 2.2.0-beta.4)
- Microsoft.Extensions.AI.Abstractions (>= 9.5.0)
- System.Text.Json (>= 8.0.5)
Version | Downloads | Last updated |
---|---|---|
9.5.0-preview.1.25265.7 | 1 | 05/31/2025 |
9.5.0-preview.1.25262.9 | 0 | 05/13/2025 |
9.4.4-preview.1.25259.16 | 0 | 05/10/2025 |
9.4.3-preview.1.25230.7 | 0 | 05/01/2025 |
9.4.0-preview.1.25207.5 | 0 | 04/08/2025 |
9.3.0-preview.1.25161.3 | 0 | 03/11/2025 |
9.3.0-preview.1.25114.11 | 0 | 02/16/2025 |
9.1.0-preview.1.25064.3 | 0 | 01/14/2025 |
9.0.1-preview.1.24570.5 | 0 | 11/21/2024 |
9.0.0-preview.9.24556.5 | 0 | 11/12/2024 |
9.0.0-preview.9.24525.1 | 0 | 10/26/2024 |
9.0.0-preview.9.24507.7 | 0 | 10/08/2024 |