workshop/dotnet/Lessons/Lesson3/Program.cs (33 lines of code) (raw):
using Core.Utilities.Config;
// TODO: Step 1 - Add import for Plugins
// TODO: Step 5 - Add import required for StockService
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
// Add ChatCompletion import
using Microsoft.SemanticKernel.ChatCompletion;
// Initialize the kernel with chat completion
IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion();
Kernel kernel = builder.Build();
// TODO: Step 2 - Initialize Time plugin and registration in the kernel
// TODO: Step 6 - Initialize Stock Data Plugin and register it in the kernel
// Get chatCompletionService and initialize chatHistory with system prompt
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone");
// Remove the promptExecutionSettings and kernelArgs initialization code
// Add system prompt
OpenAIPromptExecutionSettings promptExecutionSettings = new()
{
// Step 3 - Add Auto invoke kernel functions as the tool call behavior
};
// Initialize kernel arguments
KernelArguments kernelArgs = new(promptExecutionSettings);
// Execute program.
const string terminationPhrase = "quit";
string? userInput;
do
{
Console.Write("User > ");
userInput = Console.ReadLine();
if (userInput is not null and not terminationPhrase)
{
Console.Write("Assistant > ");
// Initialize fullMessage variable and add user input to chat history
string fullMessage = "";
chatHistory.AddUserMessage(userInput);
// TODO: Step 4 - Provide promptExecutionSettings and kernel arguments
await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory))
{
Console.Write(chatUpdate.Content);
fullMessage += chatUpdate.Content ?? "";
}
chatHistory.AddAssistantMessage(fullMessage);
Console.WriteLine();
}
}
while (userInput != terminationPhrase);