|
18 | 18 | */
|
19 | 19 | public class HuggingfaceImageModel implements ImageModel {
|
20 | 20 |
|
| 21 | + private final String APPLICATION_JSON = "application/json"; |
| 22 | + |
21 | 23 | /**
|
22 | 24 | * Token required for authenticating with the HuggingFace Inference API.
|
23 | 25 | */
|
@@ -47,24 +49,28 @@ public ImageResponse call(ImagePrompt prompt) {
|
47 | 49 | final GenerateParameters generateParameters = createGenerateParameters(prompt.getOptions());
|
48 | 50 | final GenerateRequest generateRequest = createGenerateRequest(prompt.getInstructions(), generateParameters);
|
49 | 51 |
|
50 |
| - // huggingface eps with text-to-image models return only single image in default |
51 |
| - // mode |
| 52 | + // hf text-to-image endpoints return only a single image in default mode |
52 | 53 | final String base64Encoded = generateImage(generateRequest, prompt);
|
53 | 54 | final Image image = new Image(null, base64Encoded);
|
54 | 55 | final ImageGeneration imageGeneration = new ImageGeneration(image);
|
55 | 56 | return new ImageResponse(List.of(imageGeneration), new ImageResponseMetadata());
|
56 | 57 | }
|
57 | 58 |
|
58 | 59 | private String generateImage(GenerateRequest generateRequest, ImagePrompt prompt) {
|
59 |
| - final String mimeType = prompt.getOptions().getResponseFormat(); |
60 |
| - switch (mimeType) { |
61 |
| - case "application/json" -> { |
62 |
| - return new String(this.imageGenApi.generate(generateRequest, prompt.getOptions().getResponseFormat())); |
| 60 | + final String responseFormat = prompt.getOptions().getResponseFormat(); |
| 61 | + final HuggingfaceImageOptions options = (HuggingfaceImageOptions) prompt.getOptions(); |
| 62 | + switch (responseFormat) { |
| 63 | + case "base64" -> { |
| 64 | + return new String(this.imageGenApi.generate(generateRequest, APPLICATION_JSON)); |
63 | 65 | }
|
64 |
| - default -> { |
65 |
| - byte[] bytes = this.imageGenApi.generate(generateRequest, prompt.getOptions().getResponseFormat()); |
| 66 | + case "bytes" -> { |
| 67 | + byte[] bytes = this.imageGenApi.generate(generateRequest, options.getResponseMimeType()); |
66 | 68 | return Base64.getEncoder().encodeToString(bytes);
|
67 | 69 | }
|
| 70 | + default -> { |
| 71 | + throw new UnsupportedOperationException(String |
| 72 | + .format("Unsupported response format: %s, should be 'base64' or 'bytes'", responseFormat)); |
| 73 | + } |
68 | 74 | }
|
69 | 75 | }
|
70 | 76 |
|
|
0 commit comments