diff --git a/core/src/main/java/com/google/adk/codeexecutors/BaseCodeExecutor.java b/core/src/main/java/com/google/adk/codeexecutors/BaseCodeExecutor.java
index b13d69a9..6555e050 100644
--- a/core/src/main/java/com/google/adk/codeexecutors/BaseCodeExecutor.java
+++ b/core/src/main/java/com/google/adk/codeexecutors/BaseCodeExecutor.java
@@ -61,19 +61,13 @@ public int errorRetryAttempts() {
}
/**
- * The list of the enclosing delimiters to identify the code blocks.
+ * The list of enclosing delimiters to identify code blocks in model responses.
*
- *
Each inner list contains a pair of start and end delimiters. This supports multiple pairs of
- * delimiters.
+ *
Each inner list should contain a pair of strings: the start delimiter and the end delimiter.
+ * This structure supports multiple pairs of delimiters. For example, `[["```tool_code\n",
+ * "\n```"], ["```python\n", "\n```"]]` defines two sets of delimiters.
*
- *
For example, the delimiter ('```python\n', '\n```') can be used to identify code blocks with
- * the following format:
- *
- *
```python
- *
- *
print("hello")
- *
- *
```
+ *
Defaults to `[["```tool_code\n", "\n```"], ["```python\n", "\n```"]]`.
*/
public ImmutableList> codeBlockDelimiters() {
return CODE_BLOCK_DELIMITERS;
diff --git a/core/src/main/java/com/google/adk/codeexecutors/CodeExecutionUtils.java b/core/src/main/java/com/google/adk/codeexecutors/CodeExecutionUtils.java
index b9afdcaf..4d62f496 100644
--- a/core/src/main/java/com/google/adk/codeexecutors/CodeExecutionUtils.java
+++ b/core/src/main/java/com/google/adk/codeexecutors/CodeExecutionUtils.java
@@ -21,7 +21,9 @@
import static com.google.common.collect.ImmutableList.toImmutableList;
import static java.util.stream.Collectors.joining;
+import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.google.adk.JsonBaseModel;
import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
@@ -211,7 +213,13 @@ public static Builder builder() {
/** Builder for {@link CodeExecutionResult}. */
@AutoValue.Builder
+ @JsonPOJOBuilder(withPrefix = "")
public abstract static class Builder {
+ @JsonCreator
+ static Builder create() {
+ return CodeExecutionResult.builder();
+ }
+
public abstract Builder stdout(String stdout);
public abstract Builder stderr(String stderr);
@@ -243,7 +251,13 @@ public static Builder builder() {
/** Builder for {@link CodeExecutionInput}. */
@AutoValue.Builder
+ @JsonPOJOBuilder(withPrefix = "")
public abstract static class Builder {
+ @JsonCreator
+ static Builder create() {
+ return CodeExecutionInput.builder();
+ }
+
public abstract Builder code(String code);
public abstract Builder inputFiles(List inputFiles);
@@ -273,7 +287,13 @@ public static Builder builder() {
/** Builder for {@link File}. */
@AutoValue.Builder
+ @JsonPOJOBuilder(withPrefix = "")
public abstract static class Builder {
+ @JsonCreator
+ static Builder create() {
+ return File.builder();
+ }
+
public abstract Builder name(String name);
public abstract Builder content(String content);
diff --git a/core/src/main/java/com/google/adk/codeexecutors/CodeExecutorContext.java b/core/src/main/java/com/google/adk/codeexecutors/CodeExecutorContext.java
index a3410222..e0de0f58 100644
--- a/core/src/main/java/com/google/adk/codeexecutors/CodeExecutorContext.java
+++ b/core/src/main/java/com/google/adk/codeexecutors/CodeExecutorContext.java
@@ -22,6 +22,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.adk.JsonBaseModel;
import com.google.adk.codeexecutors.CodeExecutionUtils.File;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.time.InstantSource;
import java.util.ArrayList;
@@ -88,9 +89,10 @@ public void setExecutionId(String sessionId) {
*
* @return A list of processed file names in the code executor context.
*/
- public List getProcessedFileNames() {
- return (List)
- this.context.computeIfAbsent(PROCESSED_FILE_NAMES_KEY, unused -> new ArrayList<>());
+ public ImmutableList getProcessedFileNames() {
+ return ImmutableList.copyOf(
+ (List)
+ this.context.computeIfAbsent(PROCESSED_FILE_NAMES_KEY, unused -> new ArrayList<>()));
}
/**
@@ -110,7 +112,7 @@ public void addProcessedFileNames(List fileNames) {
*
* @return A list of input files in the code executor context.
*/
- public List getInputFiles() {
+ public ImmutableList getInputFiles() {
List