Skip to content

.Net: Holiday plugin sample #6331

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public sealed class OpenAI_FunctionCalling(ITestOutputHelper output) : BaseTest(
public async Task AutoInvokeKernelFunctionsAsync()
{
// Create a kernel with MistralAI chat completion and WeatherPlugin
Kernel kernel = CreateKernelWithWeatherPlugin();
Kernel kernel = CreateKernelWithPlugin<WeatherPlugin>();

// Invoke chat prompt with auto invocation of functions enabled
const string ChatPrompt = """
Expand All @@ -30,7 +30,7 @@ public async Task AutoInvokeKernelFunctionsAsync()
public async Task AutoInvokeKernelFunctionsMultipleCallsAsync()
{
// Create a kernel with MistralAI chat completion and WeatherPlugin
Kernel kernel = CreateKernelWithWeatherPlugin();
Kernel kernel = CreateKernelWithPlugin<WeatherPlugin>();
var service = kernel.GetRequiredService<IChatCompletionService>();

// Invoke chat prompt with auto invocation of functions enabled
Expand All @@ -49,6 +49,24 @@ public async Task AutoInvokeKernelFunctionsMultipleCallsAsync()
Console.WriteLine(result2[0].Content);
}

[Fact]
public async Task AutoInvokeKernelFunctionsWithComplexParameterAsync()
{
// Create a kernel with MistralAI chat completion and WeatherPlugin
Kernel kernel = CreateKernelWithPlugin<HolidayPlugin>();

// Invoke chat prompt with auto invocation of functions enabled
const string ChatPrompt = """
<message role="user">Book a holiday for me from 6th June 2025 to 20th June 2025?</message>
""";
var executionSettings = new OpenAIPromptExecutionSettings { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions };
var chatSemanticFunction = kernel.CreateFunctionFromPrompt(
ChatPrompt, executionSettings);
var chatPromptResult = await kernel.InvokeAsync(chatSemanticFunction);

Console.WriteLine(chatPromptResult);
}

public sealed class WeatherPlugin
{
[KernelFunction]
Expand All @@ -58,7 +76,25 @@ public string GetWeather(
) => "12°C\nWind: 11 KMPH\nHumidity: 48%\nMostly cloudy";
}

private Kernel CreateKernelWithWeatherPlugin()
public sealed class HolidayPlugin
{
[KernelFunction]
[Description("Book a holiday for a specified time period.")]
public string BookHoliday(
[Description("The city and department, e.g. Marseille, 13")] HolidayRequest holidayRequest
) => $"Holiday booked, starting {holidayRequest.StartDate} and ending {holidayRequest.EndDate}";
}

public sealed class HolidayRequest
{
[Description("The date when the holiday period starts in ISO 8601 format")]
public string StartDate { get; set; } = string.Empty;

[Description("The date when the holiday period ends in ISO 8601 format")]
public string EndDate { get; set; } = string.Empty;
}

private Kernel CreateKernelWithPlugin<T>()
{
// Create a logging handler to output HTTP requests and responses
var handler = new LoggingHandler(new HttpClientHandler(), this.Output);
Expand All @@ -70,7 +106,7 @@ private Kernel CreateKernelWithWeatherPlugin()
modelId: TestConfiguration.OpenAI.ChatModelId!,
apiKey: TestConfiguration.OpenAI.ApiKey!,
httpClient: httpClient);
kernelBuilder.Plugins.AddFromType<WeatherPlugin>();
kernelBuilder.Plugins.AddFromType<T>();
Kernel kernel = kernelBuilder.Build();
return kernel;
}
Expand Down
Loading