|
8 | 8 | import com.sap.ai.sdk.orchestration.model.ChatMessageContent; |
9 | 9 | import com.sap.ai.sdk.orchestration.model.MessageToolCall; |
10 | 10 | import com.sap.ai.sdk.orchestration.model.TextContent; |
| 11 | +import java.util.ArrayList; |
11 | 12 | import java.util.List; |
12 | 13 | import javax.annotation.Nonnull; |
13 | 14 | import javax.annotation.Nullable; |
@@ -57,30 +58,55 @@ public AssistantMessage(@Nonnull final String singleMessage) { |
57 | 58 | * Creates a new assistant message with the given tool calls. |
58 | 59 | * |
59 | 60 | * @param toolCalls list of tool call objects |
| 61 | + * @deprecated Please use {@link #withToolCalls(List)} instead. |
60 | 62 | */ |
| 63 | + @Deprecated |
61 | 64 | public AssistantMessage(@Nonnull final List<MessageToolCall> toolCalls) { |
62 | 65 | content = new MessageContent(List.of()); |
63 | 66 | this.toolCalls = toolCalls; |
64 | 67 | } |
65 | 68 |
|
| 69 | + private AssistantMessage( |
| 70 | + @Nonnull final MessageContent content, @Nullable final List<MessageToolCall> toolCalls) { |
| 71 | + this.content = content; |
| 72 | + this.toolCalls = toolCalls; |
| 73 | + } |
| 74 | + |
| 75 | + /** |
| 76 | + * Returns a new AssistantMessage instance with the provided tool calls added to the existing |
| 77 | + * ones. |
| 78 | + * |
| 79 | + * @param toolCalls the list of tool calls to add. |
| 80 | + * @return a new AssistantMessage instance with the combined tool calls. |
| 81 | + */ |
| 82 | + @Nonnull |
| 83 | + public AssistantMessage withToolCalls(@Nonnull final List<MessageToolCall> toolCalls) { |
| 84 | + val newToolcalls = new ArrayList<>(this.toolCalls != null ? this.toolCalls : List.of()); |
| 85 | + newToolcalls.addAll(toolCalls); |
| 86 | + return new AssistantMessage(this.content, newToolcalls); |
| 87 | + } |
| 88 | + |
66 | 89 | @Nonnull |
67 | 90 | @Override |
68 | 91 | public ChatMessage createChatMessage() { |
| 92 | + val assistantChatMessage = AssistantChatMessage.create().role(ASSISTANT); |
| 93 | + |
69 | 94 | if (toolCalls != null) { |
70 | | - return AssistantChatMessage.create().role(ASSISTANT).toolCalls(toolCalls); |
| 95 | + assistantChatMessage.setToolCalls(toolCalls); |
71 | 96 | } |
| 97 | + |
| 98 | + ChatMessageContent text; |
72 | 99 | if (content.items().size() == 1 && content.items().get(0) instanceof TextItem textItem) { |
73 | | - return AssistantChatMessage.create() |
74 | | - .role(ASSISTANT) |
75 | | - .content(ChatMessageContent.create(textItem.text())); |
| 100 | + text = ChatMessageContent.create(textItem.text()); |
| 101 | + } else { |
| 102 | + val texts = |
| 103 | + content.items().stream() |
| 104 | + .filter(item -> item instanceof TextItem) |
| 105 | + .map(item -> (TextItem) item) |
| 106 | + .map(item -> TextContent.create().type(TextContent.TypeEnum.TEXT).text(item.text())) |
| 107 | + .toList(); |
| 108 | + text = ChatMessageContent.create(texts); |
76 | 109 | } |
77 | | - val texts = |
78 | | - content.items().stream() |
79 | | - .filter(item -> item instanceof TextItem) |
80 | | - .map(item -> (TextItem) item) |
81 | | - .map(item -> TextContent.create().type(TextContent.TypeEnum.TEXT).text(item.text())) |
82 | | - .toList(); |
83 | | - |
84 | | - return AssistantChatMessage.create().role(ASSISTANT).content(ChatMessageContent.create(texts)); |
| 110 | + return assistantChatMessage.content(text); |
85 | 111 | } |
86 | 112 | } |
0 commit comments