mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
@@ -225,6 +225,24 @@ internal static class DataPackageHelpers
|
|||||||
internal static async Task<string> GetHtmlContentAsync(this DataPackageView dataPackageView) =>
|
internal static async Task<string> GetHtmlContentAsync(this DataPackageView dataPackageView) =>
|
||||||
dataPackageView.Contains(StandardDataFormats.Html) ? await dataPackageView.GetHtmlFormatAsync() : string.Empty;
|
dataPackageView.Contains(StandardDataFormats.Html) ? await dataPackageView.GetHtmlFormatAsync() : string.Empty;
|
||||||
|
|
||||||
|
internal static async Task<byte[]> GetImageAsPngBytesAsync(this DataPackageView dataPackageView)
|
||||||
|
{
|
||||||
|
var bitmap = await dataPackageView.GetImageContentAsync();
|
||||||
|
if (bitmap == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
using var pngStream = new InMemoryRandomAccessStream();
|
||||||
|
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, pngStream);
|
||||||
|
encoder.SetSoftwareBitmap(bitmap);
|
||||||
|
await encoder.FlushAsync();
|
||||||
|
|
||||||
|
using var memoryStream = new MemoryStream();
|
||||||
|
await pngStream.AsStreamForRead().CopyToAsync(memoryStream);
|
||||||
|
return memoryStream.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
internal static async Task<SoftwareBitmap> GetImageContentAsync(this DataPackageView dataPackageView)
|
internal static async Task<SoftwareBitmap> GetImageContentAsync(this DataPackageView dataPackageView)
|
||||||
{
|
{
|
||||||
using var stream = await dataPackageView.GetImageStreamAsync();
|
using var stream = await dataPackageView.GetImageStreamAsync();
|
||||||
|
|||||||
@@ -74,6 +74,16 @@ public abstract class KernelServiceBase(
|
|||||||
|
|
||||||
var outputPackage = kernel.GetDataPackage();
|
var outputPackage = kernel.GetDataPackage();
|
||||||
|
|
||||||
|
if (!(await outputPackage.GetView().HasUsableDataAsync()))
|
||||||
|
{
|
||||||
|
var lastMessage = chatHistory.LastOrDefault();
|
||||||
|
if (lastMessage != null && lastMessage.Role == AuthorRole.Assistant && !string.IsNullOrEmpty(lastMessage.Content))
|
||||||
|
{
|
||||||
|
outputPackage = DataPackageHelpers.CreateFromText(lastMessage.Content);
|
||||||
|
kernel.SetDataPackage(outputPackage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!(await outputPackage.GetView().HasUsableDataAsync()))
|
if (!(await outputPackage.GetView().HasUsableDataAsync()))
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("No data was returned from the kernel operation");
|
throw new InvalidOperationException("No data was returned from the kernel operation");
|
||||||
@@ -148,7 +158,21 @@ public abstract class KernelServiceBase(
|
|||||||
var systemPrompt = string.IsNullOrWhiteSpace(runtimeConfig.SystemPrompt) ? DefaultSystemPrompt : runtimeConfig.SystemPrompt;
|
var systemPrompt = string.IsNullOrWhiteSpace(runtimeConfig.SystemPrompt) ? DefaultSystemPrompt : runtimeConfig.SystemPrompt;
|
||||||
chatHistory.AddSystemMessage(systemPrompt);
|
chatHistory.AddSystemMessage(systemPrompt);
|
||||||
chatHistory.AddSystemMessage($"Available clipboard formats: {await kernel.GetDataFormatsAsync()}");
|
chatHistory.AddSystemMessage($"Available clipboard formats: {await kernel.GetDataFormatsAsync()}");
|
||||||
chatHistory.AddUserMessage(prompt);
|
|
||||||
|
var imageBytes = await kernel.GetDataPackageView().GetImageAsPngBytesAsync();
|
||||||
|
if (imageBytes != null)
|
||||||
|
{
|
||||||
|
var collection = new ChatMessageContentItemCollection
|
||||||
|
{
|
||||||
|
new TextContent(prompt),
|
||||||
|
new ImageContent(imageBytes, "image/png"),
|
||||||
|
};
|
||||||
|
chatHistory.AddUserMessage(collection);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
chatHistory.AddUserMessage(prompt);
|
||||||
|
}
|
||||||
|
|
||||||
if (ShouldModerateAdvancedAI())
|
if (ShouldModerateAdvancedAI())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user