chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
using Microsoft.SemanticKernel;
|
||||
using Microsoft.SemanticKernel.Connectors.OpenAI;
|
||||
|
||||
namespace Functions;
|
||||
|
||||
public class PromptFunctions_Inline(ITestOutputHelper output) : BaseTest(output)
|
||||
{
|
||||
[Fact]
|
||||
public async Task RunAsync()
|
||||
{
|
||||
Console.WriteLine("======== Inline Function Definition ========");
|
||||
|
||||
string openAIModelId = TestConfiguration.OpenAI.ChatModelId;
|
||||
string openAIApiKey = TestConfiguration.OpenAI.ApiKey;
|
||||
|
||||
if (openAIModelId is null || openAIApiKey is null)
|
||||
{
|
||||
Console.WriteLine("OpenAI credentials not found. Skipping example.");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Example: normally you would place prompt templates in a folder to separate
|
||||
* C# code from natural language code, but you can also define a semantic
|
||||
* function inline if you like.
|
||||
*/
|
||||
|
||||
Kernel kernel = Kernel.CreateBuilder()
|
||||
.AddOpenAIChatCompletion(
|
||||
modelId: openAIModelId,
|
||||
apiKey: openAIApiKey)
|
||||
.Build();
|
||||
|
||||
// Function defined using few-shot design pattern
|
||||
string promptTemplate = @"
|
||||
Generate a creative reason or excuse for the given event.
|
||||
Be creative and be funny. Let your imagination run wild.
|
||||
|
||||
Event: I am running late.
|
||||
Excuse: I was being held ransom by giraffe gangsters.
|
||||
|
||||
Event: I haven't been to the gym for a year
|
||||
Excuse: I've been too busy training my pet dragon.
|
||||
|
||||
Event: {{$input}}
|
||||
";
|
||||
|
||||
var excuseFunction = kernel.CreateFunctionFromPrompt(promptTemplate, new OpenAIPromptExecutionSettings() { MaxTokens = 100, Temperature = 0.4, TopP = 1 });
|
||||
|
||||
var result = await kernel.InvokeAsync(excuseFunction, new() { ["input"] = "I missed the F1 final race" });
|
||||
Console.WriteLine(result.GetValue<string>());
|
||||
|
||||
result = await kernel.InvokeAsync(excuseFunction, new() { ["input"] = "sorry I forgot your birthday" });
|
||||
Console.WriteLine(result.GetValue<string>());
|
||||
|
||||
var fixedFunction = kernel.CreateFunctionFromPrompt($"Translate this date {DateTimeOffset.Now:f} to French format", new OpenAIPromptExecutionSettings() { MaxTokens = 100 });
|
||||
|
||||
result = await kernel.InvokeAsync(fixedFunction);
|
||||
Console.WriteLine(result.GetValue<string>());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user