Compare commits

..

100 Commits

Author SHA1 Message Date
Xiang (Sean) Zhou b1a74d099f fix: relax openapi spec to gemini schema conversion to tolerate more cases
PiperOrigin-RevId: 766985694
2025-06-03 22:59:34 -07:00
Google Team Member 98a635afee feat: set the max width and height of view image dialog to be 90%
PiperOrigin-RevId: 766973033
2025-06-03 22:17:26 -07:00
Hangfei Lin e21ea161f5 chore: Update agent.py
Merge https://github.com/google/adk-python/pull/1136

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/1136 from google:hangfei-patch-1 63ff81eb2f152cf74a8a610562999101a6362ef8
PiperOrigin-RevId: 766913586
2025-06-03 18:59:23 -07:00
Google Team Member 0127c3f9d8 chore: Minor improvement to session service
- Add missing override.
- Add warning to failed actions.
- Remove unused import.
- Remove unused fields.
- Add type checking.

PiperOrigin-RevId: 766913196
2025-06-03 18:57:53 -07:00
Hangfei Lin 0724a83aa9 ADK changes
PiperOrigin-RevId: 766902914
2025-06-03 18:20:10 -07:00
Selcuk Gun eaee49bc89 fix: Simplify content for ollama provider
Even though litellm type definitions and openai API specifies content as list of dictionaries (with type and relevant attributes potentially to allow multimodal inputs/outputs in addition to text), ollama has been demonstrating marshal errors. As a workaround this change simplifies the content as string when there is no more than one content part.

Fixes #642, #928, #376

PiperOrigin-RevId: 766890141
2025-06-03 17:37:43 -07:00
Selcuk Gun 32c5ffa8ca chore:Restore errors path in copybara
PiperOrigin-RevId: 766888018
2025-06-03 17:30:10 -07:00
Liang Wu 433c423d35 chore: include contributing/ folder in autoformat.sh
Also formatted the files in that folder in this same commit.

PiperOrigin-RevId: 766885306
2025-06-03 17:20:52 -07:00
Shangjie Chen e99f87de73 chore: Minor improvement to session service
- Add missing override.
- Add warning to failed actions.
- Remove unused import.
- Remove unused fields.
- Add type checking.

PiperOrigin-RevId: 766882634
2025-06-03 17:13:33 -07:00
Hangfei Lin 349a414120 chore:ADK: add section comment
PiperOrigin-RevId: 766877814
2025-06-03 16:57:49 -07:00
Xiang (Sean) Zhou 7b51ae9724 fix: enhance agent loader exception handler and expose precise error information
PiperOrigin-RevId: 766876662
2025-06-03 16:56:29 -07:00
Liang Wu bf12a4ab48 chore: add GitHub Action to check imports' order
PiperOrigin-RevId: 766804783
2025-06-03 16:56:20 -07:00
Liang Wu ed2aef9120 chore: fix Pyink GitHub Action to check on all changed .py files
Three fixes:
1. used "fetch-depth: 2" to ensure that files in all commits in the PR are checked
2. triggered by all changed ".py" files in the repo
3. merged the "check modified files" and "run Pyink" steps because $GITHUB_ENV cannot handle multi-line env vars without special treatment

PiperOrigin-RevId: 766793736
2025-06-03 16:56:11 -07:00
Yifan Wang 934af25343 chore: update adk web to include latest changes
PiperOrigin-RevId: 766772232
2025-06-03 16:56:03 -07:00
Google Team Member ec8bc7387c fix: ParallelAgent should only append to its immediate sub-agent, not transitive descendants
Restores automatic conversation history sharing for sequential/loop sub-agents.

PiperOrigin-RevId: 766742380
2025-06-03 16:55:51 -07:00
Selcuk Gun 57d99aa789 Enable release-please workflow
PiperOrigin-RevId: 766717222
2025-06-03 16:55:42 -07:00
Google Team Member 16f7d98acf feat: Update for anthropic models
Enable parallel tools for anthropic models, and add agent examples, and also added functional test for anthropic models.

PiperOrigin-RevId: 766703018
2025-06-03 16:55:34 -07:00
Google Team Member 44f507895e chore: Make return_str more accurate in_build_function_declaration_log
PiperOrigin-RevId: 766526064
2025-06-03 16:55:25 -07:00
Google Team Member af95dd2932 feat: Add sortByColumn functionality to List Operation
This change introduces the ability to sort results by a specific column in the List Operation.

PiperOrigin-RevId: 766468964
2025-06-03 16:55:17 -07:00
Selcuk Gun eb2b9ef88f chore: Fix formatting
PiperOrigin-RevId: 766407362
2025-06-03 16:55:08 -07:00
Ankur Sharma 174afb3975 Added unit test coverage for local_eval_sets_manager.py
PiperOrigin-RevId: 766392263
2025-06-03 16:54:58 -07:00
Wei Sun (Jack) b1898890ca chore: format .gitignore.
PiperOrigin-RevId: 766390804
2025-06-03 16:54:49 -07:00
Ankur Sharma a7575e078a feat: Added implementation for get_eval_case, update_eval_case and delete_eval_case for the local eval sets manager.
PiperOrigin-RevId: 766383391
2025-06-03 16:54:37 -07:00
Bhadraksh Bhargava da4bc0efc0 feat: New Agent Visualization
Merge https://github.com/google/adk-python/pull/482

Added new agent visualzation that accounts for the internal architecture of the Workflow Agents and shows them inside of a cluster with a label as the name of the Workflow Agent. The sub agents are conencted as per the Workflow Agents' working and architecture

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/482 from BhadrakshB:new_agent_visualization 994a9e28039b62d9d1d99fc73374a3fa97807aca
PiperOrigin-RevId: 766345311
2025-06-02 14:33:02 -07:00
Google Team Member 273594215e Add tooltip to the export session button.
PiperOrigin-RevId: 766334704
2025-06-02 14:05:25 -07:00
Xiang (Sean) Zhou 821f751b5a chore: add agent for testing Notion MCP server
PiperOrigin-RevId: 766325293
2025-06-02 13:41:56 -07:00
Hangfei Lin 94c0aca685 ADK: Rename the root agent in the example to match the example name.
This makes logs a bit less confusing.

PiperOrigin-RevId: 766312673
2025-06-02 13:10:42 -07:00
Google Team Member 1db601c4bd Update pending event dialog style. Mock is not ready yet.
PiperOrigin-RevId: 766301924
2025-06-02 12:40:25 -07:00
Xiang (Sean) Zhou 5a67a946d2 fix: fix parameter schema generation for gemini
this fixes https://github.com/google/adk-python/issues/1055
and https://github.com/google/adk-python/issues/881

PiperOrigin-RevId: 766288394
2025-06-02 12:03:02 -07:00
Google Team Member f7cb66620b fix: Use inspect.cleandoc on function docstrings in generate_function_declaration.
This creates proper indent of the doc.

PiperOrigin-RevId: 766285907
2025-06-02 11:57:25 -07:00
Google Team Member 11b504c808 chore: Add functions to convert between storage and event classes
PiperOrigin-RevId: 766280876
2025-06-02 11:44:46 -07:00
Xiang (Sean) Zhou 15a45a68fd chore: move fast api test case to cli package to match source codes package structure
PiperOrigin-RevId: 766268528
2025-06-02 11:16:14 -07:00
Xiang (Sean) Zhou f07abcc09c chore: fix ut for test_functions_request_euc.py
PiperOrigin-RevId: 766268126
2025-06-02 11:15:13 -07:00
Selcuk Gun b181cbc8bc fix: Handle non-indexed function call chunks with incremental fallback index
This is in response to the litellm v1.71.2 + ollama v0.9.0 sending function call chunks with 0 indices across multiple calls and lacking call ids.

Solutions introduced:
1. increment fallback index when accumulated arg becomes json parsable.
2. tolerate finish reason == stop when tool calls are present
3. fallback to index when tool call id is None

Fixes https://github.com/google/adk-python/issues/294

PiperOrigin-RevId: 766258344
2025-06-02 10:51:56 -07:00
MikeTako bd588bce50 docs: Fix typo in envs.py
Copybara Merge: https://github.com/google/adk-python/pull/1095

--
3f3bbf1967ee58aa0d321d8b670b1a9736f62b87 by MikeTako <kaito@hiru-t.com>:

docs: Fix typo in envs.py
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/1095 from miketako3:patch-1 3f3bbf1967ee58aa0d321d8b670b1a9736f62b87
PiperOrigin-RevId: 766257832
2025-06-02 10:50:38 -07:00
Hangfei Lin f1803312c6 Copybara import of the project:
--
618add7d297cbe26f26f45aa01b39c3d086a13e8 by Hangfei Lin <hangfei@google.com>:

doc: Create readme.md
--
5ba85d653cac11b2858ee5d53d175c1c16d933ec by Hangfei Lin <hangfei@google.com>:

doc: Update CONTRIBUTING.md
--
02606a34babba6a660886a073332979fb2b12fc3 by Wei Sun (Jack) <weisun@google.com>:

Rename readme.md to README.md
--
08a38bd5727bf554f6fb043c73623d367e9b138e by Hangfei Lin <hangfei@google.com>:

Update README.md
--
92e7ee6d498dfce35f1c6df44c1ec0f86ae5d513 by Wei Sun (Jack) <weisun@google.com>:

Update README.md
--
69c3a44e6946b3541746ded43dae8a70d47d538f by Wei Sun (Jack) <weisun@google.com>:

Update README.md
--
9de40783990ae9935463b37225c186e91c93025d by Wei Sun (Jack) <weisun@google.com>:

Update README.md
--
0f8a011ddc5b22ba8361ce7b34413a34cfcf15ba by Wei Sun (Jack) <weisun@google.com>:

Update README.md

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/1058 from google:hangfei-patch-2 81eacedef69468fa554312a187880ccf4c30c559
PiperOrigin-RevId: 766234622
2025-06-02 09:57:35 -07:00
Jaeyeon Kim(김재연) b0403b2d98 Copybara import of the project:
--
8772b3de0b2fd04f246cc90c4c8032f9dc8cfed9 by Jaeyeon Kim <anencore94@gmail.com>:

fix: update unit test code for test_connection

 - Fix for Unit Test Failures

--
8e0b45c2a64994bfda6401847e485fdd9edc8306 by Jaeyeon Kim <anencore94@gmail.com>:

fix useless changes

--
54efa004fa0fc9bcf78b49061221994650e162bc by Jaeyeon Kim <anencore94@gmail.com>:

fix conflict resolve issue

--
003ed4418c73b74bfba5ff055a364b62ddc18fa7 by Wei Sun (Jack) <weisun@google.com>:

Autoformat test_connections_client.py

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/578 from anencore94:bugfix/failed_unittests ba0e1d33ad905b0b046023b685c70f4ef05e4efa
PiperOrigin-RevId: 766221165
2025-06-02 09:20:41 -07:00
Yongsul Kim 5c6001d90f fix(sample): Correct text artifact saving in artifact_save_text sample
Copybara import of the project:
--
95292471f6dba29b55a17239670cdc6cc14619b5 by Yongsul Kim <ystory84@gmail.com>:

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/936 from ystory:fix/artifact-sample-save 7b0babc53266afadb8421ccafa0f3de092eeeae5
PiperOrigin-RevId: 766220649
2025-06-02 09:19:19 -07:00
Yeesian Ng 2409c3ef19 feat: Add agent engine as a deployment option to the ADK CLI
PiperOrigin-RevId: 766199746
2025-06-02 08:18:39 -07:00
Shangjie Chen 8d36dbda52 feat: Add an option to use gcs artifact service in adk web.
Resolves https://github.com/google/adk-python/issues/309

PiperOrigin-RevId: 765772763
2025-06-01 00:28:49 -07:00
Calvin Giles 0e72efb439 fix: Call all tools in parallel calls during partial authentication
Copybara import of the project:

--
ffd6184d7e402b0787b0fa37fc09cd519adcc7f3 by Calvin Giles <calvin.giles@trademe.co.nz>:

fix: Call all tools in parallel calls during partial authentication

--
c71782a582ba825dbe2246cdb5be3f273ca90dca by seanzhou1023 <seanzhou1023@gmail.com>:

Update auth_preprocessor.py
--
843af6b1bc0bc6291cb9cb23acf11840098ba6dd by seanzhou1023 <seanzhou1023@gmail.com>:

Update test_functions_request_euc.py
--
955e3fa852420ecbf196583caa3cf86b7b80ab56 by seanzhou1023 <seanzhou1023@gmail.com>:

Update test_functions_request_euc.py

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/853 from calvingiles:fix-parallel-auth-tool-calls f44671e37b9fe44a25c9b1c0c25a26fc634b011c
PiperOrigin-RevId: 765639904
2025-05-31 13:14:06 -07:00
Xiang (Sean) Zhou 036f954a2a refactor: uniform Google LLM variant and parsing logic and make contant value consistent with Google GenAI SDK : https://github.com/googleapis/python-genai/blob/903e0729ce5198f48193ac7301727f0c3d72f2b8/google/genai/_automatic_function_calling_util.py#L96
PiperOrigin-RevId: 765639681
2025-05-31 13:12:25 -07:00
Garrett Bischof 62d7bf58bb docs: change eval_dataset to eval_dataset_file_path_or_dir
Copybara import of the project:

--
6596c477c7138df79d77e67181fd5979fd1a72e3 by Garrett Bischof <bischofgarrett@gmail.com>:

docs: change eval_dataset to eval_dataset_file_path_or_dir
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/397 from gwbischof:eval_dataset e8a0d0911c21ac76dab83e8520aaebc38d24adf5
PiperOrigin-RevId: 765638775
2025-05-31 13:06:57 -07:00
Edward Funnekotter 7fdc6b4417 fix: ensure function description is copied when ignoring parameters
Copybara import of the project:

--
8540f266ebc0210749834d73ee61f01783ae3526 by Edward Funnekotter (aider) <efunneko@gmail.com>:

fix: ensure function description is copied when ignoring parameters

--
b9fb5916593fe552a7b02bff379ebf2f3b3cf69f by Edward Funnekotter <efunneko@gmail.com>:

Fix annoying comments

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/552 from efunneko:efunneko/122/copy_doc_string_for_tool d9bc24343d9f32376b5647c4309d6cb172833534
PiperOrigin-RevId: 765470363
2025-05-30 22:35:14 -07:00
Xiang (Sean) Zhou 2623c71086 fix: add adk icon for UI
PiperOrigin-RevId: 765453471
2025-05-30 21:21:30 -07:00
Xiang (Sean) Zhou af2180c6d0 chore: add more comments to MCPTooset and MCPSessionManager
PiperOrigin-RevId: 765448413
2025-05-30 21:01:16 -07:00
Xiang (Sean) Zhou 5d297169d0 fix: remove labels from config when using API key from Google AI Studio to call model
PiperOrigin-RevId: 765448305
2025-05-30 21:00:23 -07:00
Xiang (Sean) Zhou 3ec496dd81 chore: add requirements.txt for langchain_youtube_search_agent
PiperOrigin-RevId: 765409052
2025-05-30 18:19:01 -07:00
Xiang (Sean) Zhou 3616bb5fc4 feat:support Langchain tools that has run_manager in _run args and don't have args_schema populated
PiperOrigin-RevId: 765405793
2025-05-30 18:05:42 -07:00
Ankur Sharma e06e6753ad chore: Add the name of the agent as a billing label. This will help consumers slice their billing reports by Agent.
Fixes https://github.com/google/adk-python/issues/452

PiperOrigin-RevId: 765402643
2025-05-30 17:54:28 -07:00
Google Team Member 63822c3fa8 Remove the gap between event holder and image.
PiperOrigin-RevId: 765402231
2025-05-30 17:52:26 -07:00
Google Team Member 95e33baf57 fix: add support for running python main function in UnsafeLocalCodeExecutor when the code has an if __name__ == "__main__" statement.
Fixes https://github.com/google/adk-python/issues/791

PiperOrigin-RevId: 765359512
2025-05-30 15:30:01 -07:00
Calvin Giles 4075290a1d chore: Fix reqeust -> request typo
Copybara import of the project:

--
6beac4451fef1774365e75ab67779253c5ac79be by Calvin Giles <calvin.giles@trademe.co.nz>:

chore: Fix reqeust -> request typo
#non-breaking
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/883 from calvingiles:fix-reqeust-typo cfe592e6ad4ebc79bd2b3ebcd0370f868b57ff10
PiperOrigin-RevId: 765354040
2025-05-30 15:13:42 -07:00
Google Team Member ba5b80d5d7 feat: use bigquery scope by default in bigquery credentials.
Right now the agent builder has to specify the bigquery scope explicitly for bigquery tools, which is somewhat unnecessary. With this change the user does not have to specify scopes, although they would still have the ability to overrides scopes if necessary.

PiperOrigin-RevId: 765354010
2025-05-30 15:12:49 -07:00
Karthigayan Devan 8759a25251 Copybara import of the project:
--
e1c479d037d37e1ee1ddd86a4cd180f2692d952f by Karthigayan Devan <karthidec@gmail.com>:

add jira_agent adk samples code which connect Jira cloud

--
ef9fe57538252ad69f825f3ff77023b1f9eb004f by Karthigayan Devan <karthidec@gmail.com>:

update variables comment

--
f6adaaddd2decdd1e35aa06ba88031ec3b8a8521 by Karthigayan Devan <karthidec@gmail.com>:

renamed tool name to match exactly align with tool naming standard, removed keyword

--
150e63d4270b141e21195c5be7d67dce72e216fb by Karthigayan Devan <karthidec@gmail.com>:

updated tool and agent instructions

--
5048043195a5b1d397d9d439b3f6c6e650b4a6a3 by Karthigayan Devan <karthidec@gmail.com>:

add image application integration

--
bf3ee1553929d6d031f7b14f0b28f8f0ae7b84cc by Karthigayan Devan <karthidec@gmail.com>:

update read me instructions on configure app integration connector

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/785 from karthidec:adk-samples-jira-agent 2b984fa8c242e164541353b4597aebf4fd422288
PiperOrigin-RevId: 765351338
2025-05-30 15:04:38 -07:00
Cristopher Hugo Olivares Del Real 7aaf811616 fix: typos in documentation
Copybara import of the project:

--
db506da1c38f0a27df51b0e672ef78d62077af78 by Cristopher Hugo Olivares Del Real <crissins041196@gmail.com>:

fix: typos in documentation
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/840 from crissins:main 76a5e9bfbe73e7744b144010741a4e80425282a9
PiperOrigin-RevId: 765347788
2025-05-30 14:55:36 -07:00
Shawn Yang 3930a4b989 chore: Add agent engine telemetry
PiperOrigin-RevId: 765346182
2025-05-30 14:49:39 -07:00
Google Team Member 45ef668435 fix: timeout issues for mcpstdio server when mcp tools are incorrect.
Fixes https://github.com/google/adk-python/issues/643

PiperOrigin-RevId: 765342572
2025-05-30 14:39:07 -07:00
Shangjie Chen 01965bdd74 chore:Extract common options for adk web and adk api_server.
PiperOrigin-RevId: 765326316
2025-05-30 13:58:22 -07:00
iamb4uc.xyz ccd05e0b00 BugFix: Unused import for deprecated.
--
512e810b6dbb88248bfbfc1dbff598a247a099be by swapnil <swapnilbhmk.intrn@gmail.com>:

BugFix: Unused import for deprecated.
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/726 from swapxs:patch-2 44590f0085c06410aac58a6519aaa080dc277a40
PiperOrigin-RevId: 765285320
2025-05-30 12:09:33 -07:00
Yifan Wang daac8cedfe fix: adk web not working on some env for windows, fixes https://github.com/google/adk-web/issues/34
PiperOrigin-RevId: 765271751
2025-05-30 11:36:00 -07:00
Shangjie Chen 65063023a5 fix: Continue fetching events if there are multiple pages.
Fixes https://github.com/google/adk-python/issues/920

PiperOrigin-RevId: 764985371
2025-05-29 19:42:50 -07:00
Wei Sun (Jack) 18fbe3cbfc docs: Adds a sample agent to illustrate state usage via callbacks.
PiperOrigin-RevId: 764981675
2025-05-29 19:30:44 -07:00
Wei Sun (Jack) 4214c7eddd chore: auto-format files.
PiperOrigin-RevId: 764980009
2025-05-29 19:24:16 -07:00
Amulya Bhatia face2e8cf2 Copybara import of the project:
--
8baeb0b569eaedc638b20e46894178a3b878dbd6 by Amulya Bhatia <amulya.bhatia@t-online.de>:

test: unit tests for built_in_code_executor and unsafe_code_executor

--
cfac73b9271557ead96eb5fb419e05d88c6e8cd4 by Amulya Bhatia <amulya.bhatia@t-online.de>:

test: unit tests for built_in_code_executor and unsafe_code_executor
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/971 from iamulya:code-executor-tests 55290e27b5e58ef3835905aec88639e936318d01
PiperOrigin-RevId: 764976316
2025-05-29 19:08:55 -07:00
Wei Sun (Jack) 04e07b4a14 docs: updates CONTRIBUTING.md to refine setup process using uv.
PiperOrigin-RevId: 764974667
2025-05-29 19:03:22 -07:00
Eugen-Bleck b226a06c0b fix: match arg case in errors
--
d9b0a6f822f773a61bcc507d252ca46da660b70b by Eugen-Bleck <eugenbleck@gmail.com>:

fix: match arg case in errors
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/724 from bl3ck:fix/preserve-arg-case-in-errors 3ac43ef2090f5e4b4158ea97cbcf16399aabe2e5
PiperOrigin-RevId: 764953570
2025-05-29 17:40:12 -07:00
Google Team Member 5c2ad327bf Render HTML artifact in chat window.
PiperOrigin-RevId: 764942273
2025-05-29 17:02:36 -07:00
Alankrit Verma 854a544061 fix(transfer_to_agent): update docstring for clarity and accuracy
Copybara import of the project:

--
e246af5965dfd4d032e0a3ce29513f3e2e874f73 by Alankrit Verma <alankrit386@gmail.com>:

tools: allow transfer_to_agent to accept extra kwargs

transfer_to_agent now takes **kwargs to swallow unexpected keyword args
Added integration tests covering single and multiple extra kwargs.
Fixes #458.

--
55fea786a9b7eb19b830dc67d7a2e37fe7937608 by Alankrit Verma <alankrit386@gmail.com>:

fix(tests): correct indentation in test_transfer.py for better readability

--
0c04f2d777bd4f3d8951dadd5e4e105530bd6281 by Alankrit Verma <alankrit386@gmail.com>:

fix(transfer_to_agent): restore strict two-arg signature and clarify usage

Revert the earlier **kwargs change so transfer_to_agent again only accepts
(agent_name, tool_context).  Improve the doc-string to make clear that no
other parameters should be passed to this tool.

Fixes #458

--
d37448dd0ef9fc6199ca0e42b211b3cd9c886eb0 by Alankrit Verma <alankrit386@gmail.com>:

fix(transfer_to_agent): update docstring for clarity and accuracy

--
ea827af78fc2c9abdf030ad50e24bba8c996df75 by Wei Sun (Jack) <Jacksunwei@gmail.com>:

Update transfer_to_agent_tool docstring for better prompt
--
a144069a67b2e5652ffd50224b1ce68ddea14783 by Wei Sun (Jack) <Jacksunwei@gmail.com>:

Update transfer_to_agent_tool.py

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/466 from AlankritVerma01:tools/transfer-accept-kwargs 686d436457e3141d128c6e81452fddc546a14a7e
PiperOrigin-RevId: 764940463
2025-05-29 16:57:27 -07:00
Yongsul Kim 0d66a7888b Copybara import of the project:
--
cd9130aca29b5d07b069cfc4a9aa022455e005e9 by Yongsul Kim <ystory84@gmail.com>:

docs: Fix broken link to A2A example
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/1021 from ystory:patch-1 5d827f7834ca33120bd2a87d63e29ac5b93eb7c9
PiperOrigin-RevId: 764937930
2025-05-29 16:50:10 -07:00
Xiang (Sean) Zhou ae7d3a79c8 chore: autoformat the test_litellm.py
PiperOrigin-RevId: 764937761
2025-05-29 16:49:20 -07:00
Xiang (Sean) Zhou 2b41824e46 chore: fix fast api ut
PiperOrigin-RevId: 764935253
2025-05-29 16:40:40 -07:00
Liang Wu 41ba2d1c8a chore: reformat the code using autoformat.sh.
PiperOrigin-RevId: 764918729
2025-05-29 15:56:29 -07:00
Shangjie Chen db4bc9809c fix: Filter memory by app_name and user_id.
Fixing https://github.com/google/adk-python/issues/1019.

PiperOrigin-RevId: 764903966
2025-05-29 15:15:59 -07:00
LucasNobre 05f4834759 Copybara import of the project:
--
cef3ca1ed3493eebaeab3e03bdf5e56b35c0b8ef by Lucas Nobre <lucaas.sn@gmail.com>:

feat: Add index tracking to handle parallel tool call using litellm
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/759 from lucasnobre212:fix/issue_484 65e22934bf839f9ea03963b9ec6c23fdce03f59f
PiperOrigin-RevId: 764902433
2025-05-29 15:11:23 -07:00
Jacky Wu 841e10ae35 fix: introduce PreciseTimestamp to fix mysql datetime precision issue.
Copybara import of the project:

--
c62a0a6da4317497b991f83d4d8561bdbe7292aa by Jacky W <wjx_colstu@hotmail.com>:

--
59c0606ac08ddb45ce469a4d1e1c6e515ef94df4 by Jacky W <wjx_colstu@hotmail.com>:

fix: add cache_ok option to remove sa warning.

--
1922599075af935a63544762765d6f0e6224907a by Jacky W <wjx_colstu@hotmail.com>:

chore: format code.
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/1001 from Colstuwjx:fix/issue-480-precise-mysql-timestamp 50e764fb9646e326ad0204ff7adb2a5b65bf875a
PiperOrigin-RevId: 764853016
2025-05-29 13:10:13 -07:00
Wei Sun (Jack) a9dcc588ad ADK changes
PiperOrigin-RevId: 764820494
2025-05-29 12:10:41 -07:00
Liang Wu a8a20743f9 fix: handles function tool parsing corner case where type hints are stored as strings.
Previously if you add `from __future__ import annotations` in your code, the parsing code would fail because the type hints will be a string instead of the class itself (e.g. input: 'str' instead of input: str).

Also added "_" to the util file name.

PiperOrigin-RevId: 764817339
2025-05-29 11:48:35 -07:00
Selcuk Gun d587270327 Prevent JSON parsing errors and preserve non-ascii characters in telemetry
PiperOrigin-RevId: 764801572
2025-05-29 11:48:28 -07:00
Google Team Member 1de5c340d8 Raise HTTPException when running evals in fast_api if google-adk[eval] is not installed.
PiperOrigin-RevId: 764798561
2025-05-29 11:48:22 -07:00
Xiang (Sean) Zhou 7e637d3fa0 feat: support Langchain StructuredTool for Langchain tool
for fixing: https://github.com/google/adk-python/issues/707

PiperOrigin-RevId: 764781197
2025-05-29 11:48:15 -07:00
Google Team Member 2a65c4118b fix: Assign empty inputSchema to MCP tool when converting an ADK tool that wraps a function which takes no parameters.
Fixes https://github.com/google/adk-python/issues/948

PiperOrigin-RevId: 764780248
2025-05-29 11:48:08 -07:00
Google Team Member 9bdd813be1 Fix typos in README for sample bigquery_agent and oauth_calendar_agent
PiperOrigin-RevId: 764777424
2025-05-29 11:48:01 -07:00
Google Team Member ac52eab88e ADK changes
PiperOrigin-RevId: 764776124
2025-05-29 11:47:55 -07:00
Mohammad Ghaffarifar a9345a072e chore: add py.typed and include it in flit config
Copybara import of the project:

--
f56fd74efecc2cf6fbe6db70e91dfa7780fb9c68 by Mohammad <mohammaddevgermany@gmail.com>:

build(package): add py.typed and include it in flit config

This adds a py.typed marker file to the google.adk package and updates
the Flit configuration in pyproject.toml to include it in the distribution.

This ensures the package is PEP 561 compliant and allows static type
checkers (like mypy and pyright) to recognize that the package supports type hints.

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/913 from mohamadghaffari:add-py-typed f56fd74efecc2cf6fbe6db70e91dfa7780fb9c68
PiperOrigin-RevId: 764603119
2025-05-29 11:47:46 -07:00
Selcuk Gun 999a7fe69d Make tool_call one span for telemetry
Also renamed tool_call as execute_tool and added attributes as recommended in https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/#execute-tool-span.

PiperOrigin-RevId: 764594179
2025-05-29 11:47:40 -07:00
Xiang (Sean) Zhou 96b36b70dc chore: fix base_llm_flow ut
PiperOrigin-RevId: 764585592
2025-05-29 11:47:31 -07:00
Xiang (Sean) Zhou 0250d9e3ac chore: reformat codes using autoformat.sh
PiperOrigin-RevId: 764584699
2025-05-29 11:47:22 -07:00
Xiang (Sean) Zhou 2b5c89b3a9 feat: expose more config of VertexAiSearchTool from latest Google GenAI SDK
for fixing: https://github.com/google/adk-python/issues/955

PiperOrigin-RevId: 764568728
2025-05-28 22:32:44 -07:00
Xiang (Sean) Zhou b92e068155 chore: fix function tool UT
PiperOrigin-RevId: 764567867
2025-05-28 22:30:42 -07:00
Xiang (Sean) Zhou a0714b8afc ADK changes
PiperOrigin-RevId: 764564638
2025-05-28 22:19:24 -07:00
Google Team Member 1452dacfeb Use media type in chat window. Remove isArtifactImage and isArtifactAudio reference.
PiperOrigin-RevId: 764563376
2025-05-28 22:15:28 -07:00
Almas Akchabayev 795605a37e fix: separate thinking from text parts in streaming mode
Copybara import of the project:

--
79962881ca1c17eb6d7bd9dcf31a44df93c9badd by Almas Akchabayev <almas.akchabayev@gmail.com>:

fix: separate thinking from text parts in streaming mode
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/777 from almeynman:separate-thinking-and-text-parts-in-stream-mode b63dcc7fd0fc3973888dcbb9d4cc7e7e0a66e7f7
PiperOrigin-RevId: 764561932
2025-05-28 22:11:14 -07:00
Google Team Member 60ceea72bd fix: do not convert "false" value to dict
This causes information loss, and is unexpected from user.

PiperOrigin-RevId: 764558190
2025-05-28 21:56:52 -07:00
Xiang (Sean) Zhou b70e74c450 chore: auto format mcp tools
PiperOrigin-RevId: 764547299
2025-05-28 21:14:42 -07:00
Xiang (Sean) Zhou 791ac9eb68 refactor: refactor cli to use agent loader
PiperOrigin-RevId: 764546019
2025-05-28 21:09:40 -07:00
Xiang (Sean) Zhou 623957c0a8 refactor: refine agent_loader to load the most common folder structure first and don't including unnecessary case
PiperOrigin-RevId: 764545194
2025-05-28 21:06:07 -07:00
Arpit R 6157db77f2 Copybara import of the project:
--
bdb2ddff1336db7fbeae71d3d76b4d294d7c4bea by Arpit Roopchandani <17565234+whoisarpit@users.noreply.github.com>:

Fix: Set output_schema correctly for LiteLllm
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/580 from whoisarpit:fix/lite_llm_response_schema 08bdb5a993fc44adf03e985c820c2083de30ba58
PiperOrigin-RevId: 764524765
2025-05-28 19:56:03 -07:00
Danny Park 9d4ca4ed44 fix: Fix filtering by user_id for vertex ai session service listing
When the user id contains special characters (i.e. an email), we have added in extra url parsing to address those characters. We have also added an if statement to use the correct url when there is no user_id supplied.

Copybara import of the project:

--
ef8499001afaea40bd037c4e9946b883e23a5854 by Danny Park <dpark@calicolabs.com>:
--
773cd2b50d15b9b056b47b6155df492b0ca8034c by Danny Park <dpark@calicolabs.com>:

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/996 from dpark27:fix/list_vertex_ai_sessions d351d7f6017c03165129adc7d0212f21d1340d88
PiperOrigin-RevId: 764522026
2025-05-28 19:46:39 -07:00
Google Team Member fc3e374c86 Add export to json button in the chat window.
PiperOrigin-RevId: 764504072
2025-05-28 18:37:12 -07:00
132 changed files with 6391 additions and 1384 deletions
+5
View File
@@ -0,0 +1,5 @@
releaseType: python
handleGHRelease: true
bumpMinorPreMajor: false
extraFiles:
- src/google/adk/version.py
+1
View File
@@ -0,0 +1 @@
enabled: true
+69
View File
@@ -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
+26 -30
View File
@@ -17,8 +17,7 @@ name: Check Pyink Formatting
on:
pull_request:
paths:
- 'src/**/*.py'
- 'tests/**/*.py'
- '**.py'
- 'pyproject.toml'
jobs:
@@ -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
@@ -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
if [ -n "$CHANGED_FILES" ]; then
echo "Changed Python files:"
echo "$CHANGED_FILES"
echo ""
echo "❌ Pyink formatting check failed!"
echo "👉 To fix formatting, run locally:"
echo ""
echo " pyink --config pyproject.toml $CHANGED_FILES"
echo ""
exit $RESULT
FORMATTED_FILES=$(echo "$CHANGED_FILES" | tr '\n' ' ')
# 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
- name: No changed Python files detected
if: env.CHANGED_FILES == ''
run: |
echo "No Python files changed. Skipping pyink check."
+1 -2
View File
@@ -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
+1 -1
View File
@@ -96,4 +96,4 @@ site/
Thumbs.db
*.bak
*.tmp
*.temp
*.temp
+82 -34
View File
@@ -2,8 +2,7 @@
We'd love to accept your patches and contributions to this project.
## Table of Contents
- [How to contribute](#how-to-contribute)
- [Before you begin](#before-you-begin)
- [Sign our Contributor License Agreement](#sign-our-contributor-license-agreement)
- [Review our community guidelines](#review-our-community-guidelines)
@@ -12,16 +11,16 @@ We'd love to accept your patches and contributions to this project.
- [Requirement for PRs](#requirement-for-prs)
- [Large or Complex Changes](#large-or-complex-changes)
- [Testing Requirements](#testing-requirements)
- [Unit Tests](#unit-tests)
- [End-to-End (E2E) Tests](#manual-end-to-end-e2e-tests)
- [Unit Tests](#unit-tests)
- [Manual End-to-End (E2E) Tests](#manual-end-to-end-e2e-tests)
- [Documentation](#documentation)
- [Development Setup](#development-setup)
- [Code reviews](#code-reviews)
- [Code reviews](#code-reviews)
## Before you begin
# Before you begin
### Sign our Contributor License Agreement
## Sign our Contributor License Agreement
Contributions to this project must be accompanied by a
[Contributor License Agreement](https://cla.developers.google.com/about) (CLA).
@@ -35,38 +34,38 @@ was for a different project), you probably don't need to do it again.
Visit <https://cla.developers.google.com/> to see your current agreements or to
sign a new one.
### Review our community guidelines
## Review our community guidelines
This project follows
[Google's Open Source Community Guidelines](https://opensource.google/conduct/).
## Contribution workflow
# Contribution workflow
### Finding Issues to Work On
## Finding Issues to Work On
- Browse issues labeled **`good first issue`** (newcomer-friendly) or **`help wanted`** (general contributions).
- For other issues, please kindly ask before contributing to avoid duplication.
### Requirement for PRs
## Requirement for PRs
- All PRs, other than small documentation or typo fixes, should have a Issue assoicated. If not, please create one.
- Small, focused PRs. Keep changes minimal—one concern per PR.
- For bug fixes or features, please provide logs or screenshot after the fix is applied to help reviewers better understand the fix.
- Please include a `testing plan` section in your PR to talk about how you will test. This will save time for PR review. See `Testing Requirements` section for more details.
### Large or Complex Changes
## Large or Complex Changes
For substantial features or architectural revisions:
- Open an Issue First: Outline your proposal, including design considerations and impact.
- Gather Feedback: Discuss with maintainers and the community to ensure alignment and avoid duplicate work
### Testing Requirements
## Testing Requirements
To maintain code quality and prevent regressions, all code changes must include comprehensive tests and verifiable end-to-end (E2E) evidence.
#### Unit Tests
### Unit Tests
Please add or update unit tests for your change. Please include a summary of passed `pytest` results.
@@ -80,7 +79,7 @@ Requirements for unit tests:
- Free of external dependencies (use mocks or fixtures as needed).
- **Quality:** Aim for high readability and maintainability; include docstrings or comments for complex scenarios.
#### Manual End-to-End (E2E) Tests
### Manual End-to-End (E2E) Tests
Manual E2E tests ensure integrated flows work as intended. Your tests should cover all scenarios. Sometimes, it's also good to ensure relevant functionality is not impacted.
@@ -97,23 +96,34 @@ Depending on your change:
- Include the command used and console output showing test results.
- Highlight sections of the log that directly relate to your change.
### Documentation
## Documentation
For any changes that impact user-facing documentation (guides, API reference, tutorials), please open a PR in the [adk-docs](https://github.com/google/adk-docs) repository to update relevant part before or alongside your code PR.
### Development Setup
## Development Setup
1. **Clone the repository:**
```shell
git clone git@github.com:google/adk-python.git
gh repo clone google/adk-python
cd adk-python
```
2. **Create and activate a virtual environment:**
2. **Install uv:**
Check out [uv installation guide](https://docs.astral.sh/uv/getting-started/installation/).
3. **Create and activate a virtual environment:**
**NOTE**: ADK supports Python 3.9+. Python 3.11 and above is strongly recommended.
Create a workspace venv using uv.
```shell
python -m venv .venv
uv venv --python "python3.11" ".venv"
```
Activate the workspace venv.
```shell
source .venv/bin/activate
```
@@ -123,39 +133,77 @@ For any changes that impact user-facing documentation (guides, API reference, tu
source .\.venv\Scripts\activate
```
3. **Install dependencies:**
4. **Install dependencies:**
```shell
pip install uv
uv sync --all-extras
```
4. **Run unit tests:**
**NOTE**: for convenience, installing all extra deps as a starting point.
5. **Run unit tests:**
```shell
uv run pytest ./tests/unittests
pytest ./tests/unittests
```
5. **Run pyink to format codebase:**
NOTE: for accurately repro test failure, only include `test` and `eval` as
extra dependencies.
```shell
uv run pyink --config pyproject.toml ./src
uv sync --extra test --extra eval
pytest ./tests/unittests
```
6. **Build the package**
6. **Auto-format the code:**
**NOTE**: We use `isort` and `pyink` for styles. Use the included
autoformat.sh to auto-format.
```shell
./autoformat.sh
```
7. **Build the wheel file:**
```shell
uv build
```
7. **Local Testing**
Have a simple testing folder setup as mentioned in the [quickstart](https://google.github.io/adk-docs/get-started/quickstart/)
then install the local package with changes after building it using the below command to test the changes.
8. **Test the locally built wheel file:**
Have a simple testing folder setup as mentioned in the
[quickstart](https://google.github.io/adk-docs/get-started/quickstart/).
Then following below steps to test your changes:
Create a clean venv and activate it:
```shell
uv pip install <YOUR_WHL_FILE_PATH>
[eg]: uv pip install <ADK_PROJECT_PATH>/dist/google_adk-0.4.0-py3-none-any.whl
VENV_PATH=~/venvs/adk-quickstart
```
### Code reviews
```shell
command -v deactivate >/dev/null 2>&1 && deactivate
```
```shell
rm -rf $VENV_PATH \
&& python3 -m venv $VENV_PATH \
&& source $VENV_PATH/bin/activate
```
Install the locally built wheel file:
```shell
pip install dist/google_adk-<version>-py3-none-any.whl
```
## Contributing Resources
[Contributing folder](https://github.com/google/adk-python/tree/main/contributing/samples) has resources that is helpful for contributors.
## Code reviews
All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult
+2 -2
View File
@@ -43,8 +43,8 @@ Agent Development Kit (ADK) is a flexible and modular framework for developing a
## 🤖 Agent2Agent (A2A) Protocol and ADK Integration
For remote agent-to-agent communication, ADK integrates with the
[A2A protocol](https://github.com/google/A2A/).
See this [example](https://github.com/google/A2A/tree/main/samples/python/agents/google_adk)
[A2A protocol](https://github.com/google-a2a/A2A/).
See this [example](https://github.com/google-a2a/a2a-samples/tree/main/samples/python/agents/google_adk)
for how they can work together.
## 🚀 Installation
+13
View File
@@ -41,6 +41,13 @@ echo '---------------------------------------'
isort tests/
echo 'All done! ✨ 🍰 ✨'
echo '---------------------------------------'
echo '| Organizing imports for contributing/...'
echo '---------------------------------------'
isort contributing/
echo 'All done! ✨ 🍰 ✨'
echo '---------------------------------------'
echo '| Auto-formatting src/...'
echo '---------------------------------------'
@@ -52,3 +59,9 @@ echo '| Auto-formatting tests/...'
echo '---------------------------------------'
find -L tests/ -type f -name "*.py" -exec pyink --config pyproject.toml {} +
echo '---------------------------------------'
echo '| Auto-formatting contributing/...'
echo '---------------------------------------'
find -L contributing/ -type f -name "*.py" -exec pyink --config pyproject.toml {} +
+9
View File
@@ -0,0 +1,9 @@
# Contributing Resources
This folder host resources for ADK contributors, for example, testing samples etc.
# Samples
Samples folder host samples to test different features. The samples are usually minimal and simplistic to test one or a few scenarios.
**Note**: This is different from the [google/adk-samples](https://github.com/google/adk-samples) repo, which hosts more complex e2e samples for customers to use or modify directly.
@@ -19,8 +19,12 @@ from google.genai import types
async def log_query(tool_context: ToolContext, query: str):
"""Roll a die with the specified number of sides."""
await tool_context.save_artifact('query', types.Part(text=query))
"""Saves the provided query string as a 'text/plain' artifact named 'query'."""
query_bytes = query.encode('utf-8')
artifact_part = types.Part(
inline_data=types.Blob(mime_type='text/plain', data=query_bytes)
)
await tool_context.save_artifact('query', artifact_part)
root_agent = Agent(
-2
View File
@@ -19,7 +19,6 @@ from google.adk.tools.bigquery import BigQueryCredentialsConfig
from google.adk.tools.bigquery import BigQueryToolset
import google.auth
RUN_WITH_ADC = False
@@ -36,7 +35,6 @@ else:
credentials_config = BigQueryCredentialsConfig(
client_id=os.getenv("OAUTH_CLIENT_ID"),
client_secret=os.getenv("OAUTH_CLIENT_SECRET"),
scopes=["https://www.googleapis.com/auth/bigquery"],
)
bigquery_toolset = BigQueryToolset(credentials_config=credentials_config)
@@ -1,8 +1,8 @@
# OAuth Sample
# BigQuery Sample
## Introduction
This sample tests and demos the OAuth support in ADK via two tools:
This sample tests and demos the BigQuery support in ADK via two tools:
* 1. bigquery_datasets_list:
@@ -28,14 +28,14 @@ This sample tests and demos the OAuth support in ADK via two tools:
* 1. Follow https://developers.google.com/identity/protocols/oauth2#1.-obtain-oauth-2.0-credentials-from-the-dynamic_data.setvar.console_name. to get your client id and client secret.
Be sure to choose "web" as your client type.
* 2. Configure your .env file to add two variables:
* 2. Configure your `.env` file to add two variables:
* GOOGLE_CLIENT_ID={your client id}
* GOOGLE_CLIENT_SECRET={your client secret}
* OAUTH_CLIENT_ID={your client id}
* OAUTH_CLIENT_SECRET={your client secret}
Note: done't create a separate .env , instead put it to the same .env file that stores your Vertex AI or Dev ML credentials
Note: don't create a separate `.env` file , instead put it to the same `.env` file that stores your Vertex AI or Dev ML credentials
* 3. Follow https://developers.google.com/identity/protocols/oauth2/web-server#creatingcred to add http://localhost/dev-ui to "Authorized redirect URIs".
* 3. Follow https://developers.google.com/identity/protocols/oauth2/web-server#creatingcred to add http://localhost/dev-ui/ to "Authorized redirect URIs".
Note: localhost here is just a hostname that you use to access the dev ui, replace it with the actual hostname you use to access the dev ui.
+2 -3
View File
@@ -12,12 +12,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from google.genai import Client
from google.genai import types
from google.adk import Agent
from google.adk.tools import load_artifacts
from google.adk.tools import ToolContext
from google.genai import Client
from google.genai import types
# Only Vertex AI supports image generation for now.
client = Client()
@@ -12,10 +12,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from google.genai import Client
from google.adk import Agent
from google.adk.tools import google_search
from google.genai import Client
# Only Vertex AI supports image generation for now.
client = Client()
+2 -1
View File
@@ -65,9 +65,10 @@ async def check_prime(nums: list[int]) -> str:
else f"{', '.join(str(num) for num in primes)} are prime numbers."
)
root_agent = Agent(
model='gemini-2.0-flash',
name='data_processing_agent',
name='hello_world_agent',
description=(
'hello world agent that can roll a dice of 8 sides and check prime'
' numbers.'
@@ -0,0 +1,16 @@
# 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.
from . import agent
@@ -0,0 +1,90 @@
# 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.
import random
from google.adk import Agent
from google.adk.models.anthropic_llm import Claude
def roll_die(sides: int) -> int:
"""Roll a die and return the rolled result.
Args:
sides: The integer number of sides the die has.
Returns:
An integer of the result of rolling the die.
"""
return random.randint(1, sides)
async def check_prime(nums: list[int]) -> str:
"""Check if a given list of numbers are prime.
Args:
nums: The list of numbers to check.
Returns:
A str indicating which number is prime.
"""
primes = set()
for number in nums:
number = int(number)
if number <= 1:
continue
is_prime = True
for i in range(2, int(number**0.5) + 1):
if number % i == 0:
is_prime = False
break
if is_prime:
primes.add(number)
return (
"No prime numbers found."
if not primes
else f"{', '.join(str(num) for num in primes)} are prime numbers."
)
root_agent = Agent(
model=Claude(model="claude-3-5-sonnet-v2@20241022"),
name="data_processing_agent",
description=(
"hello world agent that can roll a dice of 8 sides and check prime"
" numbers."
),
instruction="""
You roll dice and answer questions about the outcome of the dice rolls.
You can roll dice of different sizes.
You can use multiple tools in parallel by calling functions in parallel(in one request and in one round).
It is ok to discuss previous dice roles, and comment on the dice rolls.
When you are asked to roll a die, you must call the roll_die tool with the number of sides. Be sure to pass in an integer. Do not pass in a string.
You should never roll a die on your own.
When checking prime numbers, call the check_prime tool with a list of integers. Be sure to pass in a list of integers. You should never pass in a string.
You should not check prime numbers before calling the tool.
When you are asked to roll a die and check prime numbers, you should always make the following two function calls:
1. You should first call the roll_die tool to get a roll. Wait for the function response before calling the check_prime tool.
2. After you get the function response from roll_die tool, you should call the check_prime tool with the roll_die result.
2.1 If user asks you to check primes based on previous rolls, make sure you include the previous rolls in the list.
3. When you respond, you must include the roll_die result from step 1.
You should always perform the previous 3 steps when asking for a roll and checking prime numbers.
You should not rely on the previous history on prime results.
""",
tools=[
roll_die,
check_prime,
],
)
@@ -0,0 +1,76 @@
# 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.
import asyncio
import time
import agent
from dotenv import load_dotenv
from google.adk import Runner
from google.adk.artifacts import InMemoryArtifactService
from google.adk.cli.utils import logs
from google.adk.sessions import InMemorySessionService
from google.adk.sessions import Session
from google.genai import types
load_dotenv(override=True)
logs.log_to_tmp_folder()
async def main():
app_name = 'my_app'
user_id_1 = 'user1'
session_service = InMemorySessionService()
artifact_service = InMemoryArtifactService()
runner = Runner(
app_name=app_name,
agent=agent.root_agent,
artifact_service=artifact_service,
session_service=session_service,
)
session_11 = await session_service.create_session(
app_name=app_name, user_id=user_id_1
)
async def run_prompt(session: Session, new_message: str):
content = types.Content(
role='user', parts=[types.Part.from_text(text=new_message)]
)
print('** User says:', content.model_dump(exclude_none=True))
async for event in runner.run_async(
user_id=user_id_1,
session_id=session.id,
new_message=content,
):
if event.content.parts and event.content.parts[0].text:
print(f'** {event.author}: {event.content.parts[0].text}')
start_time = time.time()
print('Start time:', start_time)
print('------------------------------------')
await run_prompt(session_11, 'Hi, introduce yourself.')
await run_prompt(
session_11,
'Run the following request 10 times: roll a die with 100 sides and check'
' if it is prime',
)
end_time = time.time()
print('------------------------------------')
print('End time:', end_time)
print('Total time:', end_time - start_time)
if __name__ == '__main__':
asyncio.run(main())
+4 -6
View File
@@ -13,25 +13,23 @@
# limitations under the License.
import asyncio
import os
from typing import Any
from typing import Union
import agent
from dotenv import load_dotenv
from typing import Any
from typing import Union
from google.adk.agents import Agent
from google.adk.events import Event
from google.adk.runners import Runner
from google.adk.tools import LongRunningFunctionTool
from google.adk.sessions import InMemorySessionService
from google.adk.tools import LongRunningFunctionTool
from google.genai import types
import os
from opentelemetry import trace
from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
from opentelemetry.sdk.trace import export
from opentelemetry.sdk.trace import TracerProvider
load_dotenv(override=True)
APP_NAME = "human_in_the_loop"

Some files were not shown because too many files have changed in this diff Show More