// Copyright (c) Microsoft. All rights reserved. using Microsoft.Extensions.Configuration; namespace SemanticKernel.AotCompatibility; /// /// This application demonstrates how to use the Semantic Kernel in AOT applications. /// internal sealed class Program { private static async Task Main(string[] args) { var config = new ConfigurationBuilder().AddUserSecrets().Build(); bool success = await RunAsync(s_samples, config); return success ? 1 : 0; } private static readonly Func[] s_samples = [ // Samples showing how to create a kernel function and invoke it in AOT applications. KernelFunctionSamples.CreateFunctionFromLambda, // Samples showing how to create, import and add a kernel plugin and invoke its functions in AOT applications. KernelPluginSamples.CreatePluginFromType, KernelPluginSamples.ImportPluginFromType, KernelPluginSamples.AddPluginFromType, // Samples showing how to use ONNX chat completion service in AOT applications. OnnxChatCompletionSamples.GetChatMessageContent, OnnxChatCompletionSamples.GetStreamingChatMessageContents ]; private static async Task RunAsync(IEnumerable> functionsToRun, IConfigurationRoot config) { bool failed = false; foreach (var function in functionsToRun) { Console.Write($"Running - {function.Method.DeclaringType?.Name}.{function.Method.Name}"); try { await function(config); } catch (Exception) { failed = true; } } return failed; } }