@@ -184,7 +184,7 @@ private static class ChatMessages {
184
184
185
185
private final List <ChatRequestMessage > newMessages ;
186
186
private final List <ChatRequestMessage > allMessages ;
187
- private final List <OpenAIChatMessageContent > newChatMessageContent ;
187
+ private final List <OpenAIChatMessageContent <?> > newChatMessageContent ;
188
188
189
189
public ChatMessages (List <ChatRequestMessage > allMessages ) {
190
190
this .allMessages = Collections .unmodifiableList (allMessages );
@@ -195,7 +195,7 @@ public ChatMessages(List<ChatRequestMessage> allMessages) {
195
195
private ChatMessages (
196
196
List <ChatRequestMessage > allMessages ,
197
197
List <ChatRequestMessage > newMessages ,
198
- List <OpenAIChatMessageContent > newChatMessageContent ) {
198
+ List <OpenAIChatMessageContent <?> > newChatMessageContent ) {
199
199
this .allMessages = Collections .unmodifiableList (allMessages );
200
200
this .newMessages = Collections .unmodifiableList (newMessages );
201
201
this .newChatMessageContent = Collections .unmodifiableList (newChatMessageContent );
@@ -219,8 +219,8 @@ public ChatMessages add(ChatRequestMessage requestMessage) {
219
219
}
220
220
221
221
@ CheckReturnValue
222
- public ChatMessages addChatMessage (List <OpenAIChatMessageContent > chatMessageContent ) {
223
- ArrayList <OpenAIChatMessageContent > tmpChatMessageContent = new ArrayList <>(
222
+ public ChatMessages addChatMessage (List <OpenAIChatMessageContent <?> > chatMessageContent ) {
223
+ ArrayList <OpenAIChatMessageContent <?> > tmpChatMessageContent = new ArrayList <>(
224
224
newChatMessageContent );
225
225
tmpChatMessageContent .addAll (chatMessageContent );
226
226
@@ -357,19 +357,16 @@ private Mono<ChatMessages> internalChatMessageContentsAsync(
357
357
// If we don't want to attempt to invoke any functions
358
358
// Or if we are auto-invoking, but we somehow end up with other than 1 choice even though only 1 was requested
359
359
if (autoInvokeAttempts == 0 || responseMessages .size () != 1 ) {
360
- return getChatMessageContentsAsync (completions )
361
- .flatMap (m -> {
362
- return Mono .just (messages .addChatMessage (m ));
363
- });
360
+ List <OpenAIChatMessageContent <?>> chatMessageContents = getChatMessageContentsAsync (completions );
361
+ return Mono .just (messages .addChatMessage (chatMessageContents ));
364
362
}
365
363
// Or if there are no tool calls to be done
366
364
ChatResponseMessage response = responseMessages .get (0 );
367
365
List <ChatCompletionsToolCall > toolCalls = response .getToolCalls ();
368
366
if (toolCalls == null || toolCalls .isEmpty ()) {
369
- return getChatMessageContentsAsync (completions )
370
- .flatMap (m -> {
371
- return Mono .just (messages .addChatMessage (m ));
372
- });
367
+ List <OpenAIChatMessageContent <?>> chatMessageContents = getChatMessageContentsAsync (
368
+ completions );
369
+ return Mono .just (messages .addChatMessage (chatMessageContents ));
373
370
}
374
371
375
372
ChatRequestAssistantMessage requestMessage = new ChatRequestAssistantMessage (
@@ -592,7 +589,7 @@ private OpenAIFunctionToolCall extractOpenAIFunctionToolCall(
592
589
arguments );
593
590
}
594
591
595
- private Mono < List <OpenAIChatMessageContent >> getChatMessageContentsAsync (
592
+ private List <OpenAIChatMessageContent <? >> getChatMessageContentsAsync (
596
593
ChatCompletions completions ) {
597
594
FunctionResultMetadata <CompletionsUsage > completionMetadata = FunctionResultMetadata .build (
598
595
completions .getId (),
@@ -606,22 +603,28 @@ private Mono<List<OpenAIChatMessageContent>> getChatMessageContentsAsync(
606
603
.filter (Objects ::nonNull )
607
604
.collect (Collectors .toList ());
608
605
609
- return Flux .fromIterable (responseMessages )
610
- .flatMap (response -> {
606
+ List <OpenAIChatMessageContent <?>> chatMessageContent =
607
+ responseMessages
608
+ .stream ()
609
+ .map (response -> {
611
610
try {
612
- return Mono . just ( new OpenAIChatMessageContent (
611
+ return new OpenAIChatMessageContent <> (
613
612
AuthorRole .ASSISTANT ,
614
613
response .getContent (),
615
614
this .getModelId (),
616
615
null ,
617
616
null ,
618
617
completionMetadata ,
619
- formOpenAiToolCalls (response )));
620
- } catch (Exception e ) {
621
- return Mono .error (e );
618
+ formOpenAiToolCalls (response ));
619
+ } catch (SKCheckedException e ) {
620
+ LOGGER .warn ("Failed to form chat message content" , e );
621
+ return null ;
622
622
}
623
623
})
624
- .collectList ();
624
+ .filter (Objects ::nonNull )
625
+ .collect (Collectors .toList ());
626
+
627
+ return chatMessageContent ;
625
628
}
626
629
627
630
private List <ChatMessageContent <?>> toOpenAIChatMessageContent (
@@ -931,7 +934,7 @@ private static boolean hasToolCallBeenExecuted(List<ChatRequestMessage> chatRequ
931
934
}
932
935
933
936
private static List <ChatRequestMessage > getChatRequestMessages (
934
- List <? extends ChatMessageContent > messages ) {
937
+ List <? extends ChatMessageContent <?> > messages ) {
935
938
if (messages == null || messages .isEmpty ()) {
936
939
return new ArrayList <>();
937
940
}
0 commit comments