Skip to content

Commit 9afba08

Browse files
committed
LLMModule specific deserializer ready. Test success.
1 parent 0952513 commit 9afba08

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+172
-413
lines changed

orchestration/.openapi-generator-ignore

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,12 @@ src/main/AndroidManifest.xml
1717
.openapi-generator-ignore
1818
api/
1919
.openapi-generator/
20-
.openapi-generator
20+
.openapi-generator
21+
22+
src/main/java/com/sap/ai/sdk/orchestration/client/model/FilterConfig.java
23+
src/main/java/com/sap/ai/sdk/orchestration/client/model/GroundingModuleConfigConfigFiltersInner.java
24+
src/main/java/com/sap/ai/sdk/orchestration/client/model/LLMModuleResult.java
25+
src/main/java/com/sap/ai/sdk/orchestration/client/model/MaskingProviderConfig.java
26+
src/main/java/com/sap/ai/sdk/orchestration/client/model/ModuleResultsOutputUnmaskingInner.java
27+
src/main/java/com/sap/ai/sdk/orchestration/client/model/TemplateRefTemplateRef.java
28+
src/main/java/com/sap/ai/sdk/orchestration/client/model/TemplatingModuleConfig.java

orchestration/pom.xml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@
143143
<phase>generate-sources</phase>
144144
<configuration>
145145
<!-- Specify the input OpenAPI spec file -->
146-
<inputSpec>${project.basedir}/src/main/resources/spec/orchestration_discrim.yaml</inputSpec>
146+
<inputSpec>${project.basedir}/src/main/resources/spec/orchestration.yaml</inputSpec>
147147
<output>${project.basedir}</output>
148148
<!-- Specify the generator to use, e.g., java, spring, kotlin, etc. -->
149149
<generatorName>java</generatorName>
@@ -165,7 +165,7 @@
165165
<configOptions>
166166
<generateBuilders>true</generateBuilders>
167167
<failOnUnknownProperties>false</failOnUnknownProperties>
168-
<hideGenerationTimestamp>true</hideGenerationTimestamp>
168+
<hideGenerationTimestamp>false</hideGenerationTimestamp>
169169
<disallowAdditionalPropertiesIfNotPresent>false</disallowAdditionalPropertiesIfNotPresent>
170170
<enumUnknownDefaultCase>true</enumUnknownDefaultCase>
171171
<useBeanValidation>false</useBeanValidation>
@@ -177,13 +177,16 @@
177177
<generateApis>false</generateApis>
178178
<library>resttemplate</library>
179179
<!--<importMappings>
180-
<importMapping>com.sap.ai.sdk.orchestration.client.model.FilterConfig=com.sap.ai.sdk.orchestration.client
181-
.oneofs.FilterConfig</importMapping>
182-
<importMapping>com.sap.ai.sdk.orchestration.client.model.GroundingModuleConfigConfigFiltersInner=com.sap
183-
.ai.sdk.orchestration.client.oneofs.GroundingModuleConfigConfigFiltersInner</importMapping>
184-
<importMapping>com.sap.ai.sdk.orchestration.client.model.LLMModuleResult=com.sap.ai.sdk
185-
.orchestration.client.oneofs.LLMModuleResult</importMapping>
186-
</importMappings>-->
180+
<importMapping>FilterConfig=com.sap.ai.sdk.orchestration.client.oneofs.FilterConfig</importMapping>
181+
<importMapping>GroundingModuleConfigConfigFiltersInner=com.sap.ai.sdk.orchestration.client.oneofs.GroundingModuleConfigConfigFiltersInner</importMapping>
182+
<importMapping>LLMModuleResult=com.sap.ai.sdk.orchestration.client.oneofs.LLMModuleResult</importMapping>
183+
<importMapping>MaskingProviderConfig=com.sap.ai.sdk.orchestration.client.oneofs.MaskingProviderConfig</importMapping>
184+
<importMapping>ModuleResultsOutputUnmaskingInner=com.sap.ai.sdk.orchestration.client.oneofs.ModuleResultsOutputUnmaskingInner</importMapping>
185+
<importMapping>TemplateRefTemplateRef=com.sap.ai.sdk.orchestration.client.oneofs.TemplateRefTemplateRef</importMapping>
186+
<importMapping>TemplatingModuleConfig=com.sap.ai.sdk.orchestration.client.oneofs.TemplatingModuleConfig</importMapping>
187+
</importMappings>
188+
<typeMappings>com.sap.ai.sdk.orchestration.client.model.FilterConfig=com.sap.ai.sdk.orchestration.client.oneofs.FilterConfig,
189+
GroundingModuleConfigConfigFiltersInner=com.sap.ai.sdk.orchestration.client.oneofs.GroundingModuleConfigConfigFiltersInner,LLMModuleResult=com.sap.ai.sdk.orchestration.client.oneofs.LLMModuleResult,MaskingProviderConfig=com.sap.ai.sdk.orchestration.client.oneofs.MaskingProviderConfig,ModuleResultsOutputUnmaskingInner=com.sap.ai.sdk.orchestration.client.oneofs.ModuleResultsOutputUnmaskingInner,TemplateRefTemplateRef=com.sap.ai.sdk.orchestration.client.oneofs.TemplateRefTemplateRef,TemplatingModuleConfig=com.sap.ai.sdk.orchestration.client.oneofs.TemplatingModuleConfig</typeMappings>-->
187190
<!--<configHelp>true</configHelp>-->
188191
</configuration>
189192
</execution>
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.sap.ai.sdk.orchestration;
2+
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.core.JsonProcessingException;
5+
import com.fasterxml.jackson.databind.*;
6+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
7+
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResult;
8+
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResultStreaming;
9+
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResultSynchronous;
10+
import java.io.IOException;
11+
12+
public class LLMModuleResultDeserializer extends StdDeserializer<LLMModuleResult> {
13+
14+
public LLMModuleResultDeserializer() {
15+
super(LLMModuleResult.class);
16+
}
17+
18+
@Override
19+
public LLMModuleResult deserialize(JsonParser p, DeserializationContext ctxt)
20+
throws IOException, JsonProcessingException {
21+
22+
// Check if the target type is a concrete class
23+
JavaType targetType = ctxt.getContextualType();
24+
25+
if (targetType != null && !LLMModuleResult.class.equals(targetType.getRawClass())) {
26+
// If we're deserializing a concrete class, delegate to the default deserializer
27+
JsonDeserializer<Object> defaultDeserializer = ctxt.findRootValueDeserializer(targetType);
28+
return (LLMModuleResult) defaultDeserializer.deserialize(p, ctxt);
29+
}
30+
31+
// Custom deserialization logic for LLMModuleResult interface
32+
ObjectMapper mapper = (ObjectMapper) p.getCodec();
33+
JsonNode root = mapper.readTree(p);
34+
35+
// Inspect the "choices" field
36+
JsonNode choicesNode = root.get("choices");
37+
38+
if (choicesNode != null && choicesNode.isArray()) {
39+
JsonNode firstChoice = choicesNode.get(0);
40+
if (firstChoice != null) {
41+
Class<? extends LLMModuleResult> concreteClass = null;
42+
if (firstChoice.has("delta")) {
43+
concreteClass = LLMModuleResultStreaming.class;
44+
} else if (firstChoice.has("message")) {
45+
concreteClass = LLMModuleResultSynchronous.class;
46+
}
47+
48+
if (concreteClass != null) {
49+
// Deserialize into the determined concrete class
50+
// Create a new parser for the root node
51+
JsonParser rootParser = root.traverse(mapper);
52+
rootParser.nextToken(); // Advance to the first token
53+
54+
// Use the default deserializer for the concrete class
55+
JsonDeserializer<?> deserializer =
56+
ctxt.findRootValueDeserializer(ctxt.constructType(concreteClass));
57+
58+
return (LLMModuleResult) deserializer.deserialize(rootParser, ctxt);
59+
}
60+
}
61+
}
62+
63+
// If unable to determine, throw an exception or handle default case
64+
throw new JsonMappingException(
65+
p, "Unable to determine the concrete implementation of LLMModuleResult");
66+
}
67+
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.sap.ai.sdk.core.AiCoreService;
1313
import com.sap.ai.sdk.orchestration.client.model.CompletionPostRequest;
1414
import com.sap.ai.sdk.orchestration.client.model.CompletionPostResponse;
15+
import com.sap.ai.sdk.orchestration.client.model.LLMModuleResult;
1516
import com.sap.cloud.sdk.cloudplatform.connectivity.ApacheHttpClient5Accessor;
1617
import com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException;
1718
import com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationNotFoundException;
@@ -47,6 +48,7 @@ public class OrchestrationClient implements OrchestrationConfig<OrchestrationCli
4748
.visibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE)
4849
.visibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE)
4950
.serializationInclusion(JsonInclude.Include.NON_NULL)
51+
.deserializerByType(LLMModuleResult.class, new LLMModuleResultDeserializer())
5052
.build();
5153
}
5254

orchestration/src/main/java/com/sap/ai/sdk/orchestration/client/model/AzureContentSafety.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
})
2727
@javax.annotation.Generated(
2828
value = "org.openapitools.codegen.languages.JavaClientCodegen",
29+
date = "2024-11-08T14:16:03.918111+01:00[Europe/Berlin]",
2930
comments = "Generator version: 7.9.0")
3031
public class AzureContentSafety {
3132
public static final String JSON_PROPERTY_HATE = "Hate";

orchestration/src/main/java/com/sap/ai/sdk/orchestration/client/model/AzureContentSafetyFilterConfig.java

Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,14 @@
2121

2222
/** AzureContentSafetyFilterConfig */
2323
@JsonPropertyOrder({
24-
AzureContentSafetyFilterConfig.JSON_PROPERTY_X_DISCRIMINATOR_VALUE,
2524
AzureContentSafetyFilterConfig.JSON_PROPERTY_TYPE,
2625
AzureContentSafetyFilterConfig.JSON_PROPERTY_CONFIG
2726
})
2827
@javax.annotation.Generated(
2928
value = "org.openapitools.codegen.languages.JavaClientCodegen",
29+
date = "2024-11-08T14:16:03.918111+01:00[Europe/Berlin]",
3030
comments = "Generator version: 7.9.0")
3131
public class AzureContentSafetyFilterConfig implements FilterConfig {
32-
public static final String JSON_PROPERTY_X_DISCRIMINATOR_VALUE = "x-discriminator-value";
33-
private String xDiscriminatorValue;
34-
3532
/** String represents name of the filter provider */
3633
public enum TypeEnum {
3734
AZURE_CONTENT_SAFETY("azure_content_safety"),
@@ -73,30 +70,6 @@ public static TypeEnum fromValue(String value) {
7370

7471
public AzureContentSafetyFilterConfig() {}
7572

76-
public AzureContentSafetyFilterConfig xDiscriminatorValue(String xDiscriminatorValue) {
77-
78-
this.xDiscriminatorValue = xDiscriminatorValue;
79-
return this;
80-
}
81-
82-
/**
83-
* Discriminator for the type of the object
84-
*
85-
* @return xDiscriminatorValue
86-
*/
87-
@javax.annotation.Nullable
88-
@JsonProperty(JSON_PROPERTY_X_DISCRIMINATOR_VALUE)
89-
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
90-
public String getxDiscriminatorValue() {
91-
return xDiscriminatorValue;
92-
}
93-
94-
@JsonProperty(JSON_PROPERTY_X_DISCRIMINATOR_VALUE)
95-
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
96-
public void setxDiscriminatorValue(String xDiscriminatorValue) {
97-
this.xDiscriminatorValue = xDiscriminatorValue;
98-
}
99-
10073
public AzureContentSafetyFilterConfig type(TypeEnum type) {
10174

10275
this.type = type;
@@ -155,24 +128,19 @@ public boolean equals(Object o) {
155128
}
156129
AzureContentSafetyFilterConfig azureContentSafetyFilterConfig =
157130
(AzureContentSafetyFilterConfig) o;
158-
return Objects.equals(
159-
this.xDiscriminatorValue, azureContentSafetyFilterConfig.xDiscriminatorValue)
160-
&& Objects.equals(this.type, azureContentSafetyFilterConfig.type)
131+
return Objects.equals(this.type, azureContentSafetyFilterConfig.type)
161132
&& Objects.equals(this.config, azureContentSafetyFilterConfig.config);
162133
}
163134

164135
@Override
165136
public int hashCode() {
166-
return Objects.hash(xDiscriminatorValue, type, config);
137+
return Objects.hash(type, config);
167138
}
168139

169140
@Override
170141
public String toString() {
171142
StringBuilder sb = new StringBuilder();
172143
sb.append("class AzureContentSafetyFilterConfig {\n");
173-
sb.append(" xDiscriminatorValue: ")
174-
.append(toIndentedString(xDiscriminatorValue))
175-
.append("\n");
176144
sb.append(" type: ").append(toIndentedString(type)).append("\n");
177145
sb.append(" config: ").append(toIndentedString(config)).append("\n");
178146
sb.append("}");
@@ -201,11 +169,6 @@ protected Builder(AzureContentSafetyFilterConfig instance) {
201169
this.instance = instance;
202170
}
203171

204-
public AzureContentSafetyFilterConfig.Builder xDiscriminatorValue(String xDiscriminatorValue) {
205-
this.instance.xDiscriminatorValue = xDiscriminatorValue;
206-
return this;
207-
}
208-
209172
public AzureContentSafetyFilterConfig.Builder type(TypeEnum type) {
210173
this.instance.type = type;
211174
return this;
@@ -243,9 +206,6 @@ public static AzureContentSafetyFilterConfig.Builder builder() {
243206

244207
/** Create a builder with a shallow copy of this instance. */
245208
public AzureContentSafetyFilterConfig.Builder toBuilder() {
246-
return new AzureContentSafetyFilterConfig.Builder()
247-
.xDiscriminatorValue(getxDiscriminatorValue())
248-
.type(getType())
249-
.config(getConfig());
209+
return new AzureContentSafetyFilterConfig.Builder().type(getType()).config(getConfig());
250210
}
251211
}

orchestration/src/main/java/com/sap/ai/sdk/orchestration/client/model/ChatDelta.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
@JsonPropertyOrder({ChatDelta.JSON_PROPERTY_ROLE, ChatDelta.JSON_PROPERTY_CONTENT})
2222
@javax.annotation.Generated(
2323
value = "org.openapitools.codegen.languages.JavaClientCodegen",
24+
date = "2024-11-08T14:16:03.918111+01:00[Europe/Berlin]",
2425
comments = "Generator version: 7.9.0")
2526
public class ChatDelta {
2627
public static final String JSON_PROPERTY_ROLE = "role";

orchestration/src/main/java/com/sap/ai/sdk/orchestration/client/model/ChatMessage.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
@JsonPropertyOrder({ChatMessage.JSON_PROPERTY_ROLE, ChatMessage.JSON_PROPERTY_CONTENT})
2222
@javax.annotation.Generated(
2323
value = "org.openapitools.codegen.languages.JavaClientCodegen",
24+
date = "2024-11-08T14:16:03.918111+01:00[Europe/Berlin]",
2425
comments = "Generator version: 7.9.0")
2526
public class ChatMessage {
2627
public static final String JSON_PROPERTY_ROLE = "role";

orchestration/src/main/java/com/sap/ai/sdk/orchestration/client/model/CompletionPostRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
})
3030
@javax.annotation.Generated(
3131
value = "org.openapitools.codegen.languages.JavaClientCodegen",
32+
date = "2024-11-08T14:16:03.918111+01:00[Europe/Berlin]",
3233
comments = "Generator version: 7.9.0")
3334
public class CompletionPostRequest {
3435
public static final String JSON_PROPERTY_ORCHESTRATION_CONFIG = "orchestration_config";

orchestration/src/main/java/com/sap/ai/sdk/orchestration/client/model/CompletionPostResponse.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
})
2626
@javax.annotation.Generated(
2727
value = "org.openapitools.codegen.languages.JavaClientCodegen",
28+
date = "2024-11-08T14:16:03.918111+01:00[Europe/Berlin]",
2829
comments = "Generator version: 7.9.0")
2930
public class CompletionPostResponse {
3031
public static final String JSON_PROPERTY_REQUEST_ID = "request_id";

0 commit comments

Comments
 (0)