@@ -34,26 +34,34 @@ public QAWithResponseController(OpenAiResponseService aiService) {
34
34
35
35
@ GetMapping (produces = MediaType .TEXT_EVENT_STREAM_VALUE )
36
36
public Flux <Answer > qa (@ RequestParam String question ,
37
- @ RequestParam (required = false , defaultValue = "" ) String threadId ) {
37
+ @ RequestParam (name = "threadId" , required = false , defaultValue = "" ) String conversationId ) {
38
38
question = question .trim ();
39
39
if (Strings .isNullOrEmpty (question )) {
40
40
return Flux .just (Answer .EMPTY );
41
41
}
42
42
43
+ if (Strings .isNullOrEmpty (conversationId )) {
44
+ conversationId = getConversationId ();
45
+ }
46
+
43
47
try {
44
- return doQA (threadId , question );
48
+ return doQA (conversationId , question );
45
49
} catch (Throwable exception ) {
46
50
LOGGER .error ("Error while calling Assistants API" , exception );
47
51
return Flux .just (Answer .ERROR );
48
52
}
49
53
}
50
54
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 ) {
52
60
if (LOGGER .isDebugEnabled ()) {
53
61
LOGGER .debug ("\n Prompt message: {}" , question );
54
62
}
55
63
56
- Flux <ResponseStreamEvent > result = aiService .getResponseMessage (threadId , question );
64
+ Flux <ResponseStreamEvent > result = aiService .getResponseMessage (conversationId , question );
57
65
58
66
return result .filter (
59
67
responseStreamEvent -> responseStreamEvent .isOutputTextDelta ()
@@ -67,13 +75,13 @@ private Flux<Answer> doQA(String threadId, String question) {
67
75
return getAnswerFromOutputTextDelta (responseStreamEvent .outputTextDelta ().get ());
68
76
} else if (responseStreamEvent .isCompleted () && responseStreamEvent .completed ()
69
77
.isPresent ()) {
70
- return getAnswerFromCompleted (responseStreamEvent .completed ().get ());
78
+ return getAnswerFromCompleted (conversationId , responseStreamEvent .completed ().get ());
71
79
}
72
80
return Answer .EMPTY ;
73
81
}).onErrorReturn (Answer .ERROR );
74
82
}
75
83
76
- private @ NotNull Answer getAnswerFromCompleted (ResponseCompletedEvent responseCompletedEvent ) {
84
+ private @ NotNull Answer getAnswerFromCompleted (String conversationId , ResponseCompletedEvent responseCompletedEvent ) {
77
85
Set <String > relatedFiles = responseCompletedEvent .response ().output ().stream ()
78
86
.filter (responseOutputItem -> responseOutputItem .isMessage ()
79
87
&& responseOutputItem .message ().isPresent ())
@@ -93,7 +101,7 @@ private Flux<Answer> doQA(String threadId, String question) {
93
101
return fileName ;
94
102
})
95
103
.collect (Collectors .toSet ());
96
- return new Answer (END_SYMBOL , responseCompletedEvent . response (). id () , relatedFiles );
104
+ return new Answer (END_SYMBOL , conversationId , relatedFiles );
97
105
}
98
106
99
107
private @ NotNull Answer getAnswerFromOutputTextDelta (
0 commit comments