Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@

### 🐛 Fixed Issues

-
- [Orchestration] Tool calling works on all models
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.sap.ai.sdk.orchestration.model.ChatMessageContent;
import com.sap.ai.sdk.orchestration.model.MessageToolCall;
import com.sap.ai.sdk.orchestration.model.TextContent;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -57,30 +58,55 @@ public AssistantMessage(@Nonnull final String singleMessage) {
* Creates a new assistant message with the given tool calls.
*
* @param toolCalls list of tool call objects
* @deprecated Please use {@link #withToolCalls(List)} instead.
*/
@Deprecated
public AssistantMessage(@Nonnull final List<MessageToolCall> toolCalls) {
content = new MessageContent(List.of());
this.toolCalls = toolCalls;
}

private AssistantMessage(
@Nonnull final MessageContent content, @Nullable final List<MessageToolCall> toolCalls) {
this.content = content;
this.toolCalls = toolCalls;
}

/**
* Returns a new AssistantMessage instance with the provided tool calls added to the existing
* ones.
*
* @param toolCalls the list of tool calls to add.
* @return a new AssistantMessage instance with the combined tool calls.
*/
@Nonnull
public AssistantMessage withToolCalls(@Nonnull final List<MessageToolCall> toolCalls) {
val newToolcalls = new ArrayList<>(this.toolCalls != null ? this.toolCalls : List.of());
newToolcalls.addAll(toolCalls);
return new AssistantMessage(this.content, newToolcalls);
}

@Nonnull
@Override
public ChatMessage createChatMessage() {
val assistantChatMessage = AssistantChatMessage.create().role(ASSISTANT);

if (toolCalls != null) {
return AssistantChatMessage.create().role(ASSISTANT).toolCalls(toolCalls);
assistantChatMessage.setToolCalls(toolCalls);
}

ChatMessageContent text;
if (content.items().size() == 1 && content.items().get(0) instanceof TextItem textItem) {
return AssistantChatMessage.create()
.role(ASSISTANT)
.content(ChatMessageContent.create(textItem.text()));
text = ChatMessageContent.create(textItem.text());
} else {
val texts =
content.items().stream()
.filter(item -> item instanceof TextItem)
.map(item -> (TextItem) item)
.map(item -> TextContent.create().type(TextContent.TypeEnum.TEXT).text(item.text()))
.toList();
text = ChatMessageContent.create(texts);
}
val texts =
content.items().stream()
.filter(item -> item instanceof TextItem)
.map(item -> (TextItem) item)
.map(item -> TextContent.create().type(TextContent.TypeEnum.TEXT).text(item.text()))
.toList();

return AssistantChatMessage.create().role(ASSISTANT).content(ChatMessageContent.create(texts));
return assistantChatMessage.content(text);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -126,16 +126,17 @@ private static com.sap.ai.sdk.orchestration.Message[] toOrchestrationMessages(
case USER:
yield List.of(new UserMessage(msg.getText()));
case ASSISTANT:
val assistantMessage = new AssistantMessage(msg.getText());
val springToolCalls =
((org.springframework.ai.chat.messages.AssistantMessage) msg).getToolCalls();
if (springToolCalls != null && !springToolCalls.isEmpty()) {
final List<MessageToolCall> sdkToolCalls =
springToolCalls.stream()
.map(OrchestrationChatModel::toOrchestrationToolCall)
.toList();
yield List.of(new AssistantMessage(sdkToolCalls));
yield List.of(assistantMessage.withToolCalls(sdkToolCalls));
}
yield List.of(new AssistantMessage(msg.getText()));
yield List.of(assistantMessage);
case TOOL:
val toolResponses = ((ToolResponseMessage) msg).getResponses();
yield toolResponses.stream()
Expand Down
1 change: 1 addition & 0 deletions orchestration/src/test/resources/toolCallsRequest2.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
},
{
"role": "assistant",
"content" : "",
"tool_calls": [
{
"id": "call_LOyP7EVdeqFlGEmVzmPdCVey",
Expand Down
Loading