Skip to content

Commit 90f34b9

Browse files
chore: using the valuesAs converter for messages
1 parent 877d4e2 commit 90f34b9

File tree

4 files changed

+82
-44
lines changed

4 files changed

+82
-44
lines changed

lib/sdk/server-ai/src/main/java/com/launchdarkly/sdk/server/ai/LDAiClient.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,8 @@ protected AiConfig parseAiConfig(LDValue value, String key) {
8484
}
8585

8686
List<Message> messages = new ArrayList<Message>();
87-
for (LDValue valueMessage : valueMessages.values()) {
88-
if (valueMessage == LDValue.ofNull() || valueMessage.getType() != LDValueType.OBJECT) {
89-
throw new AiConfigParseException("individual message must be a JSON object");
90-
}
91-
92-
Message message = new Message(ldValueNullCheck(valueMessage.get("content")).stringValue(), Role.valueOf(valueMessage.get("role").stringValue().toUpperCase()));
87+
valueMessages.valuesAs(new Message.MessageConverter());
88+
for (Message message : valueMessages.valuesAs(new Message.MessageConverter())) {
9389
messages.add(message);
9490
}
9591
result.setMessages(messages);

lib/sdk/server-ai/src/main/java/com/launchdarkly/sdk/server/ai/datamodel/Message.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,23 @@
11
package com.launchdarkly.sdk.server.ai.datamodel;
22

3+
import com.launchdarkly.sdk.LDValue;
4+
35
public final class Message {
6+
public static class MessageConverter extends LDValue.Converter<Message> {
7+
@Override
8+
public LDValue fromType(Message message) {
9+
return LDValue.buildObject()
10+
.put("content", message.getContent())
11+
.put("role", message.getRole().toString())
12+
.build();
13+
}
14+
15+
@Override
16+
public Message toType(LDValue ldValue) {
17+
return new Message(ldValue.get("content").stringValue(), Role.getRole(ldValue.get("role").stringValue()));
18+
}
19+
}
20+
421
private String content;
522

623
private Role role;

lib/sdk/server-ai/src/main/java/com/launchdarkly/sdk/server/ai/datamodel/Role.java

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,37 @@ public enum Role {
77
/**
88
* User Role
99
*/
10-
USER,
10+
USER("user"),
1111
/**
1212
* System Role
1313
*/
14-
SYSTEM,
14+
SYSTEM("system"),
1515
/**
1616
* Assistant Role
1717
*/
18-
ASSISTANT
18+
ASSISTANT("assistant");
19+
20+
private final String role;
21+
22+
private Role(String role) {
23+
this.role = role;
24+
}
25+
26+
public static Role getRole(String role) {
27+
switch (role) {
28+
case "user":
29+
return USER;
30+
case "system":
31+
return SYSTEM;
32+
case "assistant":
33+
return ASSISTANT;
34+
default:
35+
return null;
36+
}
37+
}
38+
39+
@Override
40+
public String toString() {
41+
return role;
42+
}
1943
}

lib/sdk/server-ai/src/test/java/com/launchdarkly/sdk/server/ai/LDAiClientTest.java

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,50 +9,51 @@
99
import static org.junit.Assert.assertEquals;
1010

1111
public class LDAiClientTest {
12-
@Test
12+
@Test
1313
public void testParseAiConfig() {
1414
String rawJson = "{\n" + //
15-
" \"_ldMeta\": {\n" + //
16-
" \"variationKey\" : 1234,\n" + //
17-
" \"enabled\": true,\n" + //
18-
" \"version\": 1\n" + //
19-
" },\n" + //
20-
" \"messages\": [\n" + //
21-
" {\n" + //
22-
" \"content\": \"This is an {{ adjective }} message.\",\n" + //
23-
" \"role\": \"user\"\n" + //
24-
" },\n" + //
25-
" {\n" + //
26-
" \"content\": \"{{ greeting}}, this is another message!\",\n" + //
27-
" \"role\": \"system\"\n" + //
28-
" },\n" + //
29-
" {\n" + //
30-
" \"content\": \"This is the final {{ noun }}.\",\n" + //
31-
" \"role\": \"assistant\"\n" + //
32-
" }\n" + //
33-
" ],\n" + //
34-
" \"model\": {\n" + //
35-
" \"name\": \"my-cool-custom-model\",\n" + //
36-
" \"parameters\": {\n" + //
37-
" \"foo\" : \"bar\",\n" + //
38-
" \"baz\" : 23,\n" + //
39-
" \"qux\" : true,\n" + //
40-
" \"whatever\" : [],\n" + //
41-
" \"another\" : {}\n" + //
42-
" }\n" + //
43-
" },\n" + //
44-
" \"provider\": {\n" + //
45-
" \"name\" : \"provider-name\"\n" + //
46-
" }\n" + //
47-
"}";
15+
" \"_ldMeta\": {\n" + //
16+
" \"variationKey\" : 1234,\n" + //
17+
" \"enabled\": true,\n" + //
18+
" \"version\": 1\n" + //
19+
" },\n" + //
20+
" \"messages\": [\n" + //
21+
" {\n" + //
22+
" \"content\": \"This is an {{ adjective }} message.\",\n" + //
23+
" \"role\": \"user\"\n" + //
24+
" },\n" + //
25+
" {\n" + //
26+
" \"content\": \"{{ greeting}}, this is another message!\",\n" + //
27+
" \"role\": \"system\"\n" + //
28+
" },\n" + //
29+
" {\n" + //
30+
" \"content\": \"This is the final {{ noun }}.\",\n" + //
31+
" \"role\": \"assistant\"\n" + //
32+
" }\n" + //
33+
" ],\n" + //
34+
" \"model\": {\n" + //
35+
" \"name\": \"my-cool-custom-model\",\n" + //
36+
" \"parameters\": {\n" + //
37+
" \"foo\" : \"bar\",\n" + //
38+
" \"baz\" : 23,\n" + //
39+
" \"qux\" : true,\n" + //
40+
" \"whatever\" : [],\n" + //
41+
" \"another\" : {}\n" + //
42+
" }\n" + //
43+
" },\n" + //
44+
" \"provider\": {\n" + //
45+
" \"name\" : \"provider-name\"\n" + //
46+
" }\n" + //
47+
"}";
4848

4949
LDValue input = LDValue.parse(rawJson);
50-
50+
5151
LDAiClient client = new LDAiClient(null);
5252

5353
AiConfig result = client.parseAiConfig(input, "Whatever");
5454

5555
assertEquals(Role.USER, result.getMessages().get(0).getRole());
56+
assertEquals("This is the final {{ noun }}.", result.getMessages().get(2).getContent());
5657
assertEquals(Integer.valueOf(1), result.getMeta().getVersion().orElse(0));
5758
assertEquals(LDValue.of(true), result.getModel().getParameters().get("qux"));
5859
assertEquals("provider-name", result.getProvider().getName());

0 commit comments

Comments
 (0)