google-adk 1.4.1__py3-none-any.whl → 1.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. google/adk/a2a/converters/event_converter.py +382 -0
  2. google/adk/a2a/converters/part_converter.py +4 -2
  3. google/adk/a2a/converters/request_converter.py +90 -0
  4. google/adk/a2a/converters/utils.py +71 -0
  5. google/adk/agents/llm_agent.py +5 -3
  6. google/adk/artifacts/gcs_artifact_service.py +3 -2
  7. google/adk/auth/auth_tool.py +2 -2
  8. google/adk/auth/credential_service/session_state_credential_service.py +83 -0
  9. google/adk/cli/cli_deploy.py +9 -2
  10. google/adk/cli/cli_tools_click.py +110 -52
  11. google/adk/cli/fast_api.py +26 -2
  12. google/adk/cli/utils/evals.py +53 -0
  13. google/adk/evaluation/final_response_match_v1.py +110 -0
  14. google/adk/evaluation/gcs_eval_sets_manager.py +8 -5
  15. google/adk/evaluation/response_evaluator.py +12 -1
  16. google/adk/events/event.py +5 -5
  17. google/adk/flows/llm_flows/contents.py +49 -4
  18. google/adk/flows/llm_flows/functions.py +32 -0
  19. google/adk/memory/__init__.py +3 -1
  20. google/adk/memory/vertex_ai_memory_bank_service.py +150 -0
  21. google/adk/models/lite_llm.py +9 -1
  22. google/adk/runners.py +10 -0
  23. google/adk/sessions/vertex_ai_session_service.py +70 -19
  24. google/adk/telemetry.py +10 -0
  25. google/adk/tools/bigquery/bigquery_credentials.py +28 -11
  26. google/adk/tools/bigquery/bigquery_tool.py +1 -1
  27. google/adk/tools/bigquery/client.py +1 -1
  28. google/adk/tools/bigquery/metadata_tool.py +1 -1
  29. google/adk/tools/bigquery/query_tool.py +1 -1
  30. google/adk/version.py +1 -1
  31. {google_adk-1.4.1.dist-info → google_adk-1.5.0.dist-info}/METADATA +6 -5
  32. {google_adk-1.4.1.dist-info → google_adk-1.5.0.dist-info}/RECORD +35 -29
  33. {google_adk-1.4.1.dist-info → google_adk-1.5.0.dist-info}/WHEEL +0 -0
  34. {google_adk-1.4.1.dist-info → google_adk-1.5.0.dist-info}/entry_points.txt +0 -0
  35. {google_adk-1.4.1.dist-info → google_adk-1.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -14,7 +14,9 @@
14
14
  from __future__ import annotations
15
15
 
16
16
  import asyncio
17
+ import json
17
18
  import logging
19
+ import os
18
20
  import re
19
21
  from typing import Any
20
22
  from typing import Dict
@@ -22,6 +24,7 @@ from typing import Optional
22
24
  import urllib.parse
23
25
 
24
26
  from dateutil import parser
27
+ from google.genai.errors import ClientError
25
28
  from typing_extensions import override
26
29
 
27
30
  from google import genai
@@ -87,30 +90,53 @@ class VertexAiSessionService(BaseSessionService):
87
90
  path=f'reasoningEngines/{reasoning_engine_id}/sessions',
88
91
  request_dict=session_json_dict,
89
92
  )
93
+ api_response = _convert_api_response(api_response)
90
94
  logger.info(f'Create Session response {api_response}')
91
95
 
92
96
  session_id = api_response['name'].split('/')[-3]
93
97
  operation_id = api_response['name'].split('/')[-1]
94
98
 
95
99
  max_retry_attempt = 5
96
- lro_response = None
97
- while max_retry_attempt >= 0:
98
- lro_response = await api_client.async_request(
99
- http_method='GET',
100
- path=f'operations/{operation_id}',
101
- request_dict={},
102
- )
103
100
 
104
- if lro_response.get('done', None):
105
- break
106
-
107
- await asyncio.sleep(1)
108
- max_retry_attempt -= 1
109
-
110
- if lro_response is None or not lro_response.get('done', None):
111
- raise TimeoutError(
112
- f'Timeout waiting for operation {operation_id} to complete.'
113
- )
101
+ if _is_vertex_express_mode(self._project, self._location):
102
+ # Express mode doesn't support LRO, so we need to poll
103
+ # the session resource.
104
+ # TODO: remove this once LRO polling is supported in Express mode.
105
+ for i in range(max_retry_attempt):
106
+ try:
107
+ await api_client.async_request(
108
+ http_method='GET',
109
+ path=(
110
+ f'reasoningEngines/{reasoning_engine_id}/sessions/{session_id}'
111
+ ),
112
+ request_dict={},
113
+ )
114
+ break
115
+ except ClientError as e:
116
+ logger.info('Polling for session %s: %s', session_id, e)
117
+ # Add slight exponential backoff to avoid excessive polling.
118
+ await asyncio.sleep(1 + 0.5 * i)
119
+ else:
120
+ raise TimeoutError('Session creation failed.')
121
+ else:
122
+ lro_response = None
123
+ for _ in range(max_retry_attempt):
124
+ lro_response = await api_client.async_request(
125
+ http_method='GET',
126
+ path=f'operations/{operation_id}',
127
+ request_dict={},
128
+ )
129
+ lro_response = _convert_api_response(lro_response)
130
+
131
+ if lro_response.get('done', None):
132
+ break
133
+
134
+ await asyncio.sleep(1)
135
+
136
+ if lro_response is None or not lro_response.get('done', None):
137
+ raise TimeoutError(
138
+ f'Timeout waiting for operation {operation_id} to complete.'
139
+ )
114
140
 
115
141
  # Get session resource
116
142
  get_session_api_response = await api_client.async_request(
@@ -118,6 +144,7 @@ class VertexAiSessionService(BaseSessionService):
118
144
  path=f'reasoningEngines/{reasoning_engine_id}/sessions/{session_id}',
119
145
  request_dict={},
120
146
  )
147
+ get_session_api_response = _convert_api_response(get_session_api_response)
121
148
 
122
149
  update_timestamp = isoparse(
123
150
  get_session_api_response['updateTime']
@@ -149,6 +176,7 @@ class VertexAiSessionService(BaseSessionService):
149
176
  path=f'reasoningEngines/{reasoning_engine_id}/sessions/{session_id}',
150
177
  request_dict={},
151
178
  )
179
+ get_session_api_response = _convert_api_response(get_session_api_response)
152
180
 
153
181
  session_id = get_session_api_response['name'].split('/')[-1]
154
182
  update_timestamp = isoparse(
@@ -167,9 +195,12 @@ class VertexAiSessionService(BaseSessionService):
167
195
  path=f'reasoningEngines/{reasoning_engine_id}/sessions/{session_id}/events',
168
196
  request_dict={},
169
197
  )
198
+ list_events_api_response = _convert_api_response(list_events_api_response)
170
199
 
171
200
  # Handles empty response case
172
- if list_events_api_response.get('httpHeaders', None):
201
+ if not list_events_api_response or list_events_api_response.get(
202
+ 'httpHeaders', None
203
+ ):
173
204
  return session
174
205
 
175
206
  session.events += [
@@ -226,9 +257,10 @@ class VertexAiSessionService(BaseSessionService):
226
257
  path=path,
227
258
  request_dict={},
228
259
  )
260
+ api_response = _convert_api_response(api_response)
229
261
 
230
262
  # Handles empty response case
231
- if api_response.get('httpHeaders', None):
263
+ if not api_response or api_response.get('httpHeaders', None):
232
264
  return ListSessionsResponse()
233
265
 
234
266
  sessions = []
@@ -303,6 +335,25 @@ class VertexAiSessionService(BaseSessionService):
303
335
  return client._api_client
304
336
 
305
337
 
338
+ def _is_vertex_express_mode(
339
+ project: Optional[str], location: Optional[str]
340
+ ) -> bool:
341
+ """Check if Vertex AI and API key are both enabled replacing project and location, meaning the user is using the Vertex Express Mode."""
342
+ return (
343
+ os.environ.get('GOOGLE_GENAI_USE_VERTEXAI', '0').lower() in ['true', '1']
344
+ and os.environ.get('GOOGLE_API_KEY', None) is not None
345
+ and project is None
346
+ and location is None
347
+ )
348
+
349
+
350
+ def _convert_api_response(api_response):
351
+ """Converts the API response to a JSON object based on the type."""
352
+ if hasattr(api_response, 'body'):
353
+ return json.loads(api_response.body)
354
+ return api_response
355
+
356
+
306
357
  def _convert_event_to_json(event: Event) -> Dict[str, Any]:
307
358
  metadata_json = {
308
359
  'partial': event.partial,
google/adk/telemetry.py CHANGED
@@ -195,6 +195,16 @@ def trace_call_llm(
195
195
  llm_response_json,
196
196
  )
197
197
 
198
+ if llm_response.usage_metadata is not None:
199
+ span.set_attribute(
200
+ 'gen_ai.usage.input_tokens',
201
+ llm_response.usage_metadata.prompt_token_count,
202
+ )
203
+ span.set_attribute(
204
+ 'gen_ai.usage.output_tokens',
205
+ llm_response.usage_metadata.total_token_count,
206
+ )
207
+
198
208
 
199
209
  def trace_send_data(
200
210
  invocation_context: InvocationContext,
@@ -21,9 +21,10 @@ from typing import Optional
21
21
  from fastapi.openapi.models import OAuth2
22
22
  from fastapi.openapi.models import OAuthFlowAuthorizationCode
23
23
  from fastapi.openapi.models import OAuthFlows
24
+ import google.auth.credentials
24
25
  from google.auth.exceptions import RefreshError
25
26
  from google.auth.transport.requests import Request
26
- from google.oauth2.credentials import Credentials
27
+ import google.oauth2.credentials
27
28
  from pydantic import BaseModel
28
29
  from pydantic import model_validator
29
30
 
@@ -40,26 +41,35 @@ BIGQUERY_DEFAULT_SCOPE = ["https://www.googleapis.com/auth/bigquery"]
40
41
 
41
42
  @experimental
42
43
  class BigQueryCredentialsConfig(BaseModel):
43
- """Configuration for Google API tools. (Experimental)"""
44
+ """Configuration for Google API tools (Experimental).
45
+
46
+ Please do not use this in production, as it may be deprecated later.
47
+ """
44
48
 
45
49
  # Configure the model to allow arbitrary types like Credentials
46
50
  model_config = {"arbitrary_types_allowed": True}
47
51
 
48
- credentials: Optional[Credentials] = None
49
- """the existing oauth credentials to use. If set,this credential will be used
52
+ credentials: Optional[google.auth.credentials.Credentials] = None
53
+ """The existing auth credentials to use. If set, this credential will be used
50
54
  for every end user, end users don't need to be involved in the oauthflow. This
51
55
  field is mutually exclusive with client_id, client_secret and scopes.
52
56
  Don't set this field unless you are sure this credential has the permission to
53
57
  access every end user's data.
54
58
 
55
- Example usage: when the agent is deployed in Google Cloud environment and
59
+ Example usage 1: When the agent is deployed in Google Cloud environment and
56
60
  the service account (used as application default credentials) has access to
57
61
  all the required BigQuery resource. Setting this credential to allow user to
58
62
  access the BigQuery resource without end users going through oauth flow.
59
63
 
60
- To get application default credential: `google.auth.default(...)`. See more
64
+ To get application default credential, use: `google.auth.default(...)`. See more
61
65
  details in https://cloud.google.com/docs/authentication/application-default-credentials.
62
66
 
67
+ Example usage 2: When the agent wants to access the user's BigQuery resources
68
+ using the service account key credentials.
69
+
70
+ To load service account key credentials, use: `google.auth.load_credentials_from_file(...)`.
71
+ See more details in https://cloud.google.com/iam/docs/service-account-creds#user-managed-keys.
72
+
63
73
  When the deployed environment cannot provide a pre-existing credential,
64
74
  consider setting below client_id, client_secret and scope for end users to go
65
75
  through oauth flow, so that agent can access the user data.
@@ -86,7 +96,9 @@ class BigQueryCredentialsConfig(BaseModel):
86
96
  " client_id/client_secret/scopes."
87
97
  )
88
98
 
89
- if self.credentials:
99
+ if self.credentials and isinstance(
100
+ self.credentials, google.oauth2.credentials.Credentials
101
+ ):
90
102
  self.client_id = self.credentials.client_id
91
103
  self.client_secret = self.credentials.client_secret
92
104
  self.scopes = self.credentials.scopes
@@ -115,7 +127,7 @@ class BigQueryCredentialsManager:
115
127
 
116
128
  async def get_valid_credentials(
117
129
  self, tool_context: ToolContext
118
- ) -> Optional[Credentials]:
130
+ ) -> Optional[google.auth.credentials.Credentials]:
119
131
  """Get valid credentials, handling refresh and OAuth flow as needed.
120
132
 
121
133
  Args:
@@ -127,7 +139,7 @@ class BigQueryCredentialsManager:
127
139
  # First, try to get credentials from the tool context
128
140
  creds_json = tool_context.state.get(BIGQUERY_TOKEN_CACHE_KEY, None)
129
141
  creds = (
130
- Credentials.from_authorized_user_info(
142
+ google.oauth2.credentials.Credentials.from_authorized_user_info(
131
143
  json.loads(creds_json), self.credentials_config.scopes
132
144
  )
133
145
  if creds_json
@@ -138,6 +150,11 @@ class BigQueryCredentialsManager:
138
150
  if not creds:
139
151
  creds = self.credentials_config.credentials
140
152
 
153
+ # If non-oauth credentials are provided then use them as is. This helps
154
+ # in flows such as service account keys
155
+ if creds and not isinstance(creds, google.oauth2.credentials.Credentials):
156
+ return creds
157
+
141
158
  # Check if we have valid credentials
142
159
  if creds and creds.valid:
143
160
  return creds
@@ -159,7 +176,7 @@ class BigQueryCredentialsManager:
159
176
 
160
177
  async def _perform_oauth_flow(
161
178
  self, tool_context: ToolContext
162
- ) -> Optional[Credentials]:
179
+ ) -> Optional[google.oauth2.credentials.Credentials]:
163
180
  """Perform OAuth flow to get new credentials.
164
181
 
165
182
  Args:
@@ -199,7 +216,7 @@ class BigQueryCredentialsManager:
199
216
 
200
217
  if auth_response:
201
218
  # OAuth flow completed, create credentials
202
- creds = Credentials(
219
+ creds = google.oauth2.credentials.Credentials(
203
220
  token=auth_response.oauth2.access_token,
204
221
  refresh_token=auth_response.oauth2.refresh_token,
205
222
  token_uri=auth_scheme.flows.authorizationCode.tokenUrl,
@@ -19,7 +19,7 @@ from typing import Any
19
19
  from typing import Callable
20
20
  from typing import Optional
21
21
 
22
- from google.oauth2.credentials import Credentials
22
+ from google.auth.credentials import Credentials
23
23
  from typing_extensions import override
24
24
 
25
25
  from ...utils.feature_decorator import experimental
@@ -15,8 +15,8 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import google.api_core.client_info
18
+ from google.auth.credentials import Credentials
18
19
  from google.cloud import bigquery
19
- from google.oauth2.credentials import Credentials
20
20
 
21
21
  from ... import version
22
22
 
@@ -12,8 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from google.auth.credentials import Credentials
15
16
  from google.cloud import bigquery
16
- from google.oauth2.credentials import Credentials
17
17
 
18
18
  from . import client
19
19
 
@@ -16,8 +16,8 @@ import functools
16
16
  import types
17
17
  from typing import Callable
18
18
 
19
+ from google.auth.credentials import Credentials
19
20
  from google.cloud import bigquery
20
- from google.oauth2.credentials import Credentials
21
21
 
22
22
  from . import client
23
23
  from .config import BigQueryToolConfig
google/adk/version.py CHANGED
@@ -13,4 +13,4 @@
13
13
  # limitations under the License.
14
14
 
15
15
  # version: major.minor.patch
16
- __version__ = "1.4.1"
16
+ __version__ = "1.5.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-adk
3
- Version: 1.4.1
3
+ Version: 1.5.0
4
4
  Summary: Agent Development Kit
5
5
  Author-email: Google LLC <googleapis-packages@google.com>
6
6
  Requires-Python: >=3.9
@@ -19,6 +19,7 @@ Classifier: Operating System :: OS Independent
19
19
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
20
  Classifier: License :: OSI Approved :: Apache Software License
21
21
  License-File: LICENSE
22
+ Requires-Dist: PyYAML>=6.0.2
22
23
  Requires-Dist: anyio>=4.9.0;python_version>='3.10'
23
24
  Requires-Dist: authlib>=1.5.1
24
25
  Requires-Dist: click>=8.1.8
@@ -28,7 +29,7 @@ Requires-Dist: google-cloud-aiplatform[agent-engines]>=1.95.1
28
29
  Requires-Dist: google-cloud-secret-manager>=2.22.0
29
30
  Requires-Dist: google-cloud-speech>=2.30.0
30
31
  Requires-Dist: google-cloud-storage>=2.18.0, <3.0.0
31
- Requires-Dist: google-genai>=1.17.0
32
+ Requires-Dist: google-genai>=1.21.1
32
33
  Requires-Dist: graphviz>=0.20.2
33
34
  Requires-Dist: mcp>=1.8.0;python_version>='3.10'
34
35
  Requires-Dist: opentelemetry-api>=1.31.0
@@ -37,7 +38,6 @@ Requires-Dist: opentelemetry-sdk>=1.31.0
37
38
  Requires-Dist: pydantic>=2.0, <3.0.0
38
39
  Requires-Dist: python-dateutil>=2.9.0.post0
39
40
  Requires-Dist: python-dotenv>=1.0.0
40
- Requires-Dist: PyYAML>=6.0.2
41
41
  Requires-Dist: requests>=2.32.4
42
42
  Requires-Dist: sqlalchemy>=2.0
43
43
  Requires-Dist: starlette>=0.46.2
@@ -48,9 +48,9 @@ Requires-Dist: websockets>=15.0.1
48
48
  Requires-Dist: a2a-sdk>=0.2.7 ; extra == "a2a" and (python_version>='3.10')
49
49
  Requires-Dist: flit>=3.10.0 ; extra == "dev"
50
50
  Requires-Dist: isort>=6.0.0 ; extra == "dev"
51
+ Requires-Dist: mypy>=1.15.0 ; extra == "dev"
51
52
  Requires-Dist: pyink>=24.10.0 ; extra == "dev"
52
53
  Requires-Dist: pylint>=2.6.0 ; extra == "dev"
53
- Requires-Dist: mypy>=1.15.0 ; extra == "dev"
54
54
  Requires-Dist: autodoc_pydantic ; extra == "docs"
55
55
  Requires-Dist: furo ; extra == "docs"
56
56
  Requires-Dist: myst-parser ; extra == "docs"
@@ -60,6 +60,7 @@ Requires-Dist: sphinx-rtd-theme ; extra == "docs"
60
60
  Requires-Dist: google-cloud-aiplatform[evaluation]>=1.87.0 ; extra == "eval"
61
61
  Requires-Dist: pandas>=2.2.3 ; extra == "eval"
62
62
  Requires-Dist: tabulate>=0.9.0 ; extra == "eval"
63
+ Requires-Dist: rouge-score>=0.1.2 ; extra == "eval"
63
64
  Requires-Dist: anthropic>=0.43.0 ; extra == "extensions"
64
65
  Requires-Dist: beautifulsoup4>=3.2.2 ; extra == "extensions"
65
66
  Requires-Dist: crewai[tools] ; extra == "extensions" and (python_version>='3.10')
@@ -226,7 +227,7 @@ adk eval \
226
227
  ## 🤝 Contributing
227
228
 
228
229
  We welcome contributions from the community! Whether it's bug reports, feature requests, documentation improvements, or code contributions, please see our
229
- - [General contribution guideline and flow](https://google.github.io/adk-docs/contributing-guide/#questions).
230
+ - [General contribution guideline and flow](https://google.github.io/adk-docs/contributing-guide/).
230
231
  - Then if you want to contribute code, please read [Code Contributing Guidelines](./CONTRIBUTING.md) to get started.
231
232
 
232
233
  ## 📄 License
@@ -1,11 +1,14 @@
1
1
  google/adk/__init__.py,sha256=sSPQK3r0tW8ahl-k8SXkZvMcbiTbGICCtrw6KkFucyg,726
2
2
  google/adk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- google/adk/runners.py,sha256=Tqv3HrulZGBO5YZ9bNbtAihDl-SsPv1SnW5nzUBRfZs,18558
4
- google/adk/telemetry.py,sha256=0ZHioyg4GD-A4xd2TPB_W1uW2_m5kMQGHosPwCu9cIc,8641
5
- google/adk/version.py,sha256=204Nt6sEgRq2nGzXu_YAVnNA2p7LJ05QFNcBial7Gqw,626
3
+ google/adk/runners.py,sha256=L2Ayx5JfTfhXyM4Beldw48tLZc5UlNciglCGQ_sDnHk,19174
4
+ google/adk/telemetry.py,sha256=6E6qf1tSk3J-BE2fTzJTaidiDsgsqTLyIn_8tlDJ34U,8934
5
+ google/adk/version.py,sha256=43TwDogDc_l0V9dFd_lIeA7YUbAJpoqLP99eomhpZ2M,626
6
6
  google/adk/a2a/__init__.py,sha256=Q9FlRO2IfSE9yEaiAYzWkOMBJPCaNYqh4ihcp0t0BQs,574
7
7
  google/adk/a2a/converters/__init__.py,sha256=Q9FlRO2IfSE9yEaiAYzWkOMBJPCaNYqh4ihcp0t0BQs,574
8
- google/adk/a2a/converters/part_converter.py,sha256=lZXhEnnFGSbxJDDo_mClGISIiRxk9Rv0bwC0NtYS4Hw,5286
8
+ google/adk/a2a/converters/event_converter.py,sha256=8n6_j7mkxCZlDMPhEfzG6THCCA0qSqV3PN0s3C-AT60,11183
9
+ google/adk/a2a/converters/part_converter.py,sha256=JAkL6x7zPhKvLNDSSacpdQl2v0YwzVZS804--q1yi3U,5374
10
+ google/adk/a2a/converters/request_converter.py,sha256=k5Bw5P05EwIFMg7TAKXiZyDFTCEC9dSgkBXhyJP0Vn4,2758
11
+ google/adk/a2a/converters/utils.py,sha256=cpnIrjc14Y8skFEuSKueiy-juYe4dy0-6gVv1nRuJOE,2049
9
12
  google/adk/agents/__init__.py,sha256=WsCiBlvI-ISWrcntboo_sULvVJNwLNxXCe42UGPLKdY,1041
10
13
  google/adk/agents/active_streaming_tool.py,sha256=vFuh_PkdF5EyyneBBJ7Al8ojeTIR3OtsxLjckr9DbXE,1194
11
14
  google/adk/agents/base_agent.py,sha256=fCwAcR12IVVx8qXWGVf773zOmQEKnXDPwmoYYQwUfR4,12168
@@ -13,7 +16,7 @@ google/adk/agents/callback_context.py,sha256=BVDcgrJEWEPEf9ZzWFyhUFcZJ2ECm8XFStg
13
16
  google/adk/agents/invocation_context.py,sha256=ytnZvN869zSLqC1eKXVwv_NDuyQ3Z2EV4tlbJ-0r2Ls,6345
14
17
  google/adk/agents/langgraph_agent.py,sha256=1MI-jsLRncMy4mpjSsGU5FL6zbK-k4FxiupnujgYVNE,4287
15
18
  google/adk/agents/live_request_queue.py,sha256=AudgMP6VfGjNgH7VeQamKJ6Yo2n5eIlikcscoOqprNU,2109
16
- google/adk/agents/llm_agent.py,sha256=LMpJeLW18ZdajNFYnhEBt2RD01oOGLXU4RpjcT4WuLs,16660
19
+ google/adk/agents/llm_agent.py,sha256=voivWnvgJ_j09QqDcXaaa-wNxMkbOMj_kHJwceXupmM,16718
17
20
  google/adk/agents/loop_agent.py,sha256=BRGCwSopdOX_x7oUTnUe7udS9GpV0zOn5vXf1USsCf0,1935
18
21
  google/adk/agents/parallel_agent.py,sha256=Wv-ODUKQp_FABo7Cbhcc8-woqgiD5B649OigAMD6DNo,3525
19
22
  google/adk/agents/readonly_context.py,sha256=MyRXiSTT8kFheq7VYQjXow6mwYpdZim4PgI2iKT-XIo,1659
@@ -22,19 +25,20 @@ google/adk/agents/sequential_agent.py,sha256=g_9mR4cMHiLwqtztclAUdnjCm0-u4nVpTpG
22
25
  google/adk/agents/transcription_entry.py,sha256=HL8j2xvtdrcP4_uxy55ASCmLFrc8KchvV2eoGnwZnqc,1178
23
26
  google/adk/artifacts/__init__.py,sha256=D5DYoVYR0tOd2E_KwRu0Cp7yvV25KGuIQmQeCRDyK-k,846
24
27
  google/adk/artifacts/base_artifact_service.py,sha256=H-t5nckLTfr330utj8vxjH45z81h_h_c9EZzd3A76dY,3452
25
- google/adk/artifacts/gcs_artifact_service.py,sha256=-YU4NhZiGMnHHCg00aJWgKq4JWkQLh7EH5OuGusM5bE,5608
28
+ google/adk/artifacts/gcs_artifact_service.py,sha256=W0uKqb3cRHSvnxRbiDQc2vfdBkr-3ihizWs37eRuSVw,5633
26
29
  google/adk/artifacts/in_memory_artifact_service.py,sha256=Iw34Ja89JwGgd3sulbxxk5pVMqzEZJCt4F2m15MC37U,4059
27
30
  google/adk/auth/__init__.py,sha256=GoFe0aZGdp0ExNE4rXNn1RuXLaB64j7Z-2C5e2Hsh8c,908
28
31
  google/adk/auth/auth_credential.py,sha256=F1cMHe_gda5N6RXlyB0IYLLos-Jz-WcNFkIm9SjSiGQ,7012
29
32
  google/adk/auth/auth_handler.py,sha256=aUJrY8fzPvSZwi1rtB_N7fHuHt6DE-H8D8HnkDUCyZQ,6828
30
33
  google/adk/auth/auth_preprocessor.py,sha256=RleOG5I7L1EWVRdX_bC1WtKnt0FDKAcXSSh1RexJqtE,4309
31
34
  google/adk/auth/auth_schemes.py,sha256=dxx9bxjOWoae1fSVxbpaVTwa0I4v76_QJJFEX--1ueA,2260
32
- google/adk/auth/auth_tool.py,sha256=2N-lR5UrgBhwPaErwRusT1MrNDQGb8fuiMHO5x3cmck,3674
35
+ google/adk/auth/auth_tool.py,sha256=m9m_ecoBLjsNpEf34s3hmv5PpWXZbpc4yaV7NgVSOoA,3694
33
36
  google/adk/auth/credential_manager.py,sha256=G5iqpStGHl4wZxkeqNDNljrEt1L_XNSfNVM9mmOqUhg,9503
34
37
  google/adk/auth/oauth2_credential_util.py,sha256=gIb1OUGA4NZRnIeLLk29T_Q9J8ibTxe7-357UhCW3FY,3340
35
38
  google/adk/auth/credential_service/__init__.py,sha256=Q9FlRO2IfSE9yEaiAYzWkOMBJPCaNYqh4ihcp0t0BQs,574
36
39
  google/adk/auth/credential_service/base_credential_service.py,sha256=4SK1UW9NiLNLrc_grpG3xyIPXySGpl0DIv9bTm-onWE,2325
37
40
  google/adk/auth/credential_service/in_memory_credential_service.py,sha256=xXG-3_uq3CU1Eilp8NGBhje0X77ROlAT5BKyJmLLyHg,2161
41
+ google/adk/auth/credential_service/session_state_credential_service.py,sha256=NlOv6Z7A2_7MRLfmnYlBqyZFXvw_H3m_Tk98Ey36k6s,2615
38
42
  google/adk/auth/exchanger/__init__.py,sha256=RHCK_Zg7hXzBKvz2Vrwvbx_cMXWittidIZToszaL3Nc,720
39
43
  google/adk/auth/exchanger/base_credential_exchanger.py,sha256=Uqzs_NhEDmuH5n0U_ES5fHlMSagyYEc5JKu-5GdOC_A,1644
40
44
  google/adk/auth/exchanger/credential_exchanger_registry.py,sha256=Nsk9BMmhFbZsXQwPckm8elXfbk6iIRSrvegR6DpcONo,1855
@@ -48,10 +52,10 @@ google/adk/cli/__main__.py,sha256=gN8rRWlkh_3gLI-oYByxrKpCW9BIfDwrr0YuyisxmHo,64
48
52
  google/adk/cli/agent_graph.py,sha256=Kj5_a4UE1QXmqdRv4i4LI4hKHOrLkBS22Q759F3aRug,9879
49
53
  google/adk/cli/cli.py,sha256=5hbWTJYn9eOd4OVNZvvfJ4WuhuNf1ICBP6j6tb-kSFg,6724
50
54
  google/adk/cli/cli_create.py,sha256=S5sAKIzTjaf3bWoh6nUCSxm9koxdkN0SkTnOtsl0Oqs,8010
51
- google/adk/cli/cli_deploy.py,sha256=qBhp8DbjbV574h73pJ9TppKFxM-_oxojmtMvhlEvp_o,12990
55
+ google/adk/cli/cli_deploy.py,sha256=PbJUo3Fa7MGl6XDYKBGola2oYINb6WxEeHva8W80P1k,13351
52
56
  google/adk/cli/cli_eval.py,sha256=iCSzi1f1ik1rytCeu0GvQqkVnIBekpfx97utHpSXUMI,10208
53
- google/adk/cli/cli_tools_click.py,sha256=5n0sgYV-J3VxuPz3MhS5NTfDnFeYJG3KF3zuJGa_Q-c,27814
54
- google/adk/cli/fast_api.py,sha256=vHD3zlN_KZB_fYFJapbjza_poxv3jhf8Fklnh-9SNms,31867
57
+ google/adk/cli/cli_tools_click.py,sha256=be-j62_qJDgaF4cE2A_ZJLoa-2_vQnkXO5rKS3ozNiw,29582
58
+ google/adk/cli/fast_api.py,sha256=JC0_707uzvDCbiQKMqqzqLZ17F_nJZyH-8abE24W2tY,32964
55
59
  google/adk/cli/browser/adk_favicon.svg,sha256=giyzTZ5Xe6HFU63NgTIZDm35L-RmID-odVFOZ4vMo1M,3132
56
60
  google/adk/cli/browser/index.html,sha256=kXlN0L6yhMrhZajFKaXIAxY-bGJXlD6kUqWl9mElbeM,18492
57
61
  google/adk/cli/browser/main-JAAWEV7F.js,sha256=SK4gb-wUizou4gmqa1Kdfoa6V8uKrYBxU5QHabOI5z8,2640561
@@ -65,7 +69,7 @@ google/adk/cli/utils/agent_loader.py,sha256=Lgde2ZYFYnnKGMNvdRyUl3GOWvaFCOVweNr9
65
69
  google/adk/cli/utils/cleanup.py,sha256=c8kMxpDoNsr49C0O68pptpmy8oce1PjaLtvUy200pWw,1296
66
70
  google/adk/cli/utils/common.py,sha256=brmJF3t-h_HCCS9FQtgqY0Ozk1meeM6a1omwcmsbDBQ,788
67
71
  google/adk/cli/utils/envs.py,sha256=XOEFNiQlgTTyDvaH1FHmgOnPeC3MHsx_DhyOGa-tSAY,1684
68
- google/adk/cli/utils/evals.py,sha256=N-X2_uivb5Nw4SzsC8HlXgkSIpvOVaZbwnV6W2kdlXY,6600
72
+ google/adk/cli/utils/evals.py,sha256=aGBEw7QOnyzmudKiz0JlUTyiLHlMd53r8_RuOqQneTQ,8235
69
73
  google/adk/cli/utils/logs.py,sha256=ARcKVGDi8vHReg1DO7ZGbUBk0RejRMzKf2xHvIWn2xA,2296
70
74
  google/adk/code_executors/__init__.py,sha256=dJ8qAZyj3jm8fNnzQWoWpI7xSVUGhU5qIxbEDpouizc,1641
71
75
  google/adk/code_executors/base_code_executor.py,sha256=QLpgVcFNI5V21U-kVleze24ADeuDKgE3wI7Uui6vUeo,3030
@@ -90,14 +94,15 @@ google/adk/evaluation/eval_sets_manager.py,sha256=j6t-Vf5vDQXPG5cCQ3VTrkWMcmJv-u
90
94
  google/adk/evaluation/evaluation_constants.py,sha256=q3FpEx1PDoj0VjVwHDZ6U-LNZ1_uApM03d2vOevvHA4,857
91
95
  google/adk/evaluation/evaluation_generator.py,sha256=jbE_Q0bdIJ94vUfyZlblzJK6UsfjzkpdZG1Pp8ge75A,8188
92
96
  google/adk/evaluation/evaluator.py,sha256=ACERS1jNCcqPPoI84qt68-B_aAr8o729cd2Qmb-FrXE,1673
97
+ google/adk/evaluation/final_response_match_v1.py,sha256=PamGQc3WwIYR1RU6Qhld4PbEFOSEA7LAK81nZVm2UCk,3768
93
98
  google/adk/evaluation/gcs_eval_set_results_manager.py,sha256=XS4kcXgiTjuLPvfA2MSR6dZDo-8PZTQTilvOFW5jo64,4444
94
- google/adk/evaluation/gcs_eval_sets_manager.py,sha256=77dTIDrlXz_7ivi0smVr2oEi3qDxqHHpVVX5FT1aTdI,7431
99
+ google/adk/evaluation/gcs_eval_sets_manager.py,sha256=K1zHJeKi8oIvuBMpCsfMEJRu20B5F6_pgN_bpHi0NCA,7559
95
100
  google/adk/evaluation/local_eval_set_results_manager.py,sha256=eLZz95r0Z-xyT1m0MxdmLxSjGzmmycLWclfsGn1aVzM,3703
96
101
  google/adk/evaluation/local_eval_sets_manager.py,sha256=CjT3cLEZfvra7QXzdPY3YaddjkQFFgupwdlRR_uOWP8,10414
97
- google/adk/evaluation/response_evaluator.py,sha256=k9uad2FmlO1rnRul_nDFO6lk_16vm7l320hquVgUXhQ,8398
102
+ google/adk/evaluation/response_evaluator.py,sha256=_tnErq0WQI7DjhrOSmgh3AkUrbAosRzOPCJIxvwCvHc,8864
98
103
  google/adk/evaluation/trajectory_evaluator.py,sha256=HdQ2W2Qwy-08o7H2wtFNYFTlF7uphi9LeD03nHXeIVY,8235
99
104
  google/adk/events/__init__.py,sha256=Lh0rh6RAt5DIxbwBUajjGMbB6bZW5K4Qli6PD_Jv74Q,688
100
- google/adk/events/event.py,sha256=LZal8tipy5mCln4WLYatFQ3yWRL5QDB30oBK0z7aczM,4719
105
+ google/adk/events/event.py,sha256=AFb6CibQCztO1fWGqz4OKB7Z5dusm7CRl91p8SdBB9M,4793
101
106
  google/adk/events/event_actions.py,sha256=-f_WTN8eQdhAj2celU5AoynGlBfplj3nia9C7OrT534,2275
102
107
  google/adk/examples/__init__.py,sha256=LCuLG_SOF9OAV3vc1tHAaBAOeQEZl0MFHC2LGmZ6e-A,851
103
108
  google/adk/examples/base_example_provider.py,sha256=tood7EnGil4pM3GPRTsSUby2TiAfstBv0x1v8djpgwQ,1074
@@ -114,16 +119,17 @@ google/adk/flows/llm_flows/audio_transcriber.py,sha256=x0LeOZLDPVPzPCYNYA3JyAEAj
114
119
  google/adk/flows/llm_flows/auto_flow.py,sha256=CnuFelyZhB_ns4U_5_dW0x_KQlzu02My7qWcB4XBCYY,1714
115
120
  google/adk/flows/llm_flows/base_llm_flow.py,sha256=uGqJ-b_Xygqgae1dndNh9tgTaj3luMKq3Qj4_jDf278,22660
116
121
  google/adk/flows/llm_flows/basic.py,sha256=263pfk6PIqKO-7BWo--bsBbpZJ8u5R9OK__WhpBgIbM,2848
117
- google/adk/flows/llm_flows/contents.py,sha256=bAklBI8YWctd0pGQCRwCVDqDxASiCNV_t8tJChPLbFg,13055
118
- google/adk/flows/llm_flows/functions.py,sha256=NRzs9MfqCI8JjKBJCPk3iO_xXn0PzaBfy7NjQrdVsUU,17512
122
+ google/adk/flows/llm_flows/contents.py,sha256=OMxxPcI_hwQ0OQCrBVBeKukVfdeefBhD3YJQP0C9B2M,14638
123
+ google/adk/flows/llm_flows/functions.py,sha256=nD74YrS2GSR4yr6erR_vpw7lE7dyx9zDPUFKmY1Uvic,18410
119
124
  google/adk/flows/llm_flows/identity.py,sha256=X4CRg12NvnopmydU9gbFJI4lW1_otN-w_GOAuPvKrXo,1651
120
125
  google/adk/flows/llm_flows/instructions.py,sha256=sO2dQ5hn6ybjXs2fWYWvEFVtACdpiiP0yKf9eNVjhhM,2879
121
126
  google/adk/flows/llm_flows/single_flow.py,sha256=gC677SxxammKx1XkZBzUdgBjDzeymKRcRQQxFGIur8Y,1904
122
- google/adk/memory/__init__.py,sha256=8LHs0wpz5bVi0kChzERh9oMCjKh4e6Nmfe_821wF7QQ,1148
127
+ google/adk/memory/__init__.py,sha256=N_K_03mtTC2Hl1biXdbkgrbdJVvF7EhKs6jgJMAsEpo,1250
123
128
  google/adk/memory/_utils.py,sha256=6hba7T4ZJ00K3tX1kLuiuiN02E844XtfR1lFEGa-AaM,797
124
129
  google/adk/memory/base_memory_service.py,sha256=KlpjlgZopqKM19QP9X0eKLBSVG10hHjD4qgEEfwdb9k,1987
125
130
  google/adk/memory/in_memory_memory_service.py,sha256=S8mxOuosgzAFyl7ZoSjIo-vWY_3mhRMf2a13YO8MObo,3024
126
131
  google/adk/memory/memory_entry.py,sha256=NSISrQHX6sww0J7wXP-eqxkGAkF2irqCU_UH-ziWACc,1092
132
+ google/adk/memory/vertex_ai_memory_bank_service.py,sha256=Nr0R37EM3uFzpQAC5g7aDogMljgn6MIIyoTXC4qrZYU,4711
127
133
  google/adk/memory/vertex_ai_rag_memory_service.py,sha256=mNilkk4VtFQj6QYyX-DCPJ4kddKRgo68I3XfVhG8B14,6817
128
134
  google/adk/models/__init__.py,sha256=jnI2M8tz4IN_WOUma4PIEdGOBDIotXcQpseH6P1VgZU,929
129
135
  google/adk/models/anthropic_llm.py,sha256=NcsQ8IfC1vM_qGQexmiM8vRFeTpIHOYqXsXYbysou80,8135
@@ -131,7 +137,7 @@ google/adk/models/base_llm.py,sha256=85Oo0U0zyZK3iJZz9XVovnCvXNgVQ9Dvcf80VecWTNo
131
137
  google/adk/models/base_llm_connection.py,sha256=y_pNFA2xlwnsP6dt7BfoezfzoZ5gSZJnTogd7o7DodI,2254
132
138
  google/adk/models/gemini_llm_connection.py,sha256=M0dXHcVgDaPB97n6DWFjGjqwhuJkJMcbDYP9drK052U,7349
133
139
  google/adk/models/google_llm.py,sha256=ZaZh9FckWGscHZ7y0BVyt7PETSdlJcSTkQu4mV2Km5o,11926
134
- google/adk/models/lite_llm.py,sha256=qRcFAPyaYKMwrOnqt4zrp8UL_ZEwOdyFBGHrTXaHRdU,23181
140
+ google/adk/models/lite_llm.py,sha256=kNpVDjcuagwdmiA9QrXnHPzToI6oH9ms53kA0OL5wVM,23445
135
141
  google/adk/models/llm_request.py,sha256=nJdE_mkAwa_QNkl7FJdw5Ys748vM5RqaRYiZtke-mDA,3008
136
142
  google/adk/models/llm_response.py,sha256=tQOfXCnJoiGp-Oxp1_lAKokx0klAzbwKklngKg4ExgQ,4563
137
143
  google/adk/models/registry.py,sha256=5VQyHMEaMbVp9TdscTqDAOo9uXB85zjrbMrT3zQElLE,2542
@@ -150,7 +156,7 @@ google/adk/sessions/database_session_service.py,sha256=zPqH1pY_euvSA9I3f3BTfvBxL
150
156
  google/adk/sessions/in_memory_session_service.py,sha256=5mU882L-0zobyWoldAkuBMmGKTQV_XlhL0A2_OySPzU,9080
151
157
  google/adk/sessions/session.py,sha256=fwJ3D4rUQ1N5cLMpFrE_BstEz6Ct637FlF52MfkxZCk,1861
152
158
  google/adk/sessions/state.py,sha256=con9G5nfJpa95J5LKTAnZ3KMPkXdaTbrdwRdKg6d6B4,2299
153
- google/adk/sessions/vertex_ai_session_service.py,sha256=BvYXkP4zWdJ9WA65TWpmbzOMzGs5jwMprSm7DLgVmYE,12870
159
+ google/adk/sessions/vertex_ai_session_service.py,sha256=WHm8kQoWYyP3cQbnx1f7mm6X655ypbtAwOwAdQ5zELQ,14893
154
160
  google/adk/tools/__init__.py,sha256=_5JFmTAPBmXlOY8CRaYJlZubvwxoxhi2esXusovv5ME,1752
155
161
  google/adk/tools/_automatic_function_calling_util.py,sha256=p5An_BklKDo1w5_DigZGgf0p023lIDKPaZPS_-iJN6k,11100
156
162
  google/adk/tools/_forwarding_artifact_service.py,sha256=MHOfc8ntSuHLcA4jp218FP0k0qWAu3-6MSQCNWZ__S4,3022
@@ -191,13 +197,13 @@ google/adk/tools/application_integration_tool/integration_connector_tool.py,sha2
191
197
  google/adk/tools/application_integration_tool/clients/connections_client.py,sha256=zspLmrx2DvOg2r5B2DWxeK3fKdQovIu8t3z5Xip7AGo,31428
192
198
  google/adk/tools/application_integration_tool/clients/integration_client.py,sha256=hLM8n97hsmvgYBtmF_KMYwr_mnlhfPvsDXzE2cI5SqE,10654
193
199
  google/adk/tools/bigquery/__init__.py,sha256=tkXX7IoTzXgZjv82fjqa0_TTufxijiIr6nPsaqH1o5Y,1446
194
- google/adk/tools/bigquery/bigquery_credentials.py,sha256=cfySW5x25M3hDlUdLN0j71PfCrQOZFfB35pOsQYxxRM,7844
195
- google/adk/tools/bigquery/bigquery_tool.py,sha256=uZEj_CGNsFrt23RbCF-9Hroru6mghxgzc_FvAgT11o8,4210
200
+ google/adk/tools/bigquery/bigquery_credentials.py,sha256=cs610IowXAhpwovRpMjspPQ6Bb9TB23IBqdUorHNQzI,8690
201
+ google/adk/tools/bigquery/bigquery_tool.py,sha256=Hvw5ijtX9FGJfUxvBCTL51JxAS4-G5wFtewMUcSACxk,4208
196
202
  google/adk/tools/bigquery/bigquery_toolset.py,sha256=4eIj_bbUeC4bhhNN9RA8i5661Xi3qM9pqfYoN4XBQME,2831
197
- google/adk/tools/bigquery/client.py,sha256=5kL2zVGj3bgo8X-G1ha7zdK6UrWc0sY_qq96cODELD8,1168
203
+ google/adk/tools/bigquery/client.py,sha256=CUFsxf6Ma5dTfofk1L888EnUfo2zlI6-_NFs-v3Hcr0,1166
198
204
  google/adk/tools/bigquery/config.py,sha256=GNiPUX4sVKg7UfoJ-xo8RCReYym4qF3blMUzY9O5CRE,1390
199
- google/adk/tools/bigquery/metadata_tool.py,sha256=1WOcI60oSTpwsuzB1s-__hNKZE0x0csuMdV7w6V0jYI,8265
200
- google/adk/tools/bigquery/query_tool.py,sha256=oTAb1_bFbzkG46dEYsnQfgyQxwaHotR1OSjvIqC62XM,6158
205
+ google/adk/tools/bigquery/metadata_tool.py,sha256=BZ5VPXERZgVJDp1VqT6vSmFkDYPbo0bXBZsE5RgL3XY,8263
206
+ google/adk/tools/bigquery/query_tool.py,sha256=-dsqZbuQxwYb6uCHJ5_-6Yt94QlvQ4ktDov6JKdsnvc,6156
201
207
  google/adk/tools/google_api_tool/__init__.py,sha256=a_Bco5SyTQ89yb1t6Bs6NQrTsJgV22mn1quRNygVZXw,1385
202
208
  google/adk/tools/google_api_tool/google_api_tool.py,sha256=vDA7YnDZCl8-ucBvIzXS-uJWX1m2KY_csTz5M3nw_Ys,2029
203
209
  google/adk/tools/google_api_tool/google_api_toolset.py,sha256=M27lSCXOka4yHGGH50UVJvoEvZbWT-QBVaR1tW018tY,3773
@@ -233,8 +239,8 @@ google/adk/utils/__init__.py,sha256=Q9FlRO2IfSE9yEaiAYzWkOMBJPCaNYqh4ihcp0t0BQs,
233
239
  google/adk/utils/feature_decorator.py,sha256=DzGHMTStf4-S9BNiA4EqcCJbrdKijhgeSUSPdzM44H8,5048
234
240
  google/adk/utils/instructions_utils.py,sha256=al9Z-P8qOrbxNju8cqkeH7qRg0oQH7hfmvTG-0oSAQk,3996
235
241
  google/adk/utils/variant_utils.py,sha256=u9IuOn2aXG3ibDYshgLoogBXqH9Gd84ixArQoeLQiE8,1463
236
- google_adk-1.4.1.dist-info/entry_points.txt,sha256=zL9CU-6V2yQ2oc5lrcyj55ROHrpiIePsvQJ4H6SL-zI,43
237
- google_adk-1.4.1.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
238
- google_adk-1.4.1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
239
- google_adk-1.4.1.dist-info/METADATA,sha256=tt1qvxkFHQe0DgLQdGdiBikrs9VHhSAtbJqyT4i7rHQ,9981
240
- google_adk-1.4.1.dist-info/RECORD,,
242
+ google_adk-1.5.0.dist-info/entry_points.txt,sha256=zL9CU-6V2yQ2oc5lrcyj55ROHrpiIePsvQJ4H6SL-zI,43
243
+ google_adk-1.5.0.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
244
+ google_adk-1.5.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
245
+ google_adk-1.5.0.dist-info/METADATA,sha256=nEiEm0DXdaSUewv4RkbxJvQDRR_836UNO7gaj7iuEYs,10023
246
+ google_adk-1.5.0.dist-info/RECORD,,