dotnet / interactive

.NET Interactive combines the power of .NET with many other languages to create notebooks, REPLs, and embedded coding experiences. Share code, explore data, write, and learn across your apps in ways you couldn't before.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ImageGenerator in Microsoft.DotNet.Interactive.AI encounters Semantic Kernel failures.

IntegerMan opened this issue · comments

Describe the bug

Using the image generation notebook hosted at https://github.com/dotnet/interactive/blob/main/samples/notebooks/ai/image%20generation.ipynb I provided my own API key and endpoint pointing to an Azure OpenAI resource in East US. I then updated the deployment name to match my deployed DALL-E-2 or DALL-E-3 instance and ran the notebook with no other changes.

I consistently received the following stack trace trying to generate images:

Error: Microsoft.SemanticKernel.Diagnostics.SKException: Reached maximum retry attempts
at Microsoft.SemanticKernel.Connectors.AI.OpenAI.ImageGeneration.AzureOpenAIImageGeneration.GetImageGenerationResultAsync(String operationId, CancellationToken cancellationToken)
at Microsoft.SemanticKernel.Connectors.AI.OpenAI.ImageGeneration.AzureOpenAIImageGeneration.GenerateImageAsync(String description, Int32 width, Int32 height, CancellationToken cancellationToken)
at Microsoft.DotNet.Interactive.AI.ImageGenerationKernel.Microsoft.DotNet.Interactive.IKernelCommandHandler<Microsoft.DotNet.Interactive.Commands.SubmitCode>.HandleAsync(SubmitCode submitCode, KernelInvocationContext context)
at Microsoft.DotNet.Interactive.Kernel.HandleAsync(KernelCommand command, KernelInvocationContext context) in D:\a\_work\1\s\src\Microsoft.DotNet.Interactive\Kernel.cs:line 330
at Microsoft.DotNet.Interactive.KernelCommandPipeline.<BuildPipeline>b__6_0(KernelCommand command, KernelInvocationContext context, KernelPipelineContinuation _) in D:\a\_work\1\s\src\Microsoft.DotNet.Interactive\KernelCommandPipeline.cs:line 60
at Microsoft.DotNet.Interactive.KernelCommandPipeline.SendAsync(KernelCommand command, KernelInvocationContext context) in D:\a\_work\1\s\src\Microsoft.DotNet.Interactive\KernelCommandPipeline.cs:line 41

I suspect something is out-of-date with the AI package, semantic kernel, and / or SK's image generation connectors.

Updating the version of Microsoft.DotNet.Interactive.AI via *-* causes the version installed to jump from 1.0.0-beta.23604.2 to 1.0.0-beta.24074.1 but still results in a failure, though with a different stack trace:

Error: Microsoft.SemanticKernel.KernelException: Service of type 'Microsoft.SemanticKernel.TextToImage.ITextToImageService' and key 'image_image_generator' not registered.
at Microsoft.SemanticKernel.Kernel.GetRequiredService[T](Object serviceKey)
at Microsoft.DotNet.Interactive.AI.ImageGenerationKernel.Microsoft.DotNet.Interactive.IKernelCommandHandler<Microsoft.DotNet.Interactive.Commands.SubmitCode>.HandleAsync(SubmitCode submitCode, KernelInvocationContext context)
at Microsoft.DotNet.Interactive.Kernel.HandleAsync(KernelCommand command, KernelInvocationContext context) in D:\a\_work\1\s\src\Microsoft.DotNet.Interactive\Kernel.cs:line 330
at Microsoft.DotNet.Interactive.KernelCommandPipeline.<BuildPipeline>b__6_0(KernelCommand command, KernelInvocationContext context, KernelPipelineContinuation _) in D:\a\_work\1\s\src\Microsoft.DotNet.Interactive\KernelCommandPipeline.cs:line 60
at Microsoft.DotNet.Interactive.KernelCommandPipeline.SendAsync(KernelCommand command, KernelInvocationContext context) in D:\a\_work\1\s\src\Microsoft.DotNet.Interactive\KernelCommandPipeline.cs:line 41

If it impacts the urgency of this, I was hoping to include this feature in my upcoming book and am prepping to write the chapter on AI in Polyglot Notebooks.

Please complete the following:

Which version of .NET Interactive are you using? 1.0.522904+cdfa48b2ea1a27dfe0f545c42a34fd3ec7119074

  • OS
    • Windows 11
    • Windows 10
    • macOS
    • Linux - Pop!_OS (Ubuntu 22.06)
    • iOS
    • Android
  • Browser
    • Chrome
    • Edge
    • Firefox
    • Safari
  • Frontend
    • Jupyter Notebook
    • Jupyter Lab
    • nteract
    • Visual Studio Code
    • Visual Studio Code Insiders
    • Visual Studio
    • Other (please specify)

Screenshots

If applicable, add screenshots to help explain your problem.

I have now verified this occurs on Windows environments as well as Linux.

I recommend working directly with DALL-E for the time being while this issue is open using Azure.AI.OpenAI. Assuming you have an AzureOpenAIClient named azureClient, use the following code:

var imageClient = azureClient.GetImageClient("your-dall-e-deployment-name");
var imgResult = imageClient.GenerateImage("A picture of a bug in the DALL-E integration");

// Set up a .NET Interactive formatter for OpenAI.Images.GeneratedImage to render the image as HTML
Microsoft.DotNet.Interactive.Formatting.Formatter.Register<OpenAI.Images.GeneratedImage>((image, writer) =>
{
    writer.Write($"<img src=\"{image.ImageUri}\" />");
    writer.Write($"<p>{image.RevisedPrompt}</p>");
}, "text/html");

imgResult.Value