diff --git a/core/src/main/java/com/google/adk/events/EventStream.java b/core/src/main/java/com/google/adk/events/EventStream.java
index ff3333d8f..c0c98543f 100644
--- a/core/src/main/java/com/google/adk/events/EventStream.java
+++ b/core/src/main/java/com/google/adk/events/EventStream.java
@@ -20,7 +20,12 @@
import java.util.NoSuchElementException;
import java.util.function.Supplier;
-/** Iterable stream of {@link Event} objects. */
+/**
+ * Iterable stream of {@link Event} objects.
+ *
+ *
NOTE: This class is not thread-safe. Concurrent iteration from multiple threads should be
+ * avoided or externally synchronized.
+ */
public class EventStream implements Iterable {
private final Supplier eventSupplier;
diff --git a/core/src/main/java/com/google/adk/events/ToolConfirmation.java b/core/src/main/java/com/google/adk/events/ToolConfirmation.java
index 66b107eea..167286094 100644
--- a/core/src/main/java/com/google/adk/events/ToolConfirmation.java
+++ b/core/src/main/java/com/google/adk/events/ToolConfirmation.java
@@ -62,7 +62,7 @@ public abstract static class Builder {
/** For internal usage. Please use `ToolConfirmation.builder()` for instantiation. */
@JsonCreator
- private static Builder create() {
+ static Builder create() {
return new AutoValue_ToolConfirmation.Builder();
}
diff --git a/core/src/main/java/com/google/adk/examples/ExampleUtils.java b/core/src/main/java/com/google/adk/examples/ExampleUtils.java
index b806dbd81..9cce535dc 100644
--- a/core/src/main/java/com/google/adk/examples/ExampleUtils.java
+++ b/core/src/main/java/com/google/adk/examples/ExampleUtils.java
@@ -20,6 +20,7 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.adk.JsonBaseModel;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.genai.types.Content;
@@ -27,10 +28,14 @@
import com.google.genai.types.FunctionResponse;
import com.google.genai.types.Part;
import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/** Utility class for examples. */
public final class ExampleUtils {
+ private static final Logger logger = LoggerFactory.getLogger(ExampleUtils.class);
+
// Constant parts of the example string
private static final String EXAMPLES_INTRO =
"\nBegin few-shot\nThe following are examples of user queries and"
@@ -50,7 +55,7 @@ public final class ExampleUtils {
private static final String FUNCTION_RESPONSE_PREFIX = "```tool_outputs\n";
private static final String FUNCTION_RESPONSE_SUFFIX = "\n```\n";
- private static final ObjectMapper objectMapper = new ObjectMapper();
+ private static final ObjectMapper objectMapper = JsonBaseModel.getMapper();
/**
* Converts a list of examples into a formatted few-shot prompt string.
@@ -143,6 +148,7 @@ private static void appendFunctionResponse(FunctionResponse response, StringBuil
.append(objectMapper.writeValueAsString(responseMap))
.append(FUNCTION_RESPONSE_SUFFIX);
} catch (JsonProcessingException e) {
+ logger.error("Failed to serialize function response", e);
builder.append(FUNCTION_RESPONSE_PREFIX).append(FUNCTION_RESPONSE_SUFFIX);
}
}
diff --git a/core/src/main/java/com/google/adk/tools/BaseToolset.java b/core/src/main/java/com/google/adk/tools/BaseToolset.java
index c7620f913..4d3482c57 100644
--- a/core/src/main/java/com/google/adk/tools/BaseToolset.java
+++ b/core/src/main/java/com/google/adk/tools/BaseToolset.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package com.google.adk.tools;
import com.google.adk.agents.ReadonlyContext;
diff --git a/core/src/main/java/com/google/adk/tools/BuiltInCodeExecutionTool.java b/core/src/main/java/com/google/adk/tools/BuiltInCodeExecutionTool.java
index 0a7b40112..060b3ffb8 100644
--- a/core/src/main/java/com/google/adk/tools/BuiltInCodeExecutionTool.java
+++ b/core/src/main/java/com/google/adk/tools/BuiltInCodeExecutionTool.java
@@ -31,6 +31,7 @@
* execution.
*/
public final class BuiltInCodeExecutionTool extends BaseTool {
+ public static final BuiltInCodeExecutionTool INSTANCE = new BuiltInCodeExecutionTool();
public BuiltInCodeExecutionTool() {
super("code_execution", "code_execution");
diff --git a/core/src/main/java/com/google/adk/tools/GoogleMapsTool.java b/core/src/main/java/com/google/adk/tools/GoogleMapsTool.java
index 0a9ea2c6b..8689849c2 100644
--- a/core/src/main/java/com/google/adk/tools/GoogleMapsTool.java
+++ b/core/src/main/java/com/google/adk/tools/GoogleMapsTool.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package com.google.adk.tools;
import com.google.adk.models.LlmRequest;
diff --git a/core/src/main/java/com/google/adk/tools/GoogleSearchTool.java b/core/src/main/java/com/google/adk/tools/GoogleSearchTool.java
index 50743796e..ffd9601a8 100644
--- a/core/src/main/java/com/google/adk/tools/GoogleSearchTool.java
+++ b/core/src/main/java/com/google/adk/tools/GoogleSearchTool.java
@@ -24,6 +24,8 @@
import com.google.genai.types.Tool;
import io.reactivex.rxjava3.core.Completable;
import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A built-in tool that is automatically invoked by Gemini 2 models to retrieve search results from
@@ -41,6 +43,7 @@
* }
*/
public final class GoogleSearchTool extends BaseTool {
+ private static final Logger logger = LoggerFactory.getLogger(GoogleSearchTool.class);
public static final GoogleSearchTool INSTANCE = new GoogleSearchTool();
public GoogleSearchTool() {
@@ -65,7 +68,7 @@ public Completable processLlmRequest(
String model = llmRequestBuilder.build().model().get();
if (model != null && model.startsWith("gemini-1")) {
if (!updatedToolsBuilder.build().isEmpty()) {
- System.out.println(configBuilder.build().tools().get());
+ logger.error("Tools already present: {}", configBuilder.build().tools().get());
return Completable.error(
new IllegalArgumentException(
"Google search tool cannot be used with other tools in Gemini 1.x."));
diff --git a/core/src/main/java/com/google/adk/tools/LoadMemoryTool.java b/core/src/main/java/com/google/adk/tools/LoadMemoryTool.java
index d597bea38..beaf0d4f9 100644
--- a/core/src/main/java/com/google/adk/tools/LoadMemoryTool.java
+++ b/core/src/main/java/com/google/adk/tools/LoadMemoryTool.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package com.google.adk.tools;
import com.google.adk.models.LlmRequest;
diff --git a/core/src/main/java/com/google/adk/tools/NamedToolPredicate.java b/core/src/main/java/com/google/adk/tools/NamedToolPredicate.java
index 94474fd30..a65b2f1ce 100644
--- a/core/src/main/java/com/google/adk/tools/NamedToolPredicate.java
+++ b/core/src/main/java/com/google/adk/tools/NamedToolPredicate.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package com.google.adk.tools;
import com.google.adk.agents.ReadonlyContext;
diff --git a/core/src/main/java/com/google/adk/tools/ToolPredicate.java b/core/src/main/java/com/google/adk/tools/ToolPredicate.java
index 765f93d05..86d739e70 100644
--- a/core/src/main/java/com/google/adk/tools/ToolPredicate.java
+++ b/core/src/main/java/com/google/adk/tools/ToolPredicate.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package com.google.adk.tools;
import com.google.adk.agents.ReadonlyContext;
diff --git a/core/src/main/java/com/google/adk/tools/applicationintegrationtoolset/IntegrationConnectorTool.java b/core/src/main/java/com/google/adk/tools/applicationintegrationtoolset/IntegrationConnectorTool.java
index d69a4d3e3..bc1357106 100644
--- a/core/src/main/java/com/google/adk/tools/applicationintegrationtoolset/IntegrationConnectorTool.java
+++ b/core/src/main/java/com/google/adk/tools/applicationintegrationtoolset/IntegrationConnectorTool.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package com.google.adk.tools.applicationintegrationtoolset;
import static com.google.common.base.Strings.isNullOrEmpty;
@@ -26,10 +42,14 @@
import java.util.Map;
import java.util.Optional;
import org.jspecify.annotations.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/** Application Integration Tool */
public class IntegrationConnectorTool extends BaseTool {
+ private static final Logger logger = LoggerFactory.getLogger(IntegrationConnectorTool.class);
+
private final String openApiSpec;
private final String pathUrl;
private final String connectionName;
@@ -129,7 +149,7 @@ public Optional declaration() {
.build();
return Optional.of(declaration);
} catch (Exception e) {
- System.err.println("Failed to get OpenAPI spec: " + e.getMessage());
+ logger.error("Failed to get OpenAPI spec", e);
return Optional.empty();
}
}
@@ -156,7 +176,7 @@ public Single