|
20 | 20 | import java.util.Collection; |
21 | 21 | import java.util.List; |
22 | 22 | import java.util.Map; |
| 23 | +import java.util.stream.Collectors; |
23 | 24 |
|
24 | 25 | import com.fasterxml.jackson.annotation.JsonInclude; |
25 | 26 | import com.fasterxml.jackson.annotation.JsonInclude.Include; |
@@ -600,39 +601,27 @@ protected List<Generation> responseCandidateToGeneration(Candidate candidate) { |
600 | 601 | .finishReason(candidateFinishReason.name()) |
601 | 602 | .build(); |
602 | 603 |
|
603 | | - boolean isFunctionCall = candidate.getContent().getPartsList().stream().allMatch(Part::hasFunctionCall); |
| 604 | + List<Part> parts = candidate.getContent().getPartsList(); |
604 | 605 |
|
605 | | - if (isFunctionCall) { |
606 | | - List<AssistantMessage.ToolCall> assistantToolCalls = candidate.getContent() |
607 | | - .getPartsList() |
608 | | - .stream() |
609 | | - .filter(part -> part.hasFunctionCall()) |
610 | | - .map(part -> { |
611 | | - FunctionCall functionCall = part.getFunctionCall(); |
612 | | - var functionName = functionCall.getName(); |
613 | | - String functionArguments = structToJson(functionCall.getArgs()); |
614 | | - return new AssistantMessage.ToolCall("", "function", functionName, functionArguments); |
615 | | - }) |
616 | | - .toList(); |
| 606 | + List<AssistantMessage.ToolCall> assistantToolCalls = parts.stream().filter(Part::hasFunctionCall).map(part -> { |
| 607 | + FunctionCall functionCall = part.getFunctionCall(); |
| 608 | + var functionName = functionCall.getName(); |
| 609 | + String functionArguments = structToJson(functionCall.getArgs()); |
| 610 | + return new AssistantMessage.ToolCall("", "function", functionName, functionArguments); |
| 611 | + }).toList(); |
617 | 612 |
|
618 | | - AssistantMessage assistantMessage = AssistantMessage.builder() |
619 | | - .content("") |
620 | | - .properties(messageMetadata) |
621 | | - .toolCalls(assistantToolCalls) |
622 | | - .build(); |
| 613 | + String text = parts.stream() |
| 614 | + .filter(part -> part.hasText() && !part.getText().isEmpty()) |
| 615 | + .map(Part::getText) |
| 616 | + .collect(Collectors.joining(" ")); |
623 | 617 |
|
624 | | - return List.of(new Generation(assistantMessage, chatGenerationMetadata)); |
625 | | - } |
626 | | - else { |
627 | | - List<Generation> generations = candidate.getContent() |
628 | | - .getPartsList() |
629 | | - .stream() |
630 | | - .map(part -> AssistantMessage.builder().content(part.getText()).properties(messageMetadata).build()) |
631 | | - .map(assistantMessage -> new Generation(assistantMessage, chatGenerationMetadata)) |
632 | | - .toList(); |
| 618 | + AssistantMessage assistantMessage = AssistantMessage.builder() |
| 619 | + .content(text) |
| 620 | + .properties(messageMetadata) |
| 621 | + .toolCalls(assistantToolCalls) |
| 622 | + .build(); |
633 | 623 |
|
634 | | - return generations; |
635 | | - } |
| 624 | + return List.of(new Generation(assistantMessage, chatGenerationMetadata)); |
636 | 625 | } |
637 | 626 |
|
638 | 627 | private ChatResponseMetadata toChatResponseMetadata(Usage usage) { |
|
0 commit comments