forked from microsoft/semantic-kernel-starters
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathProgram.cs
74 lines (65 loc) · 2.31 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System.Reflection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.PromptTemplates.Handlebars;
using Plugins;
var kernelSettings = KernelSettings.LoadSettings();
var builder = Kernel.CreateBuilder();
builder.Services.AddLogging(c => c.SetMinimumLevel(LogLevel.Information).AddDebug());
builder.Services.AddChatCompletionService(kernelSettings);
builder.Plugins.AddFromType<LightPlugin>();
Kernel kernel = builder.Build();
// Load prompt from resource
using StreamReader reader = new(Assembly.GetExecutingAssembly().GetManifestResourceStream("prompts.Chat.yaml")!);
KernelFunction prompt = kernel.CreateFunctionFromPromptYaml(
reader.ReadToEnd(),
promptTemplateFactory: new HandlebarsPromptTemplateFactory()
);
// Create the chat history
ChatHistory chatMessages = [];
// Loop till we are cancelled
while (true)
{
// Get user input
System.Console.Write("User > ");
chatMessages.AddUserMessage(Console.ReadLine()!);
// Get the chat completions
OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};
var result = kernel.InvokeStreamingAsync<StreamingChatMessageContent>(
prompt,
arguments: new(openAIPromptExecutionSettings) {
{ "messages", chatMessages }
});
// Print the chat completions
ChatMessageContent? chatMessageContent = null;
await foreach (var content in result)
{
System.Console.Write(content);
if (chatMessageContent == null)
{
System.Console.Write("Assistant > ");
chatMessageContent = new ChatMessageContent(
content.Role ?? AuthorRole.Assistant,
content.ModelId!,
content.Content!,
content.InnerContent,
content.Encoding,
content.Metadata);
}
else
{
chatMessageContent.Content += content;
}
}
System.Console.WriteLine();
if (chatMessageContent != null)
{
chatMessages.AddMessage(chatMessageContent.Role, chatMessageContent.Content!);
}
}