Skip to content
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

.Net: Add API to create a PromptTemplateConfig from a Prompty template #6414

Conversation

markwallace-microsoft
Copy link
Member

@markwallace-microsoft markwallace-microsoft commented May 27, 2024

Motivation and Context

Adding this API allows developers to write code which creates an IPromptTemplate instance from a Prompty template so that it can be used with any IAIService implementation.

This change enables the following flow:

      Kernel kernel = Kernel.CreateBuilder()
          .AddOpenAIChatCompletion(
              modelId: TestConfiguration.OpenAI.ChatModelId,
              apiKey: TestConfiguration.OpenAI.ApiKey)
          .Build();

      string promptyTemplate = """
          ---
          name: Contoso_Prompt
          description: A sample prompt that responds with what Seattle is.
          authors:
            - ????
          model:
            api: chat
          ---
          What is Seattle?
          """;

      var promptConfig = PromptyKernelExtensions.ToPromptTemplateConfig(promptyTemplate);
      var promptTemplateFactory = new LiquidPromptTemplateFactory();
      var promptTemplate = promptTemplateFactory.Create(promptConfig);
      var prompt = await promptTemplate.RenderAsync(kernel);

      var chatService = kernel.GetRequiredService<IChatCompletionService>();
      var result = await chatService.GetChatMessageContentAsync(prompt);

Description

Contribution Checklist

@markwallace-microsoft markwallace-microsoft requested a review from a team as a code owner May 27, 2024 16:01
@markwallace-microsoft markwallace-microsoft added the .NET Issue or Pull requests regarding .NET code label May 27, 2024
@github-actions github-actions bot changed the title Add API to create a PromptTemplateConfig from a Prompty template .Net: Add API to create a PromptTemplateConfig from a Prompty template May 27, 2024
@markwallace-microsoft
Copy link
Member Author

FYI @LittleLittleCloud

@RogerBarreto
Copy link
Member

Add this Example in the README.md from Concepts

@markwallace-microsoft markwallace-microsoft added this pull request to the merge queue May 30, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks May 30, 2024
@markwallace-microsoft markwallace-microsoft added this pull request to the merge queue May 30, 2024
Merged via the queue into microsoft:main with commit d471425 May 30, 2024
15 checks passed
@markwallace-microsoft markwallace-microsoft deleted the users/markwallace/issue_6413 branch May 30, 2024 15:47
LudoCorporateShark pushed a commit to LudoCorporateShark/semantic-kernel that referenced this pull request Aug 25, 2024
microsoft#6414)

### Motivation and Context

Adding this API allows developers to write code which creates an
`IPromptTemplate` instance from a Prompty template so that it can be
used with any `IAIService` implementation.

This change enables the following flow:

```csharp
      Kernel kernel = Kernel.CreateBuilder()
          .AddOpenAIChatCompletion(
              modelId: TestConfiguration.OpenAI.ChatModelId,
              apiKey: TestConfiguration.OpenAI.ApiKey)
          .Build();

      string promptyTemplate = """
          ---
          name: Contoso_Prompt
          description: A sample prompt that responds with what Seattle is.
          authors:
            - ????
          model:
            api: chat
          ---
          What is Seattle?
          """;

      var promptConfig = PromptyKernelExtensions.ToPromptTemplateConfig(promptyTemplate);
      var promptTemplateFactory = new LiquidPromptTemplateFactory();
      var promptTemplate = promptTemplateFactory.Create(promptConfig);
      var prompt = await promptTemplate.RenderAsync(kernel);

      var chatService = kernel.GetRequiredService<IChatCompletionService>();
      var result = await chatService.GetChatMessageContentAsync(prompt);
```

### Description

<!-- Describe your changes, the overall approach, the underlying design.
These notes will help understanding how your code works. Thanks! -->

### Contribution Checklist

<!-- Before submitting this PR, please make sure: -->

- [ ] The code builds clean without any errors or warnings
- [ ] The PR follows the [SK Contribution
Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md)
and the [pre-submission formatting
script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts)
raises no violations
- [ ] All unit tests pass, and I have added new tests where possible
- [ ] I didn't break anyone 😄
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation .NET Issue or Pull requests regarding .NET code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants