Skip to content

Commit 0e74146

Browse files
committed
use openai conversation api
1 parent d5945ea commit 0e74146

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<properties>
1818
<java.version>17</java.version>
1919
<openai-gpt3-java.version>0.22.92</openai-gpt3-java.version>
20-
<openai-java.version>3.0.1</openai-java.version>
20+
<openai-java.version>3.4.1</openai-java.version>
2121
<guava.version>33.2.1-jre</guava.version>
2222
<flexmark.version>0.64.8</flexmark.version>
2323
<milvus.version>2.4.2</milvus.version>

src/main/java/com/apolloconfig/apollo/ai/qabot/controller/QAWithResponseController.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,26 +34,34 @@ public QAWithResponseController(OpenAiResponseService aiService) {
3434

3535
@GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE)
3636
public Flux<Answer> qa(@RequestParam String question,
37-
@RequestParam(required = false, defaultValue = "") String threadId) {
37+
@RequestParam(name = "threadId", required = false, defaultValue = "") String conversationId) {
3838
question = question.trim();
3939
if (Strings.isNullOrEmpty(question)) {
4040
return Flux.just(Answer.EMPTY);
4141
}
4242

43+
if (Strings.isNullOrEmpty(conversationId)) {
44+
conversationId = getConversationId();
45+
}
46+
4347
try {
44-
return doQA(threadId, question);
48+
return doQA(conversationId, question);
4549
} catch (Throwable exception) {
4650
LOGGER.error("Error while calling Assistants API", exception);
4751
return Flux.just(Answer.ERROR);
4852
}
4953
}
5054

51-
private Flux<Answer> doQA(String threadId, String question) {
55+
private String getConversationId() {
56+
return aiService.createConversation().id();
57+
}
58+
59+
private Flux<Answer> doQA(String conversationId, String question) {
5260
if (LOGGER.isDebugEnabled()) {
5361
LOGGER.debug("\nPrompt message: {}", question);
5462
}
5563

56-
Flux<ResponseStreamEvent> result = aiService.getResponseMessage(threadId, question);
64+
Flux<ResponseStreamEvent> result = aiService.getResponseMessage(conversationId, question);
5765

5866
return result.filter(
5967
responseStreamEvent -> responseStreamEvent.isOutputTextDelta()
@@ -67,13 +75,13 @@ private Flux<Answer> doQA(String threadId, String question) {
6775
return getAnswerFromOutputTextDelta(responseStreamEvent.outputTextDelta().get());
6876
} else if (responseStreamEvent.isCompleted() && responseStreamEvent.completed()
6977
.isPresent()) {
70-
return getAnswerFromCompleted(responseStreamEvent.completed().get());
78+
return getAnswerFromCompleted(conversationId, responseStreamEvent.completed().get());
7179
}
7280
return Answer.EMPTY;
7381
}).onErrorReturn(Answer.ERROR);
7482
}
7583

76-
private @NotNull Answer getAnswerFromCompleted(ResponseCompletedEvent responseCompletedEvent) {
84+
private @NotNull Answer getAnswerFromCompleted(String conversationId, ResponseCompletedEvent responseCompletedEvent) {
7785
Set<String> relatedFiles = responseCompletedEvent.response().output().stream()
7886
.filter(responseOutputItem -> responseOutputItem.isMessage()
7987
&& responseOutputItem.message().isPresent())
@@ -93,7 +101,7 @@ private Flux<Answer> doQA(String threadId, String question) {
93101
return fileName;
94102
})
95103
.collect(Collectors.toSet());
96-
return new Answer(END_SYMBOL, responseCompletedEvent.response().id(), relatedFiles);
104+
return new Answer(END_SYMBOL, conversationId, relatedFiles);
97105
}
98106

99107
private @NotNull Answer getAnswerFromOutputTextDelta(

src/main/java/com/apolloconfig/apollo/ai/qabot/openai/OpenAiResponseService.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import com.openai.core.http.AsyncStreamResponse;
99
import com.openai.models.Reasoning;
1010
import com.openai.models.ReasoningEffort;
11+
import com.openai.models.conversations.Conversation;
12+
import com.openai.models.conversations.ConversationCreateParams;
1113
import com.openai.models.responses.FileSearchTool;
1214
import com.openai.models.responses.ResponseCreateParams;
1315
import com.openai.models.responses.ResponseCreateParams.Builder;
@@ -53,15 +55,15 @@ public OpenAiResponseService(OpenAiAssistantsConfig config) {
5355
vectorStoreId = config.getVectorStoreId();
5456
}
5557

56-
public Flux<ResponseStreamEvent> getResponseMessage(String previousResponseId, String prompt) {
58+
public Flux<ResponseStreamEvent> getResponseMessage(String conversationId, String prompt) {
5759
Builder paramsBuilder = ResponseCreateParams.builder()
5860
.instructions(instructions)
5961
.model(model)
6062
.input(prompt)
6163
.reasoning(Reasoning.builder().effort(ReasoningEffort.LOW).build())
6264
.addTool(FileSearchTool.builder().addVectorStoreId(vectorStoreId).build());
63-
if (!Strings.isNullOrEmpty(previousResponseId)) {
64-
paramsBuilder.previousResponseId(previousResponseId);
65+
if (!Strings.isNullOrEmpty(conversationId)) {
66+
paramsBuilder.conversation(conversationId);
6567
}
6668
ResponseCreateParams responseCreateParams = paramsBuilder.build();
6769
AsyncStreamResponse<ResponseStreamEvent> response = client.async()
@@ -150,7 +152,7 @@ public void deleteVectorStoreFile(String fileId) {
150152
this.service.deleteFile(fileId);
151153
}
152154

153-
public String getFileName(String fileId) {
154-
return this.service.retrieveFile(fileId).getFilename();
155+
public Conversation createConversation() {
156+
return this.client.conversations().create(ConversationCreateParams.builder().build());
155157
}
156158
}

0 commit comments

Comments
 (0)