// Copyright (c) Microsoft. All rights reserved. using Microsoft.SemanticKernel; using Step00.Steps; namespace Step00; /// /// Demonstrate creation of the simplest and /// eliciting its response to three explicit user messages. /// public class Step00_Processes(ITestOutputHelper output) : BaseTest(output, redirectSystemConsoleOutput: true) { public static class ProcessEvents { public const string StartProcess = nameof(StartProcess); } /// /// Demonstrates the creation of the simplest possible process with multiple steps /// /// A [Fact] public async Task UseSimplestProcessAsync() { // Create a simple kernel Kernel kernel = Kernel.CreateBuilder() .Build(); // Create a process that will interact with the chat completion service ProcessBuilder process = new("ChatBot"); var startStep = process.AddStepFromType(); var doSomeWorkStep = process.AddStepFromType(); var doMoreWorkStep = process.AddStepFromType(); var lastStep = process.AddStepFromType(); // Define the process flow process .OnInputEvent(ProcessEvents.StartProcess) .SendEventTo(new ProcessFunctionTargetBuilder(startStep)); startStep .OnFunctionResult() .SendEventTo(new ProcessFunctionTargetBuilder(doSomeWorkStep)); doSomeWorkStep .OnFunctionResult() .SendEventTo(new ProcessFunctionTargetBuilder(doMoreWorkStep)); doMoreWorkStep .OnFunctionResult() .SendEventTo(new ProcessFunctionTargetBuilder(lastStep)); lastStep .OnFunctionResult() .StopProcess(); // Build the process to get a handle that can be started KernelProcess kernelProcess = process.Build(); // Start the process with an initial external event await using var runningProcess = await kernelProcess.StartAsync( kernel, new KernelProcessEvent() { Id = ProcessEvents.StartProcess, Data = null }); } }