Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ private static Flowable<Event> runPostProcessor(
}
String codeStr = codeStrOptional.get();
responseContent = responseContentBuilder.build();
llmResponseBuilder.content(Optional.empty());
llmResponseBuilder.content((Content) null);

Event codeEvent =
Event.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down
33 changes: 5 additions & 28 deletions core/src/main/java/com/google/adk/models/LlmResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -128,74 +128,51 @@ static LlmResponse.Builder jacksonBuilder() {
}

@JsonProperty("content")
public abstract Builder content(Content content);

public abstract Builder content(Optional<Content> content);
public abstract Builder content(@Nullable Content content);

@JsonProperty("interrupted")
public abstract Builder interrupted(@Nullable Boolean interrupted);

public abstract Builder interrupted(Optional<Boolean> interrupted);

@JsonProperty("groundingMetadata")
public abstract Builder groundingMetadata(@Nullable GroundingMetadata groundingMetadata);

public abstract Builder groundingMetadata(Optional<GroundingMetadata> groundingMetadata);

@JsonProperty("customMetadata")
public abstract Builder customMetadata(@Nullable List<CustomMetadata> customMetadata);

@JsonProperty("partial")
public abstract Builder partial(@Nullable Boolean partial);

public abstract Builder partial(Optional<Boolean> partial);

@JsonProperty("turnComplete")
public abstract Builder turnComplete(@Nullable Boolean turnComplete);

public abstract Builder turnComplete(Optional<Boolean> turnComplete);

@JsonProperty("errorCode")
public abstract Builder errorCode(@Nullable FinishReason errorCode);

public abstract Builder errorCode(Optional<FinishReason> errorCode);

@JsonProperty("finishReason")
public abstract Builder finishReason(@Nullable FinishReason finishReason);

public abstract Builder finishReason(Optional<FinishReason> finishReason);

@JsonProperty("avgLogprobs")
public abstract Builder avgLogprobs(@Nullable Double avgLogprobs);

public abstract Builder avgLogprobs(Optional<Double> avgLogprobs);

@JsonProperty("errorMessage")
public abstract Builder errorMessage(@Nullable String errorMessage);

public abstract Builder errorMessage(Optional<String> errorMessage);

@JsonProperty("usageMetadata")
public abstract Builder usageMetadata(
@Nullable GenerateContentResponseUsageMetadata usageMetadata);

public abstract Builder usageMetadata(
Optional<GenerateContentResponseUsageMetadata> usageMetadata);

@JsonProperty("modelVersion")
public abstract Builder modelVersion(@Nullable String modelVersion);

public abstract Builder modelVersion(Optional<String> modelVersion);

@CanIgnoreReturnValue
public final Builder response(GenerateContentResponse response) {
Optional<List<Candidate>> 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);
Expand All @@ -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;
}

Expand Down
16 changes: 3 additions & 13 deletions core/src/test/java/com/google/adk/models/LlmResponseTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -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();
Expand Down