diff --git a/client/src/main/java/com/theokanning/openai/client/OpenAiApi.java b/client/src/main/java/com/theokanning/openai/client/OpenAiApi.java index 42f1fd4..593fd8f 100644 --- a/client/src/main/java/com/theokanning/openai/client/OpenAiApi.java +++ b/client/src/main/java/com/theokanning/openai/client/OpenAiApi.java @@ -220,6 +220,10 @@ public interface OpenAiApi { @POST("threads/{thread_id}/messages/{message_id}") Single modifyMessage(@Path("thread_id") String threadId, @Path("message_id") String messageId, @Body ModifyMessageRequest request); + @Headers({"OpenAI-Beta: assistants=v2"}) + @DELETE("threads/{thread_id}/messages/{message_id}") + Single deleteMessage(@Path("thread_id") String threadId, @Path("message_id") String messageId); + @Headers("OpenAI-Beta: assistants=v2") @POST("threads/{thread_id}/runs") diff --git a/example/src/main/java/example/ChatExample.java b/example/src/main/java/example/ChatExample.java index 4352ca3..bbf869e 100644 --- a/example/src/main/java/example/ChatExample.java +++ b/example/src/main/java/example/ChatExample.java @@ -23,7 +23,8 @@ public static void main(String[] args) { // gptVision(); // toolChat(); // functionChat(); - streamChatWithTool(); + // streamChatWithTool(); + gpt4oVision(); } static void simpleChat() { @@ -152,6 +153,25 @@ static void gptVision() { System.out.println(choice.getMessage().getContent()); } + static void gpt4oVision() { + OpenAiService service = new OpenAiService(Duration.ofSeconds(20)); + final List messages = new ArrayList<>(); + //Here, the imageMessage is intended for image recognition + final ChatMessage imageMessage = UserMessage.buildImageMessage("What's in this image?", + "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"); + messages.add(imageMessage); + + ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder() + .model("gpt-4o") + .messages(messages) + .n(1) + .maxTokens(300) + .build(); + ChatCompletionChoice choice = service.createChatCompletion(chatCompletionRequest).getChoices().get(0); + System.out.println(choice.getMessage().getContent()); + + } + static void streamChatWithTool() { OpenAiService service = new OpenAiService(Duration.ofSeconds(30)); diff --git a/service/src/main/java/com/theokanning/openai/service/OpenAiService.java b/service/src/main/java/com/theokanning/openai/service/OpenAiService.java index 560a8b9..bd1c4c2 100644 --- a/service/src/main/java/com/theokanning/openai/service/OpenAiService.java +++ b/service/src/main/java/com/theokanning/openai/service/OpenAiService.java @@ -472,6 +472,10 @@ public OpenAiResponse listMessages(String threadId, MessageListSearchPa return execute(api.listMessages(threadId, queryParameters)); } + public DeleteResult deleteMessage(String threadId, String messageId) { + return execute(api.deleteMessage(threadId, messageId)); + } + public Run createRun(String threadId, RunCreateRequest runCreateRequest) { return execute(api.createRun(threadId, runCreateRequest)); diff --git a/service/src/test/java/com/theokanning/openai/service/MessageTest.java b/service/src/test/java/com/theokanning/openai/service/MessageTest.java index 600c8f9..d9e7919 100644 --- a/service/src/test/java/com/theokanning/openai/service/MessageTest.java +++ b/service/src/test/java/com/theokanning/openai/service/MessageTest.java @@ -104,6 +104,11 @@ void listMessages() { createTestMessage(separateThreadId); List messages = service.listMessages(separateThreadId, new MessageListSearchParameters()).getData(); assertEquals(3, messages.size()); + + service.deleteMessage(separateThreadId, messages.get(0).getId()); + List messagesAfterDelete = service.listMessages(separateThreadId, new MessageListSearchParameters()).getData(); + assertEquals(2, messagesAfterDelete.size()); + DeleteResult deleteResult = service.deleteThread(separateThreadId); assertTrue(deleteResult.isDeleted()); }