// Copyright (c) Microsoft. All rights reserved. using System.Text; using Azure.Identity; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.ChatCompletion; using Microsoft.SemanticKernel.Connectors.AzureOpenAI; namespace ChatCompletion; /// /// These examples demonstrate different ways of using chat completion with Azure OpenAI API. /// public class AzureOpenAI_ChatCompletion(ITestOutputHelper output) : BaseTest(output) { /// /// Sample showing how to use with chat completion and chat prompt syntax. /// [Fact] public async Task ChatPromptAsync() { Console.WriteLine("======== Azure Open AI - Chat Completion ========"); Assert.NotNull(TestConfiguration.AzureOpenAI.ChatDeploymentName); Assert.NotNull(TestConfiguration.AzureOpenAI.Endpoint); StringBuilder chatPrompt = new(""" You are a librarian, expert about books Hi, I'm looking for book suggestions """); var kernelBuilder = Kernel.CreateBuilder(); if (string.IsNullOrEmpty(TestConfiguration.AzureOpenAI.ApiKey)) { kernelBuilder.AddAzureOpenAIChatCompletion( deploymentName: TestConfiguration.AzureOpenAI.ChatDeploymentName, endpoint: TestConfiguration.AzureOpenAI.Endpoint, credentials: new DefaultAzureCredential(), modelId: TestConfiguration.AzureOpenAI.ChatModelId); } else { kernelBuilder.AddAzureOpenAIChatCompletion( deploymentName: TestConfiguration.AzureOpenAI.ChatDeploymentName, endpoint: TestConfiguration.AzureOpenAI.Endpoint, apiKey: TestConfiguration.AzureOpenAI.ApiKey, modelId: TestConfiguration.AzureOpenAI.ChatModelId); } var kernel = kernelBuilder.Build(); var reply = await kernel.InvokePromptAsync(chatPrompt.ToString()); chatPrompt.AppendLine($""); chatPrompt.AppendLine("I love history and philosophy, I'd like to learn something new about Greece, any suggestion"); reply = await kernel.InvokePromptAsync(chatPrompt.ToString()); Console.WriteLine(reply); } /// /// Sample showing how to use directly with a . /// [Fact] public async Task ServicePromptAsync() { Console.WriteLine("======== Azure Open AI - Chat Completion ========"); Assert.NotNull(TestConfiguration.AzureOpenAI.ChatDeploymentName); Assert.NotNull(TestConfiguration.AzureOpenAI.Endpoint); AzureOpenAIChatCompletionService chatCompletionService = string.IsNullOrEmpty(TestConfiguration.AzureOpenAI.ApiKey) ? new( deploymentName: TestConfiguration.AzureOpenAI.ChatDeploymentName, endpoint: TestConfiguration.AzureOpenAI.Endpoint, credentials: new DefaultAzureCredential(), modelId: TestConfiguration.AzureOpenAI.ChatModelId) : new( deploymentName: TestConfiguration.AzureOpenAI.ChatDeploymentName, endpoint: TestConfiguration.AzureOpenAI.Endpoint, apiKey: TestConfiguration.AzureOpenAI.ApiKey, modelId: TestConfiguration.AzureOpenAI.ChatModelId); Console.WriteLine("Chat content:"); Console.WriteLine("------------------------"); var chatHistory = new ChatHistory("You are a librarian, expert about books"); // First user message chatHistory.AddUserMessage("Hi, I'm looking for book suggestions"); OutputLastMessage(chatHistory); // First assistant message var reply = await chatCompletionService.GetChatMessageContentAsync(chatHistory); chatHistory.Add(reply); OutputLastMessage(chatHistory); // Second user message chatHistory.AddUserMessage("I love history and philosophy, I'd like to learn something new about Greece, any suggestion"); OutputLastMessage(chatHistory); // Second assistant message reply = await chatCompletionService.GetChatMessageContentAsync(chatHistory); chatHistory.Add(reply); OutputLastMessage(chatHistory); } }