Skip to content

Add Azure Responses Content Image sample with image url and image base64 #44818

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 12 commits into
base: main
Choose a base branch
from
Draft
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.ai.openai.responses;


import com.azure.ai.openai.responses.models.CreateResponsesRequest;
import com.azure.ai.openai.responses.models.CreateResponsesRequestModel;
import com.azure.ai.openai.responses.models.ResponsesInputContentText;
import com.azure.ai.openai.responses.models.ResponsesSystemMessage;
import com.azure.ai.openai.responses.models.ResponsesAssistantMessage;
import com.azure.ai.openai.responses.models.ResponsesUserMessage;
import com.azure.ai.openai.responses.models.ResponsesInputContentImage;
import com.azure.ai.openai.responses.models.ResponsesResponse;
import com.azure.ai.openai.responses.models.ResponsesOutputContentText;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.policy.HttpLogDetailLevel;
import com.azure.core.http.policy.HttpLogOptions;
import com.azure.core.util.Configuration;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Base64;


/**
* This sample demonstrates how to use the Responses Input Content Image to generate text using the Azure OpenAI service.
*/
public class AzureResponsesContentImageSample {

/**
* Main method to run the sample.
* @param args Command line arguments (not used).
*/
public static void main(String[] args) {
// Create a client
ResponsesClient client = new ResponsesClientBuilder()
.endpoint(Configuration.getGlobalConfiguration().get("AZURE_OPENAI_ENDPOINT"))
.credential(new AzureKeyCredential(Configuration.getGlobalConfiguration().get("AZURE_OPENAI_KEY")))
.serviceVersion(AzureResponsesServiceVersion.V2025_03_01_PREVIEW)
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
.buildClient();

String base64Image = null;
try {
String fileName = "ms_logo.png";
byte[] imageBytes = Files.readAllBytes(Paths.get("src/samples/java/com/azure/ai/openai/resources/" + fileName));
base64Image = Base64.getEncoder().encodeToString(imageBytes);
} catch (IOException e) {
return;
}

// Create a request
CreateResponsesRequest request = new CreateResponsesRequest(CreateResponsesRequestModel.GPT_4O_MINI,
Arrays.asList(
new ResponsesSystemMessage(Arrays.asList(new ResponsesInputContentText("You are a helpful assistant that describes images"))),
new ResponsesUserMessage(Arrays.asList(
new ResponsesInputContentText("Please describe this image"),
new ResponsesInputContentImage().setImageUrl("data:image/jpeg;base64," + base64Image)))));

// Send the request and get the response
ResponsesResponse response = client.createResponse(request);
ResponsesAssistantMessage responseMessage = (ResponsesAssistantMessage) response.getOutput().get(0);
ResponsesOutputContentText outputContent = (ResponsesOutputContentText) responseMessage.getContent().get(0);

// Print the response
System.out.println("Response: " + response);
System.out.println("Output: " + outputContent.getText());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.ai.openai.responses;


import com.azure.ai.openai.responses.models.CreateResponsesRequest;
import com.azure.ai.openai.responses.models.CreateResponsesRequestModel;
import com.azure.ai.openai.responses.models.ResponsesInputContentText;
import com.azure.ai.openai.responses.models.ResponsesSystemMessage;
import com.azure.ai.openai.responses.models.ResponsesAssistantMessage;
import com.azure.ai.openai.responses.models.ResponsesUserMessage;
import com.azure.ai.openai.responses.models.ResponsesInputContentImage;
import com.azure.ai.openai.responses.models.ResponsesResponse;
import com.azure.ai.openai.responses.models.ResponsesOutputContentText;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.policy.HttpLogDetailLevel;
import com.azure.core.http.policy.HttpLogOptions;
import com.azure.core.util.Configuration;

import java.util.Arrays;

/**
* This sample demonstrates how to use the Responses Input Content Image to generate text using the Azure OpenAI service.
*/
public class AzureResponsesContentImageUrlSample {

/**
* Main method to run the sample.
* @param args Command line arguments (not used).
*/
public static void main(String[] args) {
// Create a client
ResponsesClient client = new ResponsesClientBuilder()
.endpoint(Configuration.getGlobalConfiguration().get("AZURE_OPENAI_ENDPOINT"))
.credential(new AzureKeyCredential(Configuration.getGlobalConfiguration().get("AZURE_OPENAI_KEY")))
.serviceVersion(AzureResponsesServiceVersion.V2025_03_01_PREVIEW)
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
.buildClient();

// Create a request
CreateResponsesRequest request = new CreateResponsesRequest(CreateResponsesRequestModel.GPT_4O_MINI,
Arrays.asList(
new ResponsesSystemMessage(Arrays.asList(new ResponsesInputContentText("You are a helpful assistant that describes images"))),
new ResponsesUserMessage(Arrays.asList(
new ResponsesInputContentText("Please describe this image"),
new ResponsesInputContentImage().setImageUrl("https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Microsoft_logo.svg/512px-Microsoft_logo.svg.png")))));

// Send the request and get the response
ResponsesResponse response = client.createResponse(request);
ResponsesAssistantMessage responseMessage = (ResponsesAssistantMessage) response.getOutput().get(0);
ResponsesOutputContentText outputContent = (ResponsesOutputContentText) responseMessage.getContent().get(0);

// Print the response
System.out.println("Response: " + response);
System.out.println("Output: " + outputContent.getText());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.ai.openai.responses;

import com.azure.ai.openai.responses.models.CreateResponsesRequest;
import com.azure.ai.openai.responses.models.CreateResponsesRequestModel;
import com.azure.ai.openai.responses.models.ResponsesInputContentText;
import com.azure.ai.openai.responses.models.ResponsesAssistantMessage;
import com.azure.ai.openai.responses.models.ResponsesUserMessage;
import com.azure.ai.openai.responses.models.ResponsesResponse;
import com.azure.ai.openai.responses.models.ResponsesOutputContentText;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.policy.HttpLogDetailLevel;
import com.azure.core.http.policy.HttpLogOptions;
import com.azure.core.util.Configuration;
import java.util.Arrays;

/**
* This sample demonstrates how to chain responses together by passing the response.id from the previous response to the previous_response_id parameter to generate text using the Azure OpenAI service.
*/
public class ChainingResponsesSample {

/**
* Main method to run the sample.
* @param args Command line arguments (not used).
*/
public static void main(String[] args) {

// Azure OpenAI Responses API is enabled only for api-version 2025-03-01-preview and later
// Create a client
ResponsesClient client = new ResponsesClientBuilder()
.endpoint(Configuration.getGlobalConfiguration().get("AZURE_OPENAI_ENDPOINT"))
.credential(new AzureKeyCredential(Configuration.getGlobalConfiguration().get("AZURE_OPENAI_KEY")))
.serviceVersion(AzureResponsesServiceVersion.V2025_03_01_PREVIEW)
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
.buildClient();

// First response
CreateResponsesRequest firstRequest = new CreateResponsesRequest(
CreateResponsesRequestModel.GPT_4O_MINI,
Arrays.asList(
new ResponsesUserMessage(Arrays.asList(
new ResponsesInputContentText("Define and explain the concept of catastrophic forgetting?")))));
ResponsesResponse firstResponse = client.createResponse(firstRequest);

// Second response
CreateResponsesRequest secondRequest = new CreateResponsesRequest(
CreateResponsesRequestModel.GPT_4O_MINI,
Arrays.asList(
new ResponsesUserMessage(Arrays.asList(
new ResponsesInputContentText("Explain this at a level that could be understood by a college freshman")))));
secondRequest.setPreviousResponseId(firstResponse.getId());
ResponsesResponse secondResponse = client.createResponse(secondRequest);

// Print the second response
ResponsesAssistantMessage assistantMessage = (ResponsesAssistantMessage) secondResponse.getOutput().get(0);
ResponsesOutputContentText outputContent = (ResponsesOutputContentText) assistantMessage.getContent().get(0);
System.out.println(outputContent.getText());

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,13 @@
import com.azure.ai.openai.responses.models.CreateResponsesRequestIncludable;
import com.azure.ai.openai.responses.models.CreateResponsesRequestModel;
import com.azure.ai.openai.responses.models.ListInputItemsRequestOrder;
import com.azure.ai.openai.responses.models.ResponsesAssistantMessage;
import com.azure.ai.openai.responses.models.ResponsesInputContentImage;
import com.azure.ai.openai.responses.models.ResponsesInputContentText;
import com.azure.ai.openai.responses.models.ResponsesOutputContentText;
import com.azure.ai.openai.responses.models.ResponsesResponse;
import com.azure.ai.openai.responses.models.ResponsesStreamEventCompleted;
import com.azure.ai.openai.responses.models.ResponsesSystemMessage;
import com.azure.ai.openai.responses.models.ResponsesUserMessage;
import com.azure.core.http.HttpClient;
import com.azure.core.http.rest.RequestOptions;
Expand All @@ -18,6 +22,7 @@
import org.junit.jupiter.params.provider.MethodSource;
import reactor.test.StepVerifier;

import java.io.IOException;
import java.util.Arrays;

import static com.azure.ai.openai.responses.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS;
Expand Down Expand Up @@ -140,6 +145,55 @@ public void listInputItems(HttpClient httpClient, AzureResponsesServiceVersion s
.verifyComplete();
}

@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
@MethodSource("com.azure.ai.openai.responses.TestUtils#getTestParametersResponses")
public void testResponsesInputContentImageBase64(HttpClient httpClient, AzureResponsesServiceVersion serviceVersion) throws IOException {
ResponsesAsyncClient client = getAzureResponseAsyncClient(httpClient, serviceVersion);

openImageFileBase64Runner((base64Image) -> {
CreateResponsesRequest request = new CreateResponsesRequest(CreateResponsesRequestModel.GPT_4O_MINI,
Arrays.asList(
new ResponsesSystemMessage(
Arrays.asList(new ResponsesInputContentText("You are a helpful assistant that describes images"))),
new ResponsesUserMessage(Arrays.asList(new ResponsesInputContentText("Please describe this image"),
new ResponsesInputContentImage().setImageUrl("data:image/jpeg;base64," + base64Image)))));

StepVerifier.create(client.createResponse(request))
.assertNext(response -> {
ResponsesAssistantMessage assistantMessage = (ResponsesAssistantMessage) response.getOutput().get(0);
ResponsesOutputContentText outputContent = (ResponsesOutputContentText) assistantMessage.getContent().get(0);
assertAssistantMessage(assistantMessage);
assertOutputContentText(outputContent);
}
)
.verifyComplete();
});
}

@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
@MethodSource("com.azure.ai.openai.responses.TestUtils#getTestParametersResponses")
public void testResponsesInputContentImageUrl(HttpClient httpClient, AzureResponsesServiceVersion serviceVersion) {
ResponsesAsyncClient client = getAzureResponseAsyncClient(httpClient, serviceVersion);

CreateResponsesRequest request = new CreateResponsesRequest(CreateResponsesRequestModel.GPT_4O_MINI,
Arrays.asList(
new ResponsesSystemMessage(
Arrays.asList(new ResponsesInputContentText("You are a helpful assistant that describes images"))),
new ResponsesUserMessage(Arrays.asList(new ResponsesInputContentText("Please describe this image"),
new ResponsesInputContentImage().setImageUrl(
"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Microsoft_logo.svg/512px-Microsoft_logo.svg.png")))));

StepVerifier.create(client.createResponse(request))
.assertNext(response -> {
ResponsesAssistantMessage assistantMessage = (ResponsesAssistantMessage) response.getOutput().get(0);
ResponsesOutputContentText outputContent = (ResponsesOutputContentText) assistantMessage.getContent().get(0);
assertAssistantMessage(assistantMessage);
assertOutputContentText(outputContent);
}
)
.verifyComplete();
}

@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
@MethodSource("com.azure.ai.openai.responses.TestUtils#getTestParametersResponses")
public void listInputItemsDesc(HttpClient httpClient, AzureResponsesServiceVersion serviceVersion) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
import com.azure.ai.openai.responses.models.ResponsesStreamEvent;
import com.azure.ai.openai.responses.models.ResponsesStreamEventCompleted;
import com.azure.ai.openai.responses.models.ResponsesUserMessage;
import com.azure.ai.openai.responses.models.ResponsesSystemMessage;
import com.azure.ai.openai.responses.models.ResponsesInputContentImage;
import com.azure.ai.openai.responses.models.ResponsesAssistantMessage;
import com.azure.ai.openai.responses.models.ResponsesOutputContentText;

import com.azure.core.http.HttpClient;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.RequestOptions;
Expand All @@ -22,6 +27,7 @@
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

import java.io.IOException;
import java.util.Arrays;

import static com.azure.ai.openai.responses.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS;
Expand Down Expand Up @@ -144,6 +150,50 @@ public void listInputItems(HttpClient httpClient, AzureResponsesServiceVersion s
}
}

@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
@MethodSource("com.azure.ai.openai.responses.TestUtils#getTestParametersResponses")
public void testResponsesInputContentImageBase64(HttpClient httpClient, AzureResponsesServiceVersion serviceVersion)
throws IOException {
ResponsesClient client = getAzureResponseClient(httpClient, serviceVersion);
openImageFileBase64Runner((base64Image) -> {
CreateResponsesRequest request = new CreateResponsesRequest(CreateResponsesRequestModel.GPT_4O_MINI,
Arrays.asList(
new ResponsesSystemMessage(Arrays
.asList(new ResponsesInputContentText("You are a helpful assistant that describes images"))),
new ResponsesUserMessage(Arrays.asList(new ResponsesInputContentText("Please describe this image"),
new ResponsesInputContentImage().setImageUrl("data:image/jpeg;base64," + base64Image)))));

ResponsesResponse response = client.createResponse(request);
ResponsesAssistantMessage assistantMessage = (ResponsesAssistantMessage) response.getOutput().get(0);
ResponsesOutputContentText outputContent
= (ResponsesOutputContentText) assistantMessage.getContent().get(0);

assertAssistantMessage(assistantMessage);
assertOutputContentText(outputContent);
});
}

@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
@MethodSource("com.azure.ai.openai.responses.TestUtils#getTestParametersResponses")
public void testResponsesInputContentImageUrl(HttpClient httpClient, AzureResponsesServiceVersion serviceVersion) {
ResponsesClient client = getAzureResponseClient(httpClient, serviceVersion);

CreateResponsesRequest request = new CreateResponsesRequest(CreateResponsesRequestModel.GPT_4O_MINI,
Arrays.asList(
new ResponsesSystemMessage(
Arrays.asList(new ResponsesInputContentText("You are a helpful assistant that describes images"))),
new ResponsesUserMessage(Arrays.asList(new ResponsesInputContentText("Please describe this image"),
new ResponsesInputContentImage().setImageUrl(
"https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Microsoft_logo.svg/512px-Microsoft_logo.svg.png")))));

ResponsesResponse response = client.createResponse(request);
ResponsesAssistantMessage assistantMessage = (ResponsesAssistantMessage) response.getOutput().get(0);
ResponsesOutputContentText outputContent = (ResponsesOutputContentText) assistantMessage.getContent().get(0);

assertAssistantMessage(assistantMessage);
assertOutputContentText(outputContent);
}

@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
@MethodSource("com.azure.ai.openai.responses.TestUtils#getTestParametersResponses")
public void listInputItemsDesc(HttpClient httpClient, AzureResponsesServiceVersion serviceVersion) {
Expand Down
Loading
Loading