![]() |
VOOZH | about |
dotnet add package Soenneker.SemanticKernel.Pool --version 4.0.330
NuGet\Install-Package Soenneker.SemanticKernel.Pool -Version 4.0.330
<PackageReference Include="Soenneker.SemanticKernel.Pool" Version="4.0.330" />
<PackageVersion Include="Soenneker.SemanticKernel.Pool" Version="4.0.330" />Directory.Packages.props
<PackageReference Include="Soenneker.SemanticKernel.Pool" />Project file
paket add Soenneker.SemanticKernel.Pool --version 4.0.330
#r "nuget: Soenneker.SemanticKernel.Pool, 4.0.330"
#:package Soenneker.SemanticKernel.Pool@4.0.330
#addin nuget:?package=Soenneker.SemanticKernel.Pool&version=4.0.330Install as a Cake Addin
#tool nuget:?package=Soenneker.SemanticKernel.Pool&version=4.0.330Install as a Cake Tool
👁 alternate text is missing from this package README image
👁 alternate text is missing from this package README image
👁 alternate text is missing from this package README image
👁 alternate text is missing from this package README image
A high-performance, thread-safe pool implementation for Microsoft Semantic Kernel instances with built-in rate limiting capabilities.
dotnet add package Soenneker.SemanticKernel.Pool
services.AddSemanticKernelPoolAsSingleton();
This library has several extension packages for different AI providers:
// Program.cs or Startup.cs
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add the kernel pool as a singleton
builder.Services.AddSemanticKernelPoolAsSingleton();
var app = builder.Build();
// Get the pool service
var kernelPool = app.Services.GetRequiredService<ISemanticKernelPool>();
// Create SemanticKernelOptions (example uses OpenAI)
var options = new SemanticKernelOptions
{
ApiKey = "your-api-key",
Endpoint = "https://api.openai.com/v1",
Model = "gpt-4",
KernelFactory = async (opts, _) =>
{
return Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: opts.ModelId!,
new OpenAIClient(
new ApiKeyCredential(opts.ApiKey),
new OpenAIClientOptions { Endpoint = new Uri(opts.Endpoint) }));
},
// Rate Limiting
RequestsPerSecond = 10,
RequestsPerMinute = 100,
RequestsPerDay = 1000,
TokensPerDay = 10000
};
// Register one or more entries under a "sub-pool-1" sub-pool
// poolId: "sub-pool-1", entryKey: "entry1"
await kernelPool.Register("sub-pool-1", "entry1", options);
// You can register additional entries (with different entryKey or options)
// await kernelPool.Register("sub-pool-1", "entry2", otherOptions);
await app.RunAsync();
}
}
Each call to Register(...) creates a new �entry� under the specified poolId. Entries are checked out in the order they were added (round-robin), subject to rate limits. You can have multiple sub-pools by choosing different poolId strings:
// Register two separate sub-pools
await kernelPool.Register("reasoning", "o4-mini-high", reasoningOptions);
await kernelPool.Register("high-performance", "4o", highPerformanceOptions);
public class MyService
{
private readonly ISemanticKernelPool _kernelPool;
public MyService(ISemanticKernelPool kernelPool)
{
_kernelPool = kernelPool;
}
public async Task ProcessAsync()
{
// Attempt to get an available kernel from the "my-kernel" sub-pool
// If no type is provided, defaults to KernelType.Chat
var (kernel, entry) = await _kernelPool.GetAvailableKernel("my-kernel");
if (kernel is null || entry is null)
{
Console.WriteLine("No available kernel or operation was cancelled.");
return;
}
// Use the kernel as usual
var chatCompletion = kernel.GetService<IChatCompletionService>();
var chatHistory = new ChatHistory();
chatHistory.AddMessage(AuthorRole.User, "What's the capital of France?");
var response = await chatCompletion.GetChatMessageContentAsync(chatHistory);
Console.WriteLine($"Response: {response.Content}");
// Check rate limit usage
var remaining = await entry.RemainingQuota();
Console.WriteLine($"Remaining quotas � Second: {remaining.Second}, Minute: {remaining.Minute}, Day: {remaining.Day}");
}
}
Remove a single entry from a sub-pool
bool removed = await kernelPool.Remove("sub-pool-1", "entry1");
Clear a single sub-pool (removes all entries under that poolId and clears cache for those entries)
await kernelPool.Clear("sub-pool-1");
Clear all sub-pools (removes every poolId, all entries, and clears the entire cache)
await kernelPool.ClearAll();
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
Showing the top 5 NuGet packages that depend on Soenneker.SemanticKernel.Pool:
| Package | Downloads |
|---|---|
|
Soenneker.SemanticKernel.Pool.OpenAi
Provides OpenAI-specific registration extensions for KernelPoolManager, enabling integration with local LLMs via Semantic Kernel. |
|
|
Soenneker.SemanticKernel.Pool.Ollama
Provides Ollama-specific registration extensions for KernelPoolManager, enabling integration with local LLMs via Semantic Kernel. |
|
|
Soenneker.SemanticKernel.Pool.Gemini
Provides Gemini-specific registration extensions for KernelPoolManager, enabling integration with local LLMs via Semantic Kernel. |
|
|
Soenneker.SemanticKernel.Pool.OpenAi.Azure
Provides Azure OpenAI-specific registration extensions for KernelPoolManager, enabling integration with local LLMs via Semantic Kernel. |
|
|
Soenneker.SemanticKernel.Pool.Mistral
Provides Mistral-specific registration extensions for KernelPoolManager, enabling integration via Semantic Kernel. |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.330 | 81 | 6/17/2026 |
| 4.0.329 | 333 | 6/10/2026 |
| 4.0.328 | 282 | 6/10/2026 |
| 4.0.327 | 394 | 6/7/2026 |
| 4.0.326 | 239 | 6/6/2026 |
| 4.0.325 | 202 | 6/6/2026 |
| 4.0.324 | 178 | 6/6/2026 |
| 4.0.323 | 179 | 6/5/2026 |
| 4.0.322 | 164 | 6/5/2026 |
| 4.0.319 | 394 | 5/28/2026 |
| 4.0.318 | 117 | 5/28/2026 |
| 4.0.317 | 320 | 5/13/2026 |
| 4.0.316 | 263 | 5/12/2026 |
| 4.0.315 | 273 | 5/11/2026 |
| 4.0.314 | 124 | 5/11/2026 |
| 4.0.313 | 326 | 5/2/2026 |
| 4.0.312 | 209 | 5/1/2026 |
| 4.0.311 | 173 | 4/30/2026 |
| 4.0.310 | 161 | 4/29/2026 |
| 4.0.309 | 299 | 4/24/2026 |
Update dependency Soenneker.SemanticKernel.Cache to 4.0.770 (#727)