Skip to content

Commit 3dd3085

Browse files
committed
Reduce and streamline amount of public API
1 parent 837fd66 commit 3dd3085

File tree

11 files changed

+108
-231
lines changed

11 files changed

+108
-231
lines changed

orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.sap.ai.sdk.orchestration;
22

33
import com.google.common.annotations.Beta;
4+
import java.util.List;
45
import javax.annotation.Nonnull;
56
import lombok.Getter;
67
import lombok.Value;
@@ -25,6 +26,6 @@ public class AssistantMessage implements Message {
2526
* @param singleMessage the single message.
2627
*/
2728
public AssistantMessage(@Nonnull final String singleMessage) {
28-
content = new MessageContent(singleMessage);
29+
content = new MessageContent(List.of(new TextItem(singleMessage)));
2930
}
3031
}

orchestration/src/main/java/com/sap/ai/sdk/orchestration/Message.java

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,32 @@
77
import com.sap.ai.sdk.orchestration.model.MultiChatMessage;
88
import com.sap.ai.sdk.orchestration.model.SingleChatMessage;
99
import com.sap.ai.sdk.orchestration.model.TextContent;
10+
import java.util.List;
1011
import javax.annotation.Nonnull;
11-
import javax.annotation.Nullable;
1212

1313
/** Interface representing convenience wrappers of chat message to the orchestration service. */
1414
public sealed interface Message permits UserMessage, AssistantMessage, SystemMessage {
1515

1616
/**
17-
* A convenience method to create a user message from one or more strings.
17+
* A convenience method to create a user message from a string.
1818
*
1919
* @param message the message content.
20-
* @param additionalMessages the additional messages.
2120
* @return the user message.
2221
*/
2322
@Nonnull
24-
static UserMessage user(
25-
@Nonnull final String message, @Nullable final String... additionalMessages) {
26-
return new UserMessage(message, additionalMessages);
23+
static UserMessage user(@Nonnull final String message) {
24+
return new UserMessage(message);
2725
}
2826

2927
/**
30-
* A convenience method to create a user message.
28+
* A convenience method to create a user message containing only an image.
3129
*
32-
* @param message the message content.
30+
* @param imageItem the message content.
3331
* @return the user message.
3432
*/
3533
@Nonnull
36-
static UserMessage user(@Nonnull final MessageContent message) {
37-
return new UserMessage(message);
34+
static UserMessage user(@Nonnull final ImageItem imageItem) {
35+
return new UserMessage(new MessageContent(List.of(imageItem)));
3836
}
3937

4038
/**
@@ -49,26 +47,13 @@ static AssistantMessage assistant(@Nonnull final String message) {
4947
}
5048

5149
/**
52-
* A convenience method to create a system message from one or more strings.
53-
*
54-
* @param message the message content.
55-
* @return the system message.
56-
*/
57-
@Nonnull
58-
static SystemMessage system(
59-
@Nonnull final String message, @Nullable final String... additionalMessages) {
60-
return new SystemMessage(message, additionalMessages);
61-
}
62-
63-
/**
64-
* A convenience method to create a system message. As of now, only text content is supported for
65-
* system messages by most AIs.
50+
* A convenience method to create a system message from a string.
6651
*
6752
* @param message the message content.
6853
* @return the system message.
6954
*/
7055
@Nonnull
71-
static SystemMessage system(@Nonnull final MessageContent message) {
56+
static SystemMessage system(@Nonnull final String message) {
7257
return new SystemMessage(message);
7358
}
7459

orchestration/src/main/java/com/sap/ai/sdk/orchestration/MessageContent.java

Lines changed: 18 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -3,89 +3,33 @@
33
import com.sap.ai.sdk.orchestration.model.ImageContent;
44
import com.sap.ai.sdk.orchestration.model.MultiChatMessageContent;
55
import com.sap.ai.sdk.orchestration.model.TextContent;
6-
import java.util.Arrays;
76
import java.util.List;
8-
import java.util.function.Function;
9-
import java.util.stream.Stream;
107
import javax.annotation.Nonnull;
11-
import javax.annotation.Nullable;
128

139
/**
1410
* Represents the content of a chat message.
1511
*
1612
* @param contentItemList a list of the content items
1713
*/
1814
public record MessageContent(@Nonnull List<ContentItem> contentItemList) {
19-
20-
MessageContent(@Nonnull final String singleMessage) {
21-
this(List.of(new TextItem(singleMessage)));
22-
}
23-
24-
/**
25-
* Creates a new message content containing one {@link ImageItem} with the given image URL and
26-
* detail level.
27-
*
28-
* @param imageUrl the URL of the image
29-
* @param detailLevel the detail level of the image
30-
* @return the new message content
31-
*/
32-
@Nonnull
33-
public static MessageContent image(
34-
@Nonnull final String imageUrl, @Nonnull final ImageItem.DetailLevel detailLevel) {
35-
return new MessageContent(List.of(new ImageItem(imageUrl, detailLevel)));
36-
}
37-
38-
/**
39-
* Creates a new message content containing one {@link ImageItem} with the given image URL.
40-
*
41-
* @param imageUrl the URL of the image
42-
* @return the new message content
43-
*/
44-
@Nonnull
45-
public static MessageContent image(@Nonnull final String imageUrl) {
46-
return new MessageContent(List.of(new ImageItem(imageUrl)));
47-
}
48-
49-
/**
50-
* Creates a new message content containing one or more {@link TextItem}s with the given texts.
51-
*
52-
* @param message the first text of the message
53-
* @param additionalMessages additional texts of the message
54-
* @return the new message content
55-
*/
56-
@Nonnull
57-
public static MessageContent text(
58-
@Nonnull final String message, @Nullable final String... additionalMessages) {
59-
final var messagesStream =
60-
(additionalMessages != null)
61-
? Stream.concat(Stream.of(message), Stream.of(additionalMessages))
62-
: Stream.of(message);
63-
final var contentList = messagesStream.map(text -> (ContentItem) new TextItem(text)).toList();
64-
return new MessageContent(contentList);
65-
}
66-
67-
/**
68-
* Creates a new message content containing multiple {@link ContentItem}s.
69-
*
70-
* @param multiChatContents the content items
71-
*/
72-
public MessageContent(@Nonnull final MultiChatMessageContent... multiChatContents) {
73-
this(convertIntoMultiMessageList(multiChatContents));
74-
}
75-
7615
@Nonnull
77-
private static List<ContentItem> convertIntoMultiMessageList(
78-
@Nonnull final MultiChatMessageContent... multiChatContents) {
79-
final Function<MultiChatMessageContent, ContentItem> convertMultiChatContent =
80-
content -> {
81-
if (content instanceof TextContent text) {
82-
return new TextItem(text.getText());
83-
} else {
84-
final var imageUrl = ((ImageContent) content).getImageUrl();
85-
return new ImageItem(
86-
imageUrl.getUrl(), ImageItem.DetailLevel.fromString(imageUrl.getDetail()));
87-
}
88-
};
89-
return Arrays.stream(multiChatContents).map(convertMultiChatContent).toList();
16+
static MessageContent fromMCMContentList(
17+
@Nonnull final List<MultiChatMessageContent> mCMContentList) {
18+
final var itemList =
19+
mCMContentList.stream()
20+
.map(
21+
content -> {
22+
if (content instanceof TextContent text) {
23+
return new TextItem(text.getText());
24+
} else {
25+
final var imageUrl = ((ImageContent) content).getImageUrl();
26+
return (ContentItem)
27+
new ImageItem(
28+
imageUrl.getUrl(),
29+
ImageItem.DetailLevel.fromString(imageUrl.getDetail()));
30+
}
31+
})
32+
.toList();
33+
return new MessageContent(itemList);
9034
}
9135
}

orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationChatResponse.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import com.sap.ai.sdk.orchestration.model.LLMChoice;
88
import com.sap.ai.sdk.orchestration.model.LLMModuleResultSynchronous;
99
import com.sap.ai.sdk.orchestration.model.MultiChatMessage;
10-
import com.sap.ai.sdk.orchestration.model.MultiChatMessageContent;
1110
import com.sap.ai.sdk.orchestration.model.SingleChatMessage;
1211
import com.sap.ai.sdk.orchestration.model.TokenUsage;
1312
import java.util.ArrayList;
@@ -74,13 +73,9 @@ public List<Message> getAllMessages() throws IllegalArgumentException {
7473
messages.add(
7574
switch (mCMessage.getRole()) {
7675
case "user" ->
77-
Message.user(
78-
new MessageContent(
79-
mCMessage.getContent().toArray(MultiChatMessageContent[]::new)));
76+
new UserMessage(MessageContent.fromMCMContentList(mCMessage.getContent()));
8077
case "system" ->
81-
Message.system(
82-
new MessageContent(
83-
mCMessage.getContent().toArray(MultiChatMessageContent[]::new)));
78+
new SystemMessage(MessageContent.fromMCMContentList(mCMessage.getContent()));
8479
default ->
8580
throw new IllegalStateException(
8681
"Unexpected role with complex message: " + mCMessage.getRole());
Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package com.sap.ai.sdk.orchestration;
22

33
import com.google.common.annotations.Beta;
4+
import java.util.LinkedList;
45
import java.util.List;
5-
import java.util.stream.Stream;
66
import javax.annotation.Nonnull;
7-
import javax.annotation.Nullable;
87
import lombok.Getter;
98
import lombok.Value;
109
import lombok.experimental.Accessors;
@@ -23,14 +22,12 @@ public class SystemMessage implements Message {
2322
MessageContent content;
2423

2524
/**
26-
* Creates a new system message from one or more strings.
25+
* Creates a new system message from a string.
2726
*
2827
* @param message the first message.
29-
* @param additionalMessages the additional messages.
3028
*/
31-
public SystemMessage(
32-
@Nonnull final String message, @Nullable final String... additionalMessages) {
33-
content = MessageContent.text(message, additionalMessages);
29+
public SystemMessage(@Nonnull final String message) {
30+
content = new MessageContent(List.of(new TextItem(message)));
3431
}
3532

3633
/**
@@ -45,33 +42,13 @@ public SystemMessage(@Nonnull final MessageContent messageContent) {
4542
/**
4643
* Add text to the message.
4744
*
48-
* @param messages the text to add.
45+
* @param message the text to add.
4946
* @return the new message.
5047
*/
5148
@Nonnull
52-
public SystemMessage andText(@Nonnull final String... messages) {
53-
return new SystemMessage(
54-
new MessageContent(
55-
Stream.concat(
56-
content.contentItemList().stream(), Stream.of(messages).map(TextItem::new))
57-
.toList()));
58-
}
59-
60-
/**
61-
* Add content to the message. The content will be added to the end of the message. As of now,
62-
* only TextItem will be successfully consumed by an AI.
63-
*
64-
* @param messageContents the content to add.
65-
* @return the new message.
66-
*/
67-
@Nonnull
68-
public SystemMessage and(@Nonnull final MessageContent... messageContents) {
69-
final List<ContentItem> combinedItems =
70-
Stream.concat(
71-
content.contentItemList().stream(),
72-
Stream.of(messageContents)
73-
.flatMap(contentItem -> contentItem.contentItemList().stream()))
74-
.toList();
75-
return new SystemMessage(new MessageContent(combinedItems));
49+
public SystemMessage andText(@Nonnull final String message) {
50+
final var contentItems = new LinkedList<>(content.contentItemList());
51+
contentItems.add(new TextItem(message));
52+
return new SystemMessage(new MessageContent(contentItems));
7653
}
7754
}

orchestration/src/main/java/com/sap/ai/sdk/orchestration/UserMessage.java

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
import com.google.common.annotations.Beta;
44
import java.util.LinkedList;
55
import java.util.List;
6-
import java.util.stream.Stream;
76
import javax.annotation.Nonnull;
8-
import javax.annotation.Nullable;
97
import lombok.Getter;
108
import lombok.Value;
119
import lombok.experimental.Accessors;
@@ -25,34 +23,26 @@ public class UserMessage implements Message {
2523
MessageContent content;
2624

2725
/**
28-
* Creates a new user message from one or more strings.
26+
* Creates a new user message from a string.
2927
*
3028
* @param message the first message.
31-
* @param additionalMessages the additional messages.
3229
*/
3330
@Tolerate
34-
public UserMessage(@Nonnull final String message, @Nullable final String... additionalMessages) {
35-
this(MessageContent.text(message, additionalMessages));
31+
public UserMessage(@Nonnull final String message) {
32+
this(new MessageContent(List.of(new TextItem(message))));
3633
}
3734

3835
/**
3936
* Add text to the message.
4037
*
41-
* @param message the text to add
42-
* @param additionalMessages additional text to add
38+
* @param message the text to add.
4339
* @return the new message.
4440
*/
4541
@Nonnull
46-
public UserMessage andText(
47-
@Nonnull final String message, @Nullable final String... additionalMessages) {
48-
final var messagesStream =
49-
(additionalMessages != null)
50-
? Stream.concat(Stream.of(message), Stream.of(additionalMessages))
51-
: Stream.of(message);
52-
final var contentList =
53-
Stream.concat(content.contentItemList().stream(), messagesStream.map(TextItem::new))
54-
.toList();
55-
return new UserMessage(new MessageContent(contentList));
42+
public UserMessage andText(@Nonnull final String message) {
43+
final var contentItems = new LinkedList<>(content.contentItemList());
44+
contentItems.add(new TextItem(message));
45+
return new UserMessage(new MessageContent(contentItems));
5646
}
5747

5848
/**
@@ -82,21 +72,4 @@ public UserMessage andImage(@Nonnull final String imageUrl) {
8272
contentItems.add(new ImageItem(imageUrl));
8373
return new UserMessage(new MessageContent(contentItems));
8474
}
85-
86-
/**
87-
* Add content in the form of {@link MessageContent} objects to the message.
88-
*
89-
* @param messageContents the content to add.
90-
* @return the new message.
91-
*/
92-
@Nonnull
93-
public UserMessage and(@Nonnull final MessageContent... messageContents) {
94-
final List<ContentItem> combinedItems =
95-
Stream.concat(
96-
content.contentItemList().stream(),
97-
Stream.of(messageContents)
98-
.flatMap(contentItem -> contentItem.contentItemList().stream()))
99-
.toList();
100-
return new UserMessage(new MessageContent(combinedItems));
101-
}
10275
}

0 commit comments

Comments
 (0)