Skip to content

Commit 7c1de79

Browse files
authored
Support Build() options in KM builder extension methods (microsoft#980)
Fix https://github.com/microsoft/kernel-memory/issues/977
1 parent bddb8af commit 7c1de79

File tree

5 files changed

+53
-10
lines changed

5 files changed

+53
-10
lines changed

Directory.Packages.props

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,19 +96,19 @@
9696
</ItemGroup>
9797
<!-- Tests -->
9898
<ItemGroup>
99-
<PackageVersion Include="coverlet.collector" Version="6.0.2">
99+
<PackageVersion Include="coverlet.collector" Version="6.0.3">
100100
<PrivateAssets>all</PrivateAssets>
101101
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
102102
</PackageVersion>
103103
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
104-
<PackageVersion Include="xunit" Version="2.9.2" />
104+
<PackageVersion Include="xunit" Version="2.9.3" />
105105
<PackageVersion Include="xunit.abstractions" Version="2.0.3" />
106106
<PackageVersion Include="xunit.extensibility.core" Version="2.7.1" />
107-
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.0">
107+
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.1">
108108
<PrivateAssets>all</PrivateAssets>
109109
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
110110
</PackageVersion>
111-
<PackageVersion Include="Xunit.DependencyInjection" Version="9.7.0" />
111+
<PackageVersion Include="Xunit.DependencyInjection" Version="9.7.1" />
112112
<PackageVersion Include="Xunit.DependencyInjection.Logging" Version="9.0.0" />
113113
</ItemGroup>
114114
<!-- Aspire -->

examples/204-dotnet-ASP.NET-MVC-integration/204-dotnet-ASP.NET-MVC-integration.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
</PropertyGroup>
1111

1212
<ItemGroup>
13-
<PackageReference Include="Microsoft.KernelMemory.Service.AspNetCore" Version="0.95.241216.2" />
13+
<PackageReference Include="Microsoft.KernelMemory.Service.AspNetCore" Version="0.96.250115.1" />
1414
</ItemGroup>
1515

1616
</Project>

examples/301-discord-test-application/301-discord-test-application.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<ItemGroup>
1414
<PackageReference Include="Aspire.Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.0" />
1515
<PackageReference Include="Discord.Net" Version="3.16.0" />
16-
<PackageReference Include="Microsoft.KernelMemory.Service.AspNetCore" Version="0.95.241216.2" />
16+
<PackageReference Include="Microsoft.KernelMemory.Service.AspNetCore" Version="0.96.250115.1" />
1717
</ItemGroup>
1818

1919
</Project>

service/Core/ServiceCollectionExtensions.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@ public static partial class ServiceCollectionExtensions
1515
/// </summary>
1616
/// <param name="services">The <see cref="IServiceCollection"/> to add the services to.</param>
1717
/// <param name="setupAction">An optional action to configure the <see cref="IKernelMemory">Kernel Memory builder</see>.</param>
18+
/// <param name="buildOptions">Optional options passed to Build() call</param>
1819
/// <returns>A reference to this instance after the operation has completed.</returns>
19-
public static IServiceCollection AddKernelMemory(this IServiceCollection services, Action<IKernelMemoryBuilder>? setupAction = null)
20+
public static IServiceCollection AddKernelMemory(
21+
this IServiceCollection services,
22+
Action<IKernelMemoryBuilder>? setupAction = null,
23+
KernelMemoryBuilderBuildOptions? buildOptions = null)
2024
{
2125
var kernelMemoryBuilder = new KernelMemoryBuilder(services);
2226
setupAction?.Invoke(kernelMemoryBuilder);
2327

24-
var kernelMemory = kernelMemoryBuilder.Build();
28+
var kernelMemory = kernelMemoryBuilder.Build(buildOptions);
2529
services.AddSingleton<IKernelMemory>(kernelMemory);
2630

2731
return services;
@@ -32,14 +36,18 @@ public static IServiceCollection AddKernelMemory(this IServiceCollection service
3236
/// </summary>
3337
/// <param name="services">The <see cref="IServiceCollection"/> to add the services to.</param>
3438
/// <param name="setupAction">An optional action to configure the <see cref="IKernelMemory">Kernel Memory builder</see>.</param>
39+
/// <param name="buildOptions">Optional options passed to Build() call</param>
3540
/// <returns>A reference to this instance after the operation has completed.</returns>
36-
public static IServiceCollection AddKernelMemory<T>(this IServiceCollection services, Action<IKernelMemoryBuilder>? setupAction = null)
41+
public static IServiceCollection AddKernelMemory<T>(
42+
this IServiceCollection services,
43+
Action<IKernelMemoryBuilder>? setupAction = null,
44+
KernelMemoryBuilderBuildOptions? buildOptions = null)
3745
where T : class, IKernelMemory
3846
{
3947
var kernelMemoryBuilder = new KernelMemoryBuilder(services);
4048
setupAction?.Invoke(kernelMemoryBuilder);
4149

42-
var kernelMemory = kernelMemoryBuilder.Build<T>();
50+
var kernelMemory = kernelMemoryBuilder.Build<T>(buildOptions);
4351

4452
services.AddSingleton(kernelMemory);
4553
services.AddSingleton<IKernelMemory>(provider => provider.GetRequiredService<T>());

service/tests/Core.UnitTests/KernelMemoryBuilderTest.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.KernelMemory;
55
using Microsoft.KernelMemory.AI;
66
using Microsoft.KernelMemory.DocumentStorage;
7+
using Microsoft.KernelMemory.DocumentStorage.DevTools;
78
using Microsoft.KernelMemory.MemoryStorage;
89
using Microsoft.KernelMemory.Pipeline;
910
using Microsoft.KernelMemory.Pipeline.Queue;
@@ -116,14 +117,48 @@ public void ItDetectsMissingEmbeddingGenerator()
116117
[Trait("Category", "UnitTest")]
117118
public void ItCanMixPersistentAndVolatileStorageIfNeeded()
118119
{
120+
// Arrange
119121
KernelMemoryBuilderBuildOptions kmbOptions = new()
120122
{
121123
AllowMixingVolatileAndPersistentData = true
122124
};
123125

126+
// Act - Assert no exception occurs
124127
new KernelMemoryBuilder()
125128
.WithOpenAIDefaults("key")
129+
.WithSimpleFileStorage(SimpleFileStorageConfig.Volatile)
126130
.WithPostgresMemoryDb("Host=localhost;Port=5432;Username=public;Password=;Database=public")
127131
.Build<MemoryServerless>(kmbOptions);
128132
}
133+
134+
[Fact]
135+
[Trait("Category", "UnitTest")]
136+
public void ItCanMixPersistentAndVolatileStorageIfNeeded2()
137+
{
138+
// Arrange
139+
KernelMemoryBuilderBuildOptions kmbOptions = new()
140+
{
141+
AllowMixingVolatileAndPersistentData = true
142+
};
143+
144+
var serviceCollection1 = new ServiceCollection();
145+
var serviceCollection2 = new ServiceCollection();
146+
147+
// Act - Assert no exception occurs
148+
serviceCollection1.AddKernelMemory(builder =>
149+
{
150+
builder
151+
.WithOpenAIDefaults("key")
152+
.WithSimpleFileStorage(SimpleFileStorageConfig.Volatile)
153+
.WithPostgresMemoryDb("Host=localhost;Port=5432;Username=public;Password=;Database=public");
154+
}, kmbOptions);
155+
156+
serviceCollection2.AddKernelMemory<MemoryServerless>(builder =>
157+
{
158+
builder
159+
.WithOpenAIDefaults("key")
160+
.WithSimpleFileStorage(SimpleFileStorageConfig.Volatile)
161+
.WithPostgresMemoryDb("Host=localhost;Port=5432;Username=public;Password=;Database=public");
162+
}, kmbOptions);
163+
}
129164
}

0 commit comments

Comments
 (0)