mirror of https://github.com/microsoft/autogen.git
105 lines
3.2 KiB
C#
105 lines
3.2 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// KernelFunctionExtensionTests.cs
|
|
|
|
using System.ComponentModel;
|
|
using ApprovalTests;
|
|
using ApprovalTests.Namers;
|
|
using ApprovalTests.Reporters;
|
|
using AutoGen.SemanticKernel.Extension;
|
|
using FluentAssertions;
|
|
using Microsoft.SemanticKernel;
|
|
using Newtonsoft.Json;
|
|
using Xunit;
|
|
|
|
namespace AutoGen.SemanticKernel.Tests;
|
|
|
|
public class TestPlugin
|
|
{
|
|
public bool IsOn { get; set; }
|
|
|
|
[KernelFunction]
|
|
[Description("Gets the state of the light.")]
|
|
public string GetState() => this.IsOn ? "on" : "off";
|
|
|
|
[KernelFunction]
|
|
[Description("Changes the state of the light.'")]
|
|
public string ChangeState(
|
|
[Description("new state")] bool newState)
|
|
{
|
|
this.IsOn = newState;
|
|
var state = this.GetState();
|
|
|
|
// Print the state to the console
|
|
Console.ForegroundColor = ConsoleColor.DarkBlue;
|
|
Console.WriteLine($"[Light is now {state}]");
|
|
Console.ResetColor();
|
|
|
|
return $"The status of the light is now {state}";
|
|
}
|
|
}
|
|
public class KernelFunctionExtensionTests
|
|
{
|
|
private readonly JsonSerializerSettings _serializerSettings = new JsonSerializerSettings
|
|
{
|
|
Formatting = Formatting.Indented,
|
|
NullValueHandling = NullValueHandling.Ignore,
|
|
StringEscapeHandling = StringEscapeHandling.Default,
|
|
};
|
|
|
|
[Fact]
|
|
[UseReporter(typeof(DiffReporter))]
|
|
[UseApprovalSubdirectory("ApprovalTests")]
|
|
public void ItCreateFunctionContractsFromTestPlugin()
|
|
{
|
|
var kernel = new Kernel();
|
|
var plugin = kernel.ImportPluginFromType<TestPlugin>("test_plugin");
|
|
|
|
var functionContracts = plugin.Select(f => f.Metadata.ToFunctionContract()).ToList();
|
|
|
|
functionContracts.Count.Should().Be(2);
|
|
var json = JsonConvert.SerializeObject(functionContracts, _serializerSettings);
|
|
|
|
Approvals.Verify(json);
|
|
}
|
|
|
|
[Fact]
|
|
[UseReporter(typeof(DiffReporter))]
|
|
[UseApprovalSubdirectory("ApprovalTests")]
|
|
public void ItCreateFunctionContractsFromMethod()
|
|
{
|
|
var kernel = new Kernel();
|
|
var sayHelloFunction = KernelFunctionFactory.CreateFromMethod(() => "Hello, World!");
|
|
var echoFunction = KernelFunctionFactory.CreateFromMethod((string message) => message);
|
|
|
|
var functionContracts = new[]
|
|
{
|
|
sayHelloFunction.Metadata.ToFunctionContract(),
|
|
echoFunction.Metadata.ToFunctionContract(),
|
|
};
|
|
|
|
var json = JsonConvert.SerializeObject(functionContracts, _serializerSettings);
|
|
|
|
functionContracts.Length.Should().Be(2);
|
|
Approvals.Verify(json);
|
|
}
|
|
|
|
[Fact]
|
|
[UseReporter(typeof(DiffReporter))]
|
|
[UseApprovalSubdirectory("ApprovalTests")]
|
|
public void ItCreateFunctionContractsFromPrompt()
|
|
{
|
|
var kernel = new Kernel();
|
|
var sayHelloFunction = KernelFunctionFactory.CreateFromPrompt("Say {{hello}}, World!", functionName: "sayHello");
|
|
|
|
var functionContracts = new[]
|
|
{
|
|
sayHelloFunction.Metadata.ToFunctionContract(),
|
|
};
|
|
|
|
var json = JsonConvert.SerializeObject(functionContracts, _serializerSettings);
|
|
|
|
functionContracts.Length.Should().Be(1);
|
|
Approvals.Verify(json);
|
|
}
|
|
}
|