Skip to content
This repository was archived by the owner on Feb 11, 2025. It is now read-only.

Commit 25c9825

Browse files
committed
add GPT_4_1106_PREVIEW API unit test
1 parent eea4cd5 commit 25c9825

File tree

3 files changed

+69
-3
lines changed

3 files changed

+69
-3
lines changed

src/main/java/dev/ai4j/openai4j/chat/Message.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,23 @@ public static Message functionMessage(String name, String content) {
121121
}
122122

123123
@Experimental
124-
public static Message ImageMessage(String url, ImageDetail detail) {
125-
ImageUrl imageUrl = ImageUrl.builder().detail(detail).url(url).build();
124+
public static Message imageMessage(String url, ImageDetail detail) {
125+
ImageUrl imageUrl = ImageUrl.builder().detail(detail).build();
126126
Content imageContent = Content.builder().type(ContentType.IMAGE_URL.stringValue()).imageUrl(imageUrl).build();
127127
return Message.builder()
128128
.role(USER)
129129
.content(Arrays.asList(imageContent))
130130
.build();
131131
}
132132

133+
@Experimental
134+
public static Message userMessage(List<Content> messages) {
135+
return Message.builder()
136+
.role(USER)
137+
.content(messages)
138+
.build();
139+
}
140+
133141
public static Builder builder() {
134142
return new Builder();
135143
}

src/test/java/dev/ai4j/openai4j/chat/ChatCompletionStreamingTest.java

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
import java.net.InetSocketAddress;
1212
import java.net.Proxy;
13+
import java.util.Arrays;
1314
import java.util.List;
1415
import java.util.concurrent.CompletableFuture;
1516
import java.util.concurrent.atomic.AtomicBoolean;
1617
import java.util.stream.Stream;
1718

1819
import static dev.ai4j.openai4j.Model.GPT_4_1106_PREVIEW;
20+
import static dev.ai4j.openai4j.Model.GPT_4_VISION_PREVIEW;
1921
import static dev.ai4j.openai4j.chat.JsonSchemaProperty.*;
22+
import static dev.ai4j.openai4j.chat.Message.imageMessage;
2023
import static dev.ai4j.openai4j.chat.Message.userMessage;
2124
import static java.net.Proxy.Type.HTTP;
2225
import static java.util.Collections.singletonList;
@@ -44,7 +47,7 @@ void testSimpleApi() throws Exception {
4447
Message userMessage = userMessage(USER_MESSAGE);
4548
ChatCompletionRequest request = ChatCompletionRequest.builder()
4649
.model(GPT_4_1106_PREVIEW)
47-
.messages(userMessage)
50+
.messages(userMessage,userMessage)
4851
.build();
4952

5053

@@ -218,4 +221,37 @@ void testCancelStreamingBeforeStreamingStarted() throws InterruptedException {
218221

219222
assertThat(cancellationSucceeded).isTrue();
220223
}
224+
225+
@Test
226+
void testImageMessageApi()throws Exception{
227+
StringBuilder responseBuilder = new StringBuilder();
228+
CompletableFuture<String> future = new CompletableFuture<>();
229+
String url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg";
230+
String text = "What’s in this image?";
231+
ImageUrl imageUrl = ImageUrl.builder().url(url).build();
232+
Content imageContent = Content.builder().type(ContentType.IMAGE_URL.stringValue()).imageUrl(imageUrl).build();
233+
Content textContent = Content.builder().type(ContentType.TEXT.stringValue()).text(text).build();
234+
List<Content> list = Arrays.asList(textContent,imageContent);
235+
ChatCompletionRequest request = ChatCompletionRequest.builder()
236+
.model(GPT_4_VISION_PREVIEW)
237+
.messages(userMessage(list))
238+
.maxTokens(500)
239+
.build();
240+
241+
client.chatCompletion(request)
242+
.onPartialResponse(partialResponse -> {
243+
String content = partialResponse.choices().get(0).delta().content();
244+
if (content != null) {
245+
responseBuilder.append(content);
246+
}
247+
})
248+
.onComplete(() -> future.complete(responseBuilder.toString()))
249+
.onError(future::completeExceptionally)
250+
.execute();
251+
252+
253+
String response = future.get(30, SECONDS);
254+
assertThat(response).containsIgnoringCase("green");
255+
}
256+
221257
}

src/test/java/dev/ai4j/openai4j/chat/ChatCompletionTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@
1111

1212
import java.net.InetSocketAddress;
1313
import java.net.Proxy;
14+
import java.util.Arrays;
1415
import java.util.List;
1516
import java.util.Map;
1617
import java.util.stream.Stream;
1718

19+
import static dev.ai4j.openai4j.Model.GPT_4_VISION_PREVIEW;
1820
import static dev.ai4j.openai4j.chat.JsonSchemaProperty.*;
1921
import static dev.ai4j.openai4j.chat.Message.functionMessage;
2022
import static dev.ai4j.openai4j.chat.Message.userMessage;
@@ -138,4 +140,24 @@ public static String getCurrentWeather(String location, Unit unit) {
138140
enum Unit {
139141
CELSIUS, FAHRENHEIT
140142
}
143+
144+
@Test
145+
void testImageMessageApi() {
146+
String url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg";
147+
String text = "What’s in this image?";
148+
ImageUrl imageUrl = ImageUrl.builder().url(url).build();
149+
Content imageContent = Content.builder().type(ContentType.IMAGE_URL.stringValue()).imageUrl(imageUrl).build();
150+
Content textContent = Content.builder().type(ContentType.TEXT.stringValue()).text(text).build();
151+
List<Content> list = Arrays.asList(textContent,imageContent);
152+
ChatCompletionRequest request = ChatCompletionRequest.builder()
153+
.model(GPT_4_VISION_PREVIEW)
154+
.messages(userMessage(list))
155+
.maxTokens(500)
156+
.build();
157+
ChatCompletionResponse response = client.chatCompletion(request).execute();
158+
159+
MessageResponse assistantMessage = response.choices().get(0).message();
160+
assertThat(assistantMessage.content()).containsIgnoringCase("green");
161+
}
162+
141163
}

0 commit comments

Comments
 (0)