diff --git a/src/xAI.Tests/ImageGeneratorTests.cs b/src/xAI.Tests/ImageGeneratorTests.cs index 5dfd103..27394f7 100644 --- a/src/xAI.Tests/ImageGeneratorTests.cs +++ b/src/xAI.Tests/ImageGeneratorTests.cs @@ -17,7 +17,6 @@ public async Task GenerateImage_WithPrompt_ReturnsImageContent() var options = new ImageGenerationOptions { ResponseFormat = ImageGenerationResponseFormat.Uri, - Count = 1 }; var response = await imageGenerator.GenerateAsync(request, options); @@ -44,6 +43,7 @@ public async Task GenerateImage_WithEditsToPreviousImage() var request = new ImageGenerationRequest("A cat sitting on a tree branch"); var options = new ImageGenerationOptions { + MediaType = "image/png", ResponseFormat = ImageGenerationResponseFormat.Uri, Count = 1 }; @@ -54,6 +54,8 @@ public async Task GenerateImage_WithEditsToPreviousImage() Assert.NotEmpty(response.Contents); Assert.Single(response.Contents); var image = Assert.IsType(response.Contents.First()); + // media type in options is ignored and you always get the same jpg + Assert.Equal("image/jpg", image.MediaType); output.WriteLine($"Generated image URL: {image.Uri}"); var edit = await imageGenerator.GenerateAsync(new ImageGenerationRequest("Edit provided image by adding a batman mask", [image]), options); @@ -62,6 +64,8 @@ public async Task GenerateImage_WithEditsToPreviousImage() Assert.NotEmpty(edit.Contents); Assert.Single(edit.Contents); image = Assert.IsType(edit.Contents.First()); + // media type in options is ignored and you always get the same jpg + Assert.Equal("image/jpg", image.MediaType); output.WriteLine($"Edited image URL: {image.Uri}"); } diff --git a/src/xAI/GrokImageGenerator.cs b/src/xAI/GrokImageGenerator.cs index 88ae984..e88ab41 100644 --- a/src/xAI/GrokImageGenerator.cs +++ b/src/xAI/GrokImageGenerator.cs @@ -16,7 +16,6 @@ sealed class GrokImageGenerator : IImageGenerator readonly ImageGeneratorMetadata metadata; readonly ImageClient imageClient; readonly string defaultModelId; - readonly GrokClientOptions clientOptions; internal GrokImageGenerator(GrpcChannel channel, GrokClientOptions clientOptions, string defaultModelId) : this(new ImageClient(channel), clientOptions, defaultModelId) @@ -32,7 +31,6 @@ internal GrokImageGenerator(ImageClient imageClient, string defaultModelId) GrokImageGenerator(ImageClient imageClient, GrokClientOptions clientOptions, string defaultModelId) { this.imageClient = imageClient; - this.clientOptions = clientOptions; this.defaultModelId = defaultModelId; metadata = new ImageGeneratorMetadata("xai", clientOptions.Endpoint, defaultModelId); } @@ -63,9 +61,8 @@ public async Task GenerateAsync( } // Handle image editing if original images are provided - if (request.OriginalImages is not null && request.OriginalImages.Any()) + if (request.OriginalImages?.FirstOrDefault() is { } originalImage) { - var originalImage = request.OriginalImages.FirstOrDefault(); if (originalImage is DataContent dataContent) { var imageUrl = dataContent.Uri?.ToString(); @@ -91,7 +88,7 @@ public async Task GenerateAsync( var response = await imageClient.GenerateImageAsync(protocolRequest, cancellationToken: cancellationToken).ConfigureAwait(false); - return ToImageGenerationResponse(response, options?.MediaType); + return ToImageGenerationResponse(response); } /// @@ -103,18 +100,14 @@ public async Task GenerateAsync( }; /// - void IDisposable.Dispose() - { - // Nothing to dispose. Implementation required for the IImageGenerator interface. - } + void IDisposable.Dispose() { } /// /// Converts an xAI to a . /// - static ImageGenerationResponse ToImageGenerationResponse(ImageResponse response, string? mediaType) + static ImageGenerationResponse ToImageGenerationResponse(ImageResponse response) { var contents = new List(); - var contentType = mediaType ?? DefaultOutputContentType; // xAI returns JPG by default foreach (var image in response.Images) { @@ -123,12 +116,12 @@ static ImageGenerationResponse ToImageGenerationResponse(ImageResponse response, case GeneratedImage.ImageOneofCase.Base64: { var imageBytes = Convert.FromBase64String(image.Base64); - contents.Add(new DataContent(imageBytes, contentType)); + contents.Add(new DataContent(imageBytes, DefaultOutputContentType)); break; } case GeneratedImage.ImageOneofCase.Url: { - contents.Add(new UriContent(new Uri(image.Url), contentType)); + contents.Add(new UriContent(new Uri(image.Url), DefaultOutputContentType)); break; } default: