From 73de723a2f9f556af23f7543a906a547ececb1cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20D=C3=BCmont?= Date: Tue, 15 Jul 2025 11:20:27 +0200 Subject: [PATCH 1/5] Initial --- .../sap/ai/sdk/core/common/ClientResponseHandler.java | 10 ++++++---- .../sap/ai/sdk/core/common/ClientStreamingHandler.java | 3 ++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java index c1949f14f..1a8c69c2d 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java @@ -78,11 +78,11 @@ private T parseResponse(@Nonnull final ClassicHttpResponse response) throws E { throw exceptionConstructor.apply("Response was empty.", null); } val content = getContent(responseEntity); - log.debug("Parsing response from JSON response: {}", content); + log.debug("Deserializing JSON response to type {}: {}", responseType.getSimpleName(), content); try { return objectMapper.readValue(content, responseType); } catch (final JsonProcessingException e) { - log.error("Failed to parse the following response: {}", content); + log.error("Failed to deserialize the response to type: {}", responseType.getSimpleName(), e); throw exceptionConstructor.apply("Failed to parse response", e); } } @@ -103,10 +103,11 @@ private String getContent(@Nonnull final HttpEntity entity) { */ @SuppressWarnings("PMD.CloseResource") public void buildExceptionAndThrow(@Nonnull final ClassicHttpResponse response) throws E { + val errorCode = response.getCode(); val exception = exceptionConstructor.apply( "Request failed with status %s %s" - .formatted(response.getCode(), response.getReasonPhrase()), + .formatted(errorCode, response.getReasonPhrase()), null); val entity = response.getEntity(); if (entity == null) { @@ -122,7 +123,8 @@ public void buildExceptionAndThrow(@Nonnull final ClassicHttpResponse response) throw exception; } - log.error("The service responded with an HTTP error and the following content: {}", content); + log.error("The service responded with HTTP error code {}", errorCode); + log.debug("The service responded with HTTP error code {} and content: {}", errorCode, content); val contentType = ContentType.parse(entity.getContentType()); if (!ContentType.APPLICATION_JSON.isSameMimeType(contentType)) { throw exception; diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java index c366b8482..f84984c97 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java @@ -77,7 +77,8 @@ public Stream handleStreamingResponse(@Nonnull final ClassicHttpResponse resp try { return objectMapper.readValue(data, responseType); } catch (final IOException e) { // exception message e gets lost - log.error("Failed to parse the following response: {}", line); + log.error("Failed to parse thr streamed response."); + log.debug("Failed to parse the following response: {}", line, e); throw exceptionConstructor.apply("Failed to parse delta message: " + line, e); } }); From 5ca9c024ff5f44dd5dbf28fbbba15b29b3baac6c Mon Sep 17 00:00:00 2001 From: SAP Cloud SDK Bot Date: Tue, 15 Jul 2025 09:22:28 +0000 Subject: [PATCH 2/5] Formatting --- .../java/com/sap/ai/sdk/core/common/ClientResponseHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java index 1a8c69c2d..6c1f59375 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java @@ -106,8 +106,7 @@ public void buildExceptionAndThrow(@Nonnull final ClassicHttpResponse response) val errorCode = response.getCode(); val exception = exceptionConstructor.apply( - "Request failed with status %s %s" - .formatted(errorCode, response.getReasonPhrase()), + "Request failed with status %s %s".formatted(errorCode, response.getReasonPhrase()), null); val entity = response.getEntity(); if (entity == null) { From 0ef010126ed41b3766ca5100944bc680f0951598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20D=C3=BCmont?= Date: Tue, 15 Jul 2025 11:30:11 +0200 Subject: [PATCH 3/5] thresholds --- core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/pom.xml b/core/pom.xml index d68324dd0..819f6f0d0 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -32,7 +32,7 @@ ${project.basedir}/../ 64% 78% - 79% + 78% 60% 77% 90% From 091545c47c726e189d649bf710dc9d4a04cee4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20D=C3=BCmont?= <22489773+newtork@users.noreply.github.com> Date: Tue, 15 Jul 2025 11:35:21 +0200 Subject: [PATCH 4/5] Update core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java --- .../java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java index f84984c97..66e0a657e 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java @@ -77,7 +77,7 @@ public Stream handleStreamingResponse(@Nonnull final ClassicHttpResponse resp try { return objectMapper.readValue(data, responseType); } catch (final IOException e) { // exception message e gets lost - log.error("Failed to parse thr streamed response."); + log.error("Failed to parse the streamed response."); log.debug("Failed to parse the following response: {}", line, e); throw exceptionConstructor.apply("Failed to parse delta message: " + line, e); } From a1bb4cc6a472e9259a2789b83883356eabf8a9d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20D=C3=BCmont?= Date: Wed, 16 Jul 2025 09:57:19 +0200 Subject: [PATCH 5/5] Change payload exposition level from "debug" to "trace" --- .../com/sap/ai/sdk/core/AiCoreServiceKeyAccessor.java | 2 +- .../sap/ai/sdk/core/common/ClientResponseHandler.java | 6 +++--- .../sap/ai/sdk/core/common/ClientStreamingHandler.java | 9 +++++---- .../ai/sdk/orchestration/OrchestrationHttpExecutor.java | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/com/sap/ai/sdk/core/AiCoreServiceKeyAccessor.java b/core/src/main/java/com/sap/ai/sdk/core/AiCoreServiceKeyAccessor.java index ee2fc47ba..dca6f51e5 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/AiCoreServiceKeyAccessor.java +++ b/core/src/main/java/com/sap/ai/sdk/core/AiCoreServiceKeyAccessor.java @@ -50,7 +50,7 @@ public List getServiceBindings() throws ServiceBindingAccessExce log.debug("No service key found in environment variable {}", ENV_VAR_KEY); return List.of(); } - log.info( + log.debug( """ Found a service key in environment variable {}. Using a service key is recommended for local testing only. diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java index 6c1f59375..d24b635d1 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java @@ -78,11 +78,11 @@ private T parseResponse(@Nonnull final ClassicHttpResponse response) throws E { throw exceptionConstructor.apply("Response was empty.", null); } val content = getContent(responseEntity); - log.debug("Deserializing JSON response to type {}: {}", responseType.getSimpleName(), content); + log.trace("Deserializing JSON response to type {}: {}", responseType.getSimpleName(), content); try { return objectMapper.readValue(content, responseType); } catch (final JsonProcessingException e) { - log.error("Failed to deserialize the response to type: {}", responseType.getSimpleName(), e); + log.debug("Failed to deserialize the response to type: {}", responseType.getSimpleName()); throw exceptionConstructor.apply("Failed to parse response", e); } } @@ -123,7 +123,7 @@ public void buildExceptionAndThrow(@Nonnull final ClassicHttpResponse response) } log.error("The service responded with HTTP error code {}", errorCode); - log.debug("The service responded with HTTP error code {} and content: {}", errorCode, content); + log.trace("The service responded with HTTP error code {} and content: {}", errorCode, content); val contentType = ContentType.parse(entity.getContentType()); if (!ContentType.APPLICATION_JSON.isSameMimeType(contentType)) { throw exception; diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java index f84984c97..f3ecf3a95 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java @@ -76,10 +76,11 @@ public Stream handleStreamingResponse(@Nonnull final ClassicHttpResponse resp final String data = line.substring(5); // remove "data: " try { return objectMapper.readValue(data, responseType); - } catch (final IOException e) { // exception message e gets lost - log.error("Failed to parse thr streamed response."); - log.debug("Failed to parse the following response: {}", line, e); - throw exceptionConstructor.apply("Failed to parse delta message: " + line, e); + } catch (final IOException e) { + final String message = e.getMessage(); + log.error("Failed to parse the streamed response: " + message); + log.trace("Failed to parse the following response: {}", line); + throw exceptionConstructor.apply("Failed to parse delta message: " + message, e); } }); } diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationHttpExecutor.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationHttpExecutor.java index b5c51bfc8..613239956 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationHttpExecutor.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationHttpExecutor.java @@ -40,7 +40,7 @@ T execute( @Nonnull final Class responseType) { try { val json = JACKSON.writeValueAsString(payload); - log.debug("Serialized request into JSON payload: {}", json); + log.trace("Serialized request into JSON payload: {}", json); val request = new HttpPost(path); request.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON));