diff --git a/webapi/Options/DocumentMemoryOptions.cs b/webapi/Options/DocumentMemoryOptions.cs
index f126c31f3..5d50aa6b8 100644
--- a/webapi/Options/DocumentMemoryOptions.cs
+++ b/webapi/Options/DocumentMemoryOptions.cs
@@ -17,18 +17,6 @@ public class DocumentMemoryOptions
///
internal static readonly Guid GlobalDocumentChatId = Guid.Empty;
- ///
- /// Gets or sets the name of the global document collection.
- ///
- [Required, NotEmptyOrWhitespace]
- public string GlobalDocumentCollectionName { get; set; } = "global-documents";
-
- ///
- /// Gets or sets the prefix for the chat document collection name.
- ///
- [Required, NotEmptyOrWhitespace]
- public string ChatDocumentCollectionNamePrefix { get; set; } = "chat-documents-";
-
///
/// Gets or sets the maximum number of tokens to use when splitting a document into "lines".
/// For more details on tokens and how to count them, see:
diff --git a/webapi/Plugins/Chat/ChatPlugin.cs b/webapi/Plugins/Chat/ChatPlugin.cs
index 7e33951c1..6a8869bfd 100644
--- a/webapi/Plugins/Chat/ChatPlugin.cs
+++ b/webapi/Plugins/Chat/ChatPlugin.cs
@@ -276,7 +276,7 @@ private async Task GetAllowedChatHistoryAsync(
///
/// This is the entry point for getting a chat response. It manages the token limit, saves
- /// messages to memory, and fill in the necessary context variables for completing the
+ /// messages to memory, and fills in the necessary context variables for completing the
/// prompt that will be rendered by the template engine.
///
/// The cancellation token.
diff --git a/webapi/Services/SemanticKernelProvider.cs b/webapi/Services/SemanticKernelProvider.cs
index 9879d54d7..218ed140d 100644
--- a/webapi/Services/SemanticKernelProvider.cs
+++ b/webapi/Services/SemanticKernelProvider.cs
@@ -2,17 +2,11 @@
using System;
using System.Net.Http;
-using System.Threading;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.KernelMemory;
using Microsoft.SemanticKernel;
-using Microsoft.SemanticKernel.Connectors.AzureAISearch;
-using Microsoft.SemanticKernel.Connectors.OpenAI;
-using Microsoft.SemanticKernel.Connectors.Qdrant;
-using Microsoft.SemanticKernel.Memory;
namespace CopilotChat.WebApi.Services;
@@ -21,15 +15,11 @@ namespace CopilotChat.WebApi.Services;
///
public sealed class SemanticKernelProvider
{
- private static IMemoryStore? _volatileMemoryStore;
-
private readonly IKernelBuilder _builderChat;
- private readonly MemoryBuilder _builderMemory;
public SemanticKernelProvider(IServiceProvider serviceProvider, IConfiguration configuration, IHttpClientFactory httpClientFactory)
{
this._builderChat = InitializeCompletionKernel(serviceProvider, configuration, httpClientFactory);
- this._builderMemory = InitializeMigrationMemory(serviceProvider, configuration, httpClientFactory);
}
///
@@ -37,11 +27,6 @@ public SemanticKernelProvider(IServiceProvider serviceProvider, IConfiguration c
///
public Kernel GetCompletionKernel() => this._builderChat.Build();
- ///
- /// Produce semantic-kernel with kernel memory.
- ///
- public ISemanticTextMemory MigrationMemory => this._builderMemory.Build();
-
private static IKernelBuilder InitializeCompletionKernel(
IServiceProvider serviceProvider,
IConfiguration configuration,
@@ -64,12 +49,10 @@ private static IKernelBuilder InitializeCompletionKernel(
azureAIOptions.Endpoint,
azureAIOptions.APIKey,
httpClient: httpClientFactory.CreateClient());
-#pragma warning restore CA2000
break;
case string x when x.Equals("OpenAI", StringComparison.OrdinalIgnoreCase):
var openAIOptions = memoryOptions.GetServiceConfig(configuration, "OpenAI");
-#pragma warning disable CA2000 // No need to dispose of HttpClient instances from IHttpClientFactory
builder.AddOpenAIChatCompletion(
openAIOptions.TextModel,
openAIOptions.APIKey,
@@ -83,82 +66,4 @@ private static IKernelBuilder InitializeCompletionKernel(
return builder;
}
-
- private static MemoryBuilder InitializeMigrationMemory(
- IServiceProvider serviceProvider,
- IConfiguration configuration,
- IHttpClientFactory httpClientFactory)
- {
- var memoryOptions = serviceProvider.GetRequiredService>().Value;
-
- var builder = new MemoryBuilder();
-
- builder.WithLoggerFactory(serviceProvider.GetRequiredService());
- builder.WithMemoryStore(CreateMemoryStore());
-
- switch (memoryOptions.Retrieval.EmbeddingGeneratorType)
- {
- case string x when x.Equals("AzureOpenAI", StringComparison.OrdinalIgnoreCase):
- case string y when y.Equals("AzureOpenAIEmbedding", StringComparison.OrdinalIgnoreCase):
- var azureAIOptions = memoryOptions.GetServiceConfig(configuration, "AzureOpenAIEmbedding");
-#pragma warning disable CA2000 // No need to dispose of HttpClient instances from IHttpClientFactory
- builder.WithAzureOpenAITextEmbeddingGeneration(
- azureAIOptions.Deployment,
- azureAIOptions.Endpoint,
- azureAIOptions.APIKey,
- httpClient: httpClientFactory.CreateClient());
-#pragma warning restore CA2000
- break;
-
- case string x when x.Equals("OpenAI", StringComparison.OrdinalIgnoreCase):
- var openAIOptions = memoryOptions.GetServiceConfig(configuration, "OpenAI");
-#pragma warning disable CA2000 // No need to dispose of HttpClient instances from IHttpClientFactory
- builder.WithOpenAITextEmbeddingGeneration(
- openAIOptions.EmbeddingModel,
- openAIOptions.APIKey,
- httpClient: httpClientFactory.CreateClient());
-#pragma warning restore CA2000
- break;
-
- default:
- throw new ArgumentException($"Invalid {nameof(memoryOptions.Retrieval.EmbeddingGeneratorType)} value in 'KernelMemory' settings.");
- }
- return builder;
-
- IMemoryStore CreateMemoryStore()
- {
- switch (memoryOptions.Retrieval.MemoryDbType)
- {
- case string x when x.Equals("SimpleVectorDb", StringComparison.OrdinalIgnoreCase):
- // Maintain single instance of volatile memory.
- Interlocked.CompareExchange(ref _volatileMemoryStore, new VolatileMemoryStore(), null);
- return _volatileMemoryStore;
-
- case string x when x.Equals("Qdrant", StringComparison.OrdinalIgnoreCase):
- var qdrantConfig = memoryOptions.GetServiceConfig(configuration, "Qdrant");
-
-#pragma warning disable CA2000 // Ownership passed to QdrantMemoryStore
- HttpClient httpClient = new(new HttpClientHandler { CheckCertificateRevocationList = true });
-#pragma warning restore CA2000 // Ownership passed to QdrantMemoryStore
- if (!string.IsNullOrWhiteSpace(qdrantConfig.APIKey))
- {
- httpClient.DefaultRequestHeaders.Add("api-key", qdrantConfig.APIKey);
- }
-
- return
- new QdrantMemoryStore(
- httpClient: httpClient,
- 1536,
- qdrantConfig.Endpoint,
- loggerFactory: serviceProvider.GetRequiredService());
-
- case string x when x.Equals("AzureAISearch", StringComparison.OrdinalIgnoreCase):
- var acsConfig = memoryOptions.GetServiceConfig(configuration, "AzureAISearch");
- return new AzureAISearchMemoryStore(acsConfig.Endpoint, acsConfig.APIKey);
-
- default:
- throw new InvalidOperationException($"Invalid 'MemoryDbType' type '{memoryOptions.Retrieval.MemoryDbType}'.");
- }
- }
- }
}
diff --git a/webapi/appsettings.json b/webapi/appsettings.json
index f11e34665..10316c136 100644
--- a/webapi/appsettings.json
+++ b/webapi/appsettings.json
@@ -95,8 +95,6 @@
// https://learn.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-6.0
//
"DocumentMemory": {
- "GlobalDocumentCollectionName": "global-documents", // OBSOLETE: Used for legacy migration
- "ChatDocumentCollectionNamePrefix": "chat-documents-", // OBSOLETE: Used for legacy migration
"DocumentLineSplitMaxTokens": 72,
"DocumentChunkMaxTokens": 512,
"FileSizeLimit": 4000000,