Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
791ac9e
refactor: refactor cli to use agent loader
seanzhougoogle May 29, 2025
b70e74c
chore: auto format mcp tools
seanzhougoogle May 29, 2025
60ceea7
fix: do not convert "false" value to dict
google-genai-bot May 29, 2025
795605a
fix: separate thinking from text parts in streaming mode
a9a4k May 29, 2025
1452dac
Use media type in chat window. Remove isArtifactImage and isArtifactA…
google-genai-bot May 29, 2025
a0714b8
ADK changes
seanzhougoogle May 29, 2025
b92e068
chore: fix function tool UT
seanzhougoogle May 29, 2025
2b5c89b
feat: expose more config of VertexAiSearchTool from latest Google Gen…
seanzhougoogle May 29, 2025
0250d9e
chore: reformat codes using autoformat.sh
seanzhougoogle May 29, 2025
96b36b7
chore: fix base_llm_flow ut
seanzhougoogle May 29, 2025
999a7fe
Make tool_call one span for telemetry
selcukgun May 29, 2025
a9345a0
chore: add py.typed and include it in flit config
mohamadghaffari May 29, 2025
ac52eab
ADK changes
google-genai-bot May 29, 2025
9bdd813
Fix typos in README for sample bigquery_agent and oauth_calendar_agent
google-genai-bot May 29, 2025
2a65c41
fix: Assign empty inputSchema to MCP tool when converting an ADK tool…
google-genai-bot May 29, 2025
7e637d3
feat: support Langchain StructuredTool for Langchain tool
seanzhougoogle May 29, 2025
1de5c34
Raise HTTPException when running evals in fast_api if google-adk[eval…
google-genai-bot May 29, 2025
d587270
Prevent JSON parsing errors and preserve non-ascii characters in tele…
selcukgun May 29, 2025
a8a2074
fix: handles function tool parsing corner case where type hints are s…
wuliang229 May 29, 2025
a9dcc58
ADK changes
Jacksunwei May 29, 2025
841e10a
fix: introduce PreciseTimestamp to fix mysql datetime precision issue.
Colstuwjx May 29, 2025
05f4834
Copybara import of the project:
lucasnobre212 May 29, 2025
db4bc98
fix: Filter memory by app_name and user_id.
DeanChensj May 29, 2025
41ba2d1
chore: reformat the code using autoformat.sh.
wuliang229 May 29, 2025
2b41824
chore: fix fast api ut
seanzhougoogle May 29, 2025
ae7d3a7
chore: autoformat the test_litellm.py
seanzhougoogle May 29, 2025
0d66a78
Copybara import of the project:
ystory May 29, 2025
854a544
fix(transfer_to_agent): update docstring for clarity and accuracy
AlankritVerma01 May 29, 2025
5c2ad32
Render HTML artifact in chat window.
google-genai-bot May 30, 2025
b226a06
fix: match arg case in errors
bl3ck May 30, 2025
04e07b4
docs: updates CONTRIBUTING.md to refine setup process using uv.
Jacksunwei May 30, 2025
face2e8
Copybara import of the project:
iamulya May 30, 2025
4214c7e
chore: auto-format files.
Jacksunwei May 30, 2025
18fbe3c
docs: Adds a sample agent to illustrate state usage via `callbacks`.
Jacksunwei May 30, 2025
6506302
fix: Continue fetching events if there are multiple pages.
DeanChensj May 30, 2025
daac8ce
fix: adk web not working on some env for windows, fixes https://githu…
wyf7107 May 30, 2025
ccd05e0
BugFix: Unused import for deprecated.
swapxs May 30, 2025
01965bd
chore:Extract common options for `adk web` and `adk api_server`.
DeanChensj May 30, 2025
45ef668
fix: timeout issues for mcpstdio server when mcp tools are incorrect.
google-genai-bot May 30, 2025
3930a4b
chore: Add agent engine telemetry
shawn-yang-google May 30, 2025
7aaf811
fix: typos in documentation
crissins May 30, 2025
8759a25
Copybara import of the project:
karthidec May 30, 2025
ba5b80d
feat: use bigquery scope by default in bigquery credentials.
google-genai-bot May 30, 2025
4075290
chore: Fix reqeust -> request typo
calvingiles May 30, 2025
95e33ba
fix: add support for running python main function in UnsafeLocalCodeE…
google-genai-bot May 30, 2025
63822c3
Remove the gap between event holder and image.
google-genai-bot May 31, 2025
e06e675
chore: Add the name of the agent as a billing label. This will help c…
ankursharmas May 31, 2025
3616bb5
feat:support Langchain tools that has run_manager in _run args and do…
seanzhougoogle May 31, 2025
3ec496d
chore: add requirements.txt for langchain_youtube_search_agent
seanzhougoogle May 31, 2025
5d29716
fix: remove labels from config when using API key from Google AI Stud…
seanzhougoogle May 31, 2025
af2180c
chore: add more comments to MCPTooset and MCPSessionManager
seanzhougoogle May 31, 2025
2623c71
fix: add adk icon for UI
seanzhougoogle May 31, 2025
7fdc6b4
fix: ensure function description is copied when ignoring parameters
efunneko May 31, 2025
62d7bf5
docs: change eval_dataset to eval_dataset_file_path_or_dir
gwbischof May 31, 2025
036f954
refactor: uniform Google LLM variant and parsing logic and make conta…
seanzhougoogle May 31, 2025
0e72efb
fix: Call all tools in parallel calls during partial authentication
calvingiles May 31, 2025
8d36dbd
feat: Add an option to use gcs artifact service in adk web.
DeanChensj Jun 1, 2025
2409c3e
feat: Add agent engine as a deployment option to the ADK CLI
yeesian Jun 2, 2025
5c6001d
fix(sample): Correct text artifact saving in artifact_save_text sample
ystory Jun 2, 2025
b0403b2
Copybara import of the project:
anencore94 Jun 2, 2025
f180331
Copybara import of the project:
hangfei Jun 2, 2025
bd588bc
docs: Fix typo in envs.py
miketako3 Jun 2, 2025
b181cbc
fix: Handle non-indexed function call chunks with incremental fallbac…
selcukgun Jun 2, 2025
f07abcc
chore: fix ut for test_functions_request_euc.py
seanzhougoogle Jun 2, 2025
15a45a6
chore: move fast api test case to cli package to match source codes p…
seanzhougoogle Jun 2, 2025
11b504c
chore: Add functions to convert between storage and event classes
google-genai-bot Jun 2, 2025
f7cb666
fix: Use inspect.cleandoc on function docstrings in generate_function…
google-genai-bot Jun 2, 2025
5a67a94
fix: fix parameter schema generation for gemini
seanzhougoogle Jun 2, 2025
1db601c
Update pending event dialog style. Mock is not ready yet.
google-genai-bot Jun 2, 2025
94c0aca
ADK: Rename the root agent in the example to match the example name.
hangfei Jun 2, 2025
821f751
chore: add agent for testing Notion MCP server
seanzhougoogle Jun 2, 2025
2735942
Add tooltip to the export session button.
google-genai-bot Jun 2, 2025
da4bc0e
feat: New Agent Visualization
Jun 2, 2025
4a8af9e
feat: Add support for vertex gemini model optimizer
calvingiles Jun 3, 2025
a7575e0
feat: Added implementation for `get_eval_case`, `update_eval_case` a…
ankursharmas Jun 2, 2025
b189889
chore: format `.gitignore`.
Jacksunwei Jun 2, 2025
174afb3
Added unit test coverage for local_eval_sets_manager.py
ankursharmas Jun 2, 2025
eb2b9ef
chore: Fix formatting
selcukgun Jun 3, 2025
af95dd2
feat: Add sortByColumn functionality to List Operation
google-genai-bot Jun 3, 2025
44f5078
chore: Make return_str more accurate in_build_function_declaration_log
google-genai-bot Jun 3, 2025
16f7d98
feat: Update for anthropic models
google-genai-bot Jun 3, 2025
57d99aa
Enable release-please workflow
selcukgun Jun 3, 2025
ec8bc73
fix: ParallelAgent should only append to its immediate sub-agent, not…
google-genai-bot Jun 3, 2025
934af25
chore: update `adk web` to include latest changes
wyf7107 Jun 3, 2025
ed2aef9
chore: fix Pyink GitHub Action to check on all changed .py files
wuliang229 Jun 3, 2025
bf12a4a
chore: add GitHub Action to check imports' order
wuliang229 Jun 3, 2025
7b51ae9
fix: enhance agent loader exception handler and expose precise error …
seanzhougoogle Jun 3, 2025
349a414
chore:ADK: add section comment
hangfei Jun 3, 2025
e99f87d
chore: Minor improvement to session service
DeanChensj Jun 4, 2025
433c423
chore: include contributing/ folder in autoformat.sh
wuliang229 Jun 4, 2025
32c5ffa
chore:Restore errors path in copybara
selcukgun Jun 4, 2025
eaee49b
fix: Simplify content for ollama provider
selcukgun Jun 4, 2025
0724a83
ADK changes
hangfei Jun 4, 2025
0309ba8
Merge branch 'main' into feature/approval-mechanism
calvingiles Jun 4, 2025
0127c3f
chore: Minor improvement to session service
google-genai-bot Jun 4, 2025
e21ea16
chore: Update agent.py
hangfei Jun 4, 2025
98a635a
feat: set the max width and height of view image dialog to be 90%
google-genai-bot Jun 4, 2025
b1a74d0
fix: relax openapi spec to gemini schema conversion to tolerate more …
seanzhougoogle Jun 4, 2025
5acf153
tidy
calvingiles Jun 4, 2025
3d41e70
Merge branch 'main' into feature/approval-mechanism
calvingiles Jun 4, 2025
531508c
fix
calvingiles Jun 4, 2025
d052e8f
chore: Update agent.py
hangfei Jun 4, 2025
552e42f
Merge pull request #1154 from google:hangfei-patch-2
copybara-github Jun 4, 2025
984c1d6
test: Added unit test coverage for local_eval_set_results_manager.py
ankursharmas Jun 4, 2025
54ed031
feat: support None as return type, such as def func() -> None:
google-genai-bot Jun 4, 2025
c6e1e82
chore: Minor improvement to session service
DeanChensj Jun 4, 2025
92e7a4a
chore: bump version number to 1.2.0
selcukgun Jun 4, 2025
86e15ca
chore: Make ArtifactService transparent to AgentTools
google-genai-bot Jun 4, 2025
068df04
fix: import deprecated from typing_extensions
google-genai-bot Jun 4, 2025
78bfce4
chore: bump version number to 1.2.1
selcukgun Jun 4, 2025
d3100f5
fix
calvingiles Jun 5, 2025
a192a6a
Merge branch 'main' into feature/approval-mechanism
calvingiles Jun 5, 2025
aca8932
Merge branch 'feat-model-optimizer' into feature/approval-mechanism
calvingiles Jun 5, 2025
cf689fd
chore: Create agent.py
hangfei Jun 5, 2025
0d23258
chore: Update agent.py
hangfei Jun 5, 2025
1d8d1e0
Update agent.py
hangfei Jun 5, 2025
c224626
fix: handle the case when agent loading error doesn't have msg attrib…
seanzhougoogle Jun 5, 2025
19dbe24
Merge branch 'main' into hangfei-patch-3
hangfei Jun 5, 2025
4269cac
chore: change import path to import directly from module instead of p…
seanzhougoogle Jun 5, 2025
b7ebb69
Merge pull request #1171 from google:hangfei-patch-3
copybara-github Jun 5, 2025
7dbd8c6
chore: add file contents check in a GitHub action
wuliang229 Jun 5, 2025
4b1c218
fix: Prevent agent_graph.py throwing when workflow agent is root agent
Jacksunwei Jun 5, 2025
078ac84
chore: replace print with logger.info
seanzhougoogle Jun 5, 2025
fe1de7b
feat: Add url_context_tool
google-genai-bot Jun 5, 2025
54367dc
feat: support to customize timeout for mcpstdio connections
google-genai-bot Jun 5, 2025
d1b0587
feat: use threshold from the eval config dialog to run eval
google-genai-bot Jun 6, 2025
6ed6351
feat: show the used metric in evaluation history
google-genai-bot Jun 6, 2025
19ef066
fix: Notify agent of failed agent transfer in function response
calvingiles Jun 6, 2025
ea2ac9e
Merge branch 'fix-agent-transfer-error-handling' into feature/approva…
calvingiles Jun 6, 2025
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
5 changes: 5 additions & 0 deletions .github/release-please.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
releaseType: python
handleGHRelease: true
bumpMinorPreMajor: false
extraFiles:
- src/google/adk/version.py
1 change: 1 addition & 0 deletions .github/release-trigger.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
enabled: true
113 changes: 113 additions & 0 deletions .github/workflows/check-file-contents.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# 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.

name: "Check file contents"

on:
pull_request:
paths:
- '**.py'

jobs:
check-file-contents:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 2

- name: Check for logger pattern in all changed Python files
run: |
git fetch origin ${{ github.base_ref }}
CHANGED_FILES=$(git diff --diff-filter=ACMR --name-only origin/${{ github.base_ref }}...HEAD | grep -E '\.py$' || true)
if [ -n "$CHANGED_FILES" ]; then
echo "Changed Python files to check:"
echo "$CHANGED_FILES"
echo ""

# Check for 'logger = logging.getLogger(__name__)' in changed .py files.
# The grep command will exit with a non-zero status code if the pattern is not found.
# We invert the exit code with ! so the step succeeds if the pattern is NOT found.
set +e
FILES_WITH_FORBIDDEN_LOGGER=$(grep -lE 'logger = logging\.getLogger\(__name__\)' $CHANGED_FILES)
GREP_EXIT_CODE=$?
set -e

# grep exits with 0 if matches are found, 1 if no matches are found.
# A non-zero exit code other than 1 indicates an error.
if [ $GREP_EXIT_CODE -eq 0 ]; then
echo "❌ Found forbidden use of 'logger = logging.getLogger(__name__)'. Please use 'logger = logging.getLogger('google_adk.' + __name__)' instead."
echo "The following files contain the forbidden pattern:"
echo "$FILES_WITH_FORBIDDEN_LOGGER"
exit 1
elif [ $GREP_EXIT_CODE -eq 1 ]; then
echo "✅ No instances of 'logger = logging.getLogger(__name__)' found in changed Python files."
fi
else
echo "✅ No relevant Python files found."
fi

- name: Check for import pattern in certain changed Python files
run: |
git fetch origin ${{ github.base_ref }}
CHANGED_FILES=$(git diff --diff-filter=ACMR --name-only origin/${{ github.base_ref }}...HEAD | grep -E '\.py$' | grep -v -E '__init__.py$|version.py$|tests/.*|contributing/samples/' || true)
if [ -n "$CHANGED_FILES" ]; then
echo "Changed Python files to check:"
echo "$CHANGED_FILES"
echo ""

# Use grep -L to find files that DO NOT contain the pattern.
# This command will output a list of non-compliant files.
FILES_MISSING_IMPORT=$(grep -L 'from __future__ import annotations' $CHANGED_FILES)

# Check if the list of non-compliant files is empty
if [ -z "$FILES_MISSING_IMPORT" ]; then
echo "✅ All modified Python files include 'from __future__ import annotations'."
exit 0
else
echo "❌ The following files are missing 'from __future__ import annotations':"
echo "$FILES_MISSING_IMPORT"
echo "This import is required to allow forward references in type annotations without quotes."
exit 1
fi
else
echo "✅ No relevant Python files found."
fi

- name: Check for import from cli package in certain changed Python files
run: |
git fetch origin ${{ github.base_ref }}
CHANGED_FILES=$(git diff --diff-filter=ACMR --name-only origin/${{ github.base_ref }}...HEAD | grep -E '\.py$' | grep -v -E 'cli/.*|tests/.*|contributing/samples/' || true)
if [ -n "$CHANGED_FILES" ]; then
echo "Changed Python files to check:"
echo "$CHANGED_FILES"
echo ""

set +e
FILES_WITH_FORBIDDEN_IMPORT=$(grep -lE '^from.*cli.*import.*$' $CHANGED_FILES)
GREP_EXIT_CODE=$?
set -e

if [[ $GREP_EXIT_CODE -eq 0 ]]; then
echo "❌ Do not import from the cli package outside of the cli package. If you need to reuse the code elsewhere, please move the code outside of the cli package."
echo "The following files contain the forbidden pattern:"
echo "$FILES_WITH_FORBIDDEN_IMPORT"
exit 1
else
echo "✅ No instances of importing from the cli package found in relevant changed Python files."
fi
else
echo "✅ No relevant Python files found."
fi
69 changes: 69 additions & 0 deletions .github/workflows/isort.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# 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.

name: Check sorting of imports

on:
pull_request:
paths:
- '**.py'
- 'pyproject.toml'

jobs:
isort-check:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'

- name: Install isort
run: |
pip install isort

- name: Run isort on changed files
id: run_isort
run: |
git fetch origin ${{ github.base_ref }}
CHANGED_FILES=$(git diff --diff-filter=ACMR --name-only origin/${{ github.base_ref }}...HEAD | grep -E '\.py$' || true)
if [ -n "$CHANGED_FILES" ]; then
echo "Changed Python files:"
echo "$CHANGED_FILES"
echo ""
FORMATTED_FILES=$(echo "$CHANGED_FILES" | tr '\n' ' ')

# Run isort --check
set +e
isort --check $CHANGED_FILES
RESULT=$?
set -e
if [ $RESULT -ne 0 ]; then
echo ""
echo "❌ isort check failed!"
echo "👉 To fix import order, run locally:"
echo ""
echo " isort $FORMATTED_FILES"
echo ""
exit $RESULT
fi
else
echo "No Python files changed. Skipping isort check."
fi
56 changes: 26 additions & 30 deletions .github/workflows/pyink.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ name: Check Pyink Formatting
on:
pull_request:
paths:
- 'src/**/*.py'
- 'tests/**/*.py'
- '**.py'
- 'pyproject.toml'

jobs:
Expand All @@ -28,6 +27,8 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2

- name: Set up Python
uses: actions/setup-python@v5
Expand All @@ -38,36 +39,31 @@ jobs:
run: |
pip install pyink

- name: Detect changed Python files
id: detect_changes
- name: Run pyink on changed files
id: run_pyink
run: |
git fetch origin ${{ github.base_ref }}
CHANGED_FILES=$(git diff --diff-filter=ACMR --name-only origin/${{ github.base_ref }}...HEAD | grep -E '\.py$' || true)
echo "CHANGED_FILES=${CHANGED_FILES}" >> $GITHUB_ENV

- name: Run pyink on changed files
if: env.CHANGED_FILES != ''
run: |
echo "Changed Python files:"
echo "$CHANGED_FILES"

# Run pyink --check
set +e
pyink --check --config pyproject.toml $CHANGED_FILES
RESULT=$?
set -e

if [ $RESULT -ne 0 ]; then
echo ""
echo "❌ Pyink formatting check failed!"
echo "👉 To fix formatting, run locally:"
echo ""
echo " pyink --config pyproject.toml $CHANGED_FILES"
if [ -n "$CHANGED_FILES" ]; then
echo "Changed Python files:"
echo "$CHANGED_FILES"
echo ""
exit $RESULT
fi
FORMATTED_FILES=$(echo "$CHANGED_FILES" | tr '\n' ' ')

- name: No changed Python files detected
if: env.CHANGED_FILES == ''
run: |
echo "No Python files changed. Skipping pyink check."
# Run pyink --check
set +e
pyink --check --diff --config pyproject.toml $CHANGED_FILES
RESULT=$?
set -e
if [ $RESULT -ne 0 ]; then
echo ""
echo "❌ Pyink formatting check failed!"
echo "👉 To fix formatting, run locally:"
echo ""
echo " pyink --config pyproject.toml $FORMATTED_FILES"
echo ""
exit $RESULT
fi
else
echo "No Python files changed. Skipping pyink check."
fi
3 changes: 1 addition & 2 deletions .github/workflows/python-unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,4 @@ jobs:
source .venv/bin/activate
pytest tests/unittests \
--ignore=tests/unittests/artifacts/test_artifact_service.py \
--ignore=tests/unittests/tools/google_api_tool/test_googleapi_to_openapi_converter.py

--ignore=tests/unittests/tools/google_api_tool/test_googleapi_to_openapi_converter.py
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,4 @@ site/
Thumbs.db
*.bak
*.tmp
*.temp
*.temp
Loading