using Microsoft.AspNetCore.Mvc; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.ChatCompletion; using Microsoft.SemanticKernel.Embeddings; using Microsoft.SemanticKernel.Memory; using Microsoft.SemanticKernel.Connectors.InMemory; #pragma warning disable SKEXP0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. namespace ChatApi.Controllers { [ApiController] [Route("[controller]")] public class ChatController : ControllerBase { private readonly ILogger _logger; private readonly ChatHistoryService _chatHistoryService; private readonly IChatCompletionService _chatCompletionService; private readonly Kernel _kernel; public ChatController(ILogger logger, ChatHistoryService chatHistoryService, IChatCompletionService chatCompletionService, Kernel kernel) { _logger = logger; _chatHistoryService = chatHistoryService; _chatCompletionService = chatCompletionService; _kernel = kernel; } [HttpGet(Name = "Response")] public async Task Get([FromQuery] ChatRequest chatRequest) { var stopWatch = new System.Diagnostics.Stopwatch(); stopWatch.Start(); SessionIdStore sessionIdStore = new SessionIdStore(HttpContext); var sessionId = sessionIdStore.GetSessionId(); var history = _chatHistoryService.Get(sessionId); history.AddUserMessage(chatRequest.Message); var embeddingGenerator = _kernel.GetRequiredService(); // Setup a memory store and create a memory out of it #pragma warning disable SKEXP0020 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. var memoryStore = new InMemoryVectorStore(); #pragma warning restore SKEXP0020 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. var memory = new SemanticTextMemory(memoryStore, embeddingGenerator); // Loading it for Save, Recall and other methods _kernel.ImportPluginFromObject(new TextMemoryPlugin(memory)); string MemoryCollectionName = "MyCustomDataCollection"; var option = new PromptExecutionSettings { Memory = memory, MemoryCollectionName = MemoryCollectionName }; var response = await _chatCompletionService.GetChatMessageContentAsync(history); history.AddMessage(response.Role, response.Content ?? ""); _chatHistoryService.UpdateHistory(sessionId, history); stopWatch.Stop(); return $"{response.Content ?? ""}\n\nTempo: {stopWatch.ElapsedMilliseconds/1000}s"; } } } #pragma warning restore SKEXP0001 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.