chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
// 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;
|
||||
|
||||
/// <summary>
|
||||
/// These examples demonstrate different ways of using chat completion with Azure OpenAI API.
|
||||
/// </summary>
|
||||
public class AzureOpenAI_ChatCompletion(ITestOutputHelper output) : BaseTest(output)
|
||||
{
|
||||
/// <summary>
|
||||
/// Sample showing how to use <see cref="Kernel"/> with chat completion and chat prompt syntax.
|
||||
/// </summary>
|
||||
[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("""
|
||||
<message role="system">You are a librarian, expert about books</message>
|
||||
<message role="user">Hi, I'm looking for book suggestions</message>
|
||||
""");
|
||||
|
||||
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($"<message role=\"assistant\"><![CDATA[{reply}]]></message>");
|
||||
chatPrompt.AppendLine("<message role=\"user\">I love history and philosophy, I'd like to learn something new about Greece, any suggestion</message>");
|
||||
|
||||
reply = await kernel.InvokePromptAsync(chatPrompt.ToString());
|
||||
|
||||
Console.WriteLine(reply);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sample showing how to use <see cref="IChatCompletionService"/> directly with a <see cref="ChatHistory"/>.
|
||||
/// </summary>
|
||||
[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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user