diff --git a/core/src/main/java/com/google/adk/flows/llmflows/CodeExecution.java b/core/src/main/java/com/google/adk/flows/llmflows/CodeExecution.java index 1f99cf4a2..be0504dd4 100644 --- a/core/src/main/java/com/google/adk/flows/llmflows/CodeExecution.java +++ b/core/src/main/java/com/google/adk/flows/llmflows/CodeExecution.java @@ -303,7 +303,7 @@ private static Flowable runPostProcessor( } String codeStr = codeStrOptional.get(); responseContent = responseContentBuilder.build(); - llmResponseBuilder.content(Optional.empty()); + llmResponseBuilder.content((Content) null); Event codeEvent = Event.builder() diff --git a/core/src/main/java/com/google/adk/models/GeminiLlmConnection.java b/core/src/main/java/com/google/adk/models/GeminiLlmConnection.java index 2e1229d0b..7585d3a7a 100644 --- a/core/src/main/java/com/google/adk/models/GeminiLlmConnection.java +++ b/core/src/main/java/com/google/adk/models/GeminiLlmConnection.java @@ -191,7 +191,7 @@ private static LlmResponse createServerContentResponse(LiveServerContent serverC return builder .partial(serverContent.turnComplete().map(completed -> !completed).orElse(false)) .turnComplete(serverContent.turnComplete().orElse(false)) - .interrupted(serverContent.interrupted()) + .interrupted(serverContent.interrupted().orElse(null)) .build(); } diff --git a/core/src/main/java/com/google/adk/models/LlmResponse.java b/core/src/main/java/com/google/adk/models/LlmResponse.java index 78791acfa..1ca381e23 100644 --- a/core/src/main/java/com/google/adk/models/LlmResponse.java +++ b/core/src/main/java/com/google/adk/models/LlmResponse.java @@ -128,74 +128,51 @@ static LlmResponse.Builder jacksonBuilder() { } @JsonProperty("content") - public abstract Builder content(Content content); - - public abstract Builder content(Optional content); + public abstract Builder content(@Nullable Content content); @JsonProperty("interrupted") public abstract Builder interrupted(@Nullable Boolean interrupted); - public abstract Builder interrupted(Optional interrupted); - @JsonProperty("groundingMetadata") public abstract Builder groundingMetadata(@Nullable GroundingMetadata groundingMetadata); - public abstract Builder groundingMetadata(Optional groundingMetadata); - @JsonProperty("customMetadata") public abstract Builder customMetadata(@Nullable List customMetadata); @JsonProperty("partial") public abstract Builder partial(@Nullable Boolean partial); - public abstract Builder partial(Optional partial); - @JsonProperty("turnComplete") public abstract Builder turnComplete(@Nullable Boolean turnComplete); - public abstract Builder turnComplete(Optional turnComplete); - @JsonProperty("errorCode") public abstract Builder errorCode(@Nullable FinishReason errorCode); - public abstract Builder errorCode(Optional errorCode); - @JsonProperty("finishReason") public abstract Builder finishReason(@Nullable FinishReason finishReason); - public abstract Builder finishReason(Optional finishReason); - @JsonProperty("avgLogprobs") public abstract Builder avgLogprobs(@Nullable Double avgLogprobs); - public abstract Builder avgLogprobs(Optional avgLogprobs); - @JsonProperty("errorMessage") public abstract Builder errorMessage(@Nullable String errorMessage); - public abstract Builder errorMessage(Optional errorMessage); - @JsonProperty("usageMetadata") public abstract Builder usageMetadata( @Nullable GenerateContentResponseUsageMetadata usageMetadata); - public abstract Builder usageMetadata( - Optional usageMetadata); - @JsonProperty("modelVersion") public abstract Builder modelVersion(@Nullable String modelVersion); - public abstract Builder modelVersion(Optional modelVersion); - @CanIgnoreReturnValue public final Builder response(GenerateContentResponse response) { Optional> candidatesOpt = response.candidates(); if (candidatesOpt.isPresent() && !candidatesOpt.get().isEmpty()) { Candidate candidate = candidatesOpt.get().get(0); - this.finishReason(candidate.finishReason()); + this.finishReason(candidate.finishReason().orElse(null)); if (candidate.content().isPresent()) { this.content(candidate.content().get()); - this.groundingMetadata(candidate.groundingMetadata()); + this.groundingMetadata(candidate.groundingMetadata().orElse(null)); } else { candidate.finishReason().ifPresent(this::errorCode); candidate.finishMessage().ifPresent(this::errorMessage); @@ -214,8 +191,8 @@ public final Builder response(GenerateContentResponse response) { this.errorMessage("Unknown error."); } } - this.usageMetadata(response.usageMetadata()); - this.modelVersion(response.modelVersion()); + this.usageMetadata(response.usageMetadata().orElse(null)); + this.modelVersion(response.modelVersion().orElse(null)); return this; } diff --git a/core/src/test/java/com/google/adk/models/LlmResponseTest.java b/core/src/test/java/com/google/adk/models/LlmResponseTest.java index 65e00413f..646b89602 100644 --- a/core/src/test/java/com/google/adk/models/LlmResponseTest.java +++ b/core/src/test/java/com/google/adk/models/LlmResponseTest.java @@ -28,7 +28,6 @@ import com.google.genai.types.FunctionCall; import com.google.genai.types.GenerateContentResponseUsageMetadata; import com.google.genai.types.Part; -import java.util.Optional; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -74,8 +73,8 @@ public void testSerializationAndDeserialization_allFieldsPresent() .partial(true) .turnComplete(false) .errorCode(new FinishReason("ERR_123")) - .errorMessage(Optional.of("An error occurred.")) - .interrupted(Optional.of(true)) + .errorMessage("An error occurred.") + .interrupted(true) .usageMetadata(usageMetadata) .build(); @@ -113,16 +112,7 @@ public void testSerializationAndDeserialization_optionalFieldsEmpty() throws JsonProcessingException { Content sampleContent = createSampleFunctionCallContent("tool_abc"); LlmResponse originalResponse = - LlmResponse.builder() - .content(sampleContent) - .groundingMetadata(Optional.empty()) - .partial(Optional.empty()) - .turnComplete(false) - .errorCode(Optional.empty()) - .errorMessage(Optional.empty()) - .interrupted(Optional.empty()) - .usageMetadata(Optional.empty()) - .build(); + LlmResponse.builder().content(sampleContent).turnComplete(false).build(); String json = originalResponse.toJson(); assertThat(json).isNotNull();