Skip to content

Commit 123b68c

Browse files
committed
Remove parsing for streaming
1 parent c6577c1 commit 123b68c

File tree

2 files changed

+2
-91
lines changed

2 files changed

+2
-91
lines changed

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

Lines changed: 2 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@
22

33
import com.fasterxml.jackson.core.JsonParser;
44
import com.fasterxml.jackson.databind.DeserializationContext;
5-
import com.fasterxml.jackson.databind.JavaType;
6-
import com.fasterxml.jackson.databind.JsonNode;
75
import com.fasterxml.jackson.databind.ObjectMapper;
86
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
97
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResult;
10-
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResultStreaming;
118
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResultSynchronous;
129
import java.io.IOException;
1310
import java.io.Serial;
@@ -28,13 +25,7 @@ class LLMModuleResultDeserializer extends StdDeserializer<LLMModuleResult> {
2825
}
2926

3027
/**
31-
* Deserialize the JSON object into one of the subtypes of the base type.
32-
*
33-
* <ul>
34-
* <li>If elements of "choices" array contains "delta", deserialize into {@link
35-
* LLMModuleResultStreaming}.
36-
* <li>Otherwise, deserialize into {@link LLMModuleResultSynchronous}.
37-
* </ul>
28+
* Always deserialize into {@link LLMModuleResultSynchronous} since streaming isn't supported yet.
3829
*
3930
* @param parser The JSON parser.
4031
* @param context The deserialization context.
@@ -46,50 +37,9 @@ class LLMModuleResultDeserializer extends StdDeserializer<LLMModuleResult> {
4637
public LLMModuleResult deserialize(
4738
@Nonnull final JsonParser parser, @Nonnull final DeserializationContext context)
4839
throws IOException {
49-
50-
// Check if the target type is a concrete class
51-
val targetType = context.getContextualType();
52-
if (targetType != null && !LLMModuleResult.class.equals(targetType.getRawClass())) {
53-
return delegateToDefaultDeserializer(parser, context, targetType);
54-
}
55-
56-
// Custom deserialization logic for LLMModuleResult interface
5740
val mapper = (ObjectMapper) parser.getCodec();
5841
val rootNode = mapper.readTree(parser);
59-
Class<? extends LLMModuleResult> concreteClass = LLMModuleResultSynchronous.class;
60-
61-
// Inspect the "choices" field
62-
val choicesNode = rootNode.get("choices");
63-
if (choicesNode != null && choicesNode.isArray()) {
64-
val firstChoice = (JsonNode) choicesNode.get(0);
65-
if (firstChoice != null && firstChoice.has("delta")) {
66-
concreteClass = LLMModuleResultStreaming.class;
67-
}
68-
}
6942

70-
// Create a new parser for the root node
71-
val rootParser = rootNode.traverse(mapper);
72-
rootParser.nextToken(); // Advance to the first token
73-
74-
// Use the default deserializer for the concrete class
75-
return delegateToDefaultDeserializer(rootParser, context, mapper.constructType(concreteClass));
76-
}
77-
78-
/**
79-
* Delegate deserialization to the default deserializer for the given concrete type.
80-
*
81-
* @param parser The JSON parser.
82-
* @param context The deserialization context.
83-
* @param concreteType The concrete type to deserialize into.
84-
* @return The deserialized object.
85-
* @throws IOException If an I/O error occurs.
86-
*/
87-
private LLMModuleResult delegateToDefaultDeserializer(
88-
@Nonnull final JsonParser parser,
89-
@Nonnull final DeserializationContext context,
90-
@Nonnull final JavaType concreteType)
91-
throws IOException {
92-
val defaultDeserializer = context.findRootValueDeserializer(concreteType);
93-
return (LLMModuleResult) defaultDeserializer.deserialize(parser, context);
43+
return mapper.readValue(rootNode.toString(), LLMModuleResultSynchronous.class);
9444
}
9545
}

orchestration/src/test/java/com/sap/ai/sdk/orchestration/LLMModuleResultDeserializerTest.java

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import com.fasterxml.jackson.databind.ObjectMapper;
66
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResult;
7-
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResultStreaming;
87
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResultSynchronous;
98
import lombok.SneakyThrows;
109
import org.junit.jupiter.api.Test;
@@ -54,42 +53,4 @@ void testSubtypeResolutionSynchronous() {
5453
// Assert
5554
assertThat(result).isExactlyInstanceOf(LLMModuleResultSynchronous.class);
5655
}
57-
58-
@SneakyThrows
59-
@Test
60-
void testSubtypeResolutionStreaming() {
61-
var choices =
62-
"""
63-
[
64-
{
65-
"index": 0,
66-
"delta": {
67-
"content": "Sample response content."
68-
}
69-
}
70-
]
71-
""";
72-
73-
var json = String.format(jsonTemplate, choices);
74-
75-
// Deserialize JSON content
76-
LLMModuleResult result = objectMapper.readValue(json, LLMModuleResult.class);
77-
78-
// Assert
79-
assertThat(result).isExactlyInstanceOf(LLMModuleResultStreaming.class);
80-
}
81-
82-
@SneakyThrows
83-
@Test
84-
void testSubtypeResolutionEmptyChoices() {
85-
86-
String choice = "[]";
87-
var json = String.format(jsonTemplate, choice);
88-
89-
// Deserialize JSON content
90-
LLMModuleResult result = objectMapper.readValue(json, LLMModuleResult.class);
91-
92-
// Assert
93-
assertThat(result).isExactlyInstanceOf(LLMModuleResultSynchronous.class);
94-
}
9556
}

0 commit comments

Comments
 (0)