Skip to content

Commit 37a1f5f

Browse files
committed
Handle base64 images in OpenAiImageGenService
Rename ImageGenDalleService to OpenAiImageGenService and update response handling to support OpenAI base64 (b64_json) image payloads. ProcessOpenAiResponse now returns byte[] and will decode b64_json or download from a URL; callers now receive image bytes directly. Add JsonPropertyName for b64_json, reorder/add necessary usings, and remove unused MaIN.Services.Services.LLMService.Utils imports from Gemini, OpenAi and Xai image services. These changes enable handling both base64 and URL image responses and standardize the OpenAI image service name.
1 parent 1e8246e commit 37a1f5f

File tree

3 files changed

+20
-11
lines changed

3 files changed

+20
-11
lines changed

src/MaIN.Services/Services/ImageGenServices/GeminiImageGenService.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Text.Json.Serialization;
99
using MaIN.Domain.Exceptions;
1010
using MaIN.Domain.Models.Concrete;
11-
using MaIN.Services.Services.LLMService.Utils;
1211

1312
namespace MaIN.Services.Services.ImageGenServices;
1413

src/MaIN.Services/Services/ImageGenServices/ImageGenDalleService.cs renamed to src/MaIN.Services/Services/ImageGenServices/OpenAiImageGenService.cs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
using System.Net.Http.Headers;
2-
using System.Net.Http.Json;
31
using MaIN.Domain.Configuration;
42
using MaIN.Domain.Entities;
53
using MaIN.Domain.Exceptions;
64
using MaIN.Domain.Models.Concrete;
75
using MaIN.Services.Constants;
86
using MaIN.Services.Services.Abstract;
9-
using MaIN.Services.Services.LLMService.Utils;
107
using MaIN.Services.Services.Models;
8+
using System.Net.Http.Headers;
9+
using System.Net.Http.Json;
10+
using System.Text.Json.Serialization;
1111

1212
namespace MaIN.Services.Services.ImageGenServices;
1313

@@ -34,8 +34,8 @@ public class OpenAiImageGenService(
3434
};
3535

3636
using var response = await client.PostAsJsonAsync(ServiceConstants.ApiUrls.OpenAiImageGenerations, requestBody);
37-
var imageUrl = await ProcessOpenAiResponse(response);
38-
byte[] imageBytes = await DownloadImageAsync(imageUrl);
37+
38+
byte[] imageBytes = await ProcessOpenAiResponse(response);
3939
return CreateChatResult(imageBytes);
4040
}
4141

@@ -55,13 +55,22 @@ private async Task<byte[]> DownloadImageAsync(string imageUrl)
5555

5656
return await imageResponse.Content.ReadAsByteArrayAsync();
5757
}
58-
59-
private async Task<string> ProcessOpenAiResponse(HttpResponseMessage response)
58+
59+
private async Task<byte[]> ProcessOpenAiResponse(HttpResponseMessage response)
6060
{
6161
response.EnsureSuccessStatusCode();
6262
var responseData = await response.Content.ReadFromJsonAsync<OpenAiImageResponse>();
63-
return responseData?.Data.FirstOrDefault()?.Url
64-
?? throw new InvalidOperationException("No image URL returned from OpenAI");
63+
64+
var imageData = responseData?.Data.FirstOrDefault()
65+
?? throw new InvalidOperationException("No image data returned from OpenAI");
66+
67+
if (!string.IsNullOrEmpty(imageData.B64Json))
68+
return Convert.FromBase64String(imageData.B64Json);
69+
70+
if (!string.IsNullOrEmpty(imageData.Url))
71+
return await DownloadImageAsync(imageData.Url);
72+
73+
throw new InvalidOperationException("No image URL or base64 data returned from OpenAI");
6574
}
6675

6776
private static ChatResult CreateChatResult(byte[] imageBytes)
@@ -95,4 +104,6 @@ file class OpenAiImageResponse
95104
file class ImageData
96105
{
97106
public string Url { get; set; } = string.Empty;
107+
[JsonPropertyName("b64_json")]
108+
public string B64Json { get; set; } = string.Empty;
98109
}

src/MaIN.Services/Services/ImageGenServices/XaiImageGenService.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Text.Json;
99
using MaIN.Domain.Exceptions;
1010
using MaIN.Domain.Models.Concrete;
11-
using MaIN.Services.Services.LLMService.Utils;
1211

1312
namespace MaIN.Services.Services.ImageGenServices;
1413

0 commit comments

Comments
 (0)