google-adk 1.1.0__py3-none-any.whl → 1.1.1__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.
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- """BigQuery Tools. (Experimental)
15
+ """BigQuery Tools (Experimental).
16
16
 
17
17
  BigQuery Tools under this module are hand crafted and customized while the tools
18
18
  under google.adk.tools.google_api_tool are auto generated based on API
@@ -26,3 +26,13 @@ definition. The rationales to have customized tool are:
26
26
  4. We want to provide extra access guardrails in those tools. For example,
27
27
  execute_sql can't arbitrarily mutate existing data.
28
28
  """
29
+
30
+ from .bigquery_credentials import BigQueryCredentialsConfig
31
+ from .bigquery_tool import BigQueryTool
32
+ from .bigquery_toolset import BigQueryToolset
33
+
34
+ __all__ = [
35
+ "BigQueryTool",
36
+ "BigQueryToolset",
37
+ "BigQueryCredentialsConfig",
38
+ ]
@@ -14,6 +14,7 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
+ import json
17
18
  from typing import List
18
19
  from typing import Optional
19
20
 
@@ -121,7 +122,7 @@ class BigQueryCredentialsManager:
121
122
  creds_json = tool_context.state.get(BIGQUERY_TOKEN_CACHE_KEY, None)
122
123
  creds = (
123
124
  Credentials.from_authorized_user_info(
124
- creds_json, self.credentials_config.scopes
125
+ json.loads(creds_json), self.credentials_config.scopes
125
126
  )
126
127
  if creds_json
127
128
  else None
@@ -0,0 +1,86 @@
1
+ # Copyright 2025 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ from typing import List
18
+ from typing import Optional
19
+ from typing import Union
20
+
21
+ from google.adk.agents.readonly_context import ReadonlyContext
22
+ from typing_extensions import override
23
+
24
+ from . import metadata_tool
25
+ from . import query_tool
26
+ from ...tools.base_tool import BaseTool
27
+ from ...tools.base_toolset import BaseToolset
28
+ from ...tools.base_toolset import ToolPredicate
29
+ from .bigquery_credentials import BigQueryCredentialsConfig
30
+ from .bigquery_tool import BigQueryTool
31
+
32
+
33
+ class BigQueryToolset(BaseToolset):
34
+ """BigQuery Toolset contains tools for interacting with BigQuery data and metadata."""
35
+
36
+ def __init__(
37
+ self,
38
+ *,
39
+ tool_filter: Optional[Union[ToolPredicate, List[str]]] = None,
40
+ credentials_config: Optional[BigQueryCredentialsConfig] = None,
41
+ ):
42
+ self._credentials_config = credentials_config
43
+ self.tool_filter = tool_filter
44
+
45
+ def _is_tool_selected(
46
+ self, tool: BaseTool, readonly_context: ReadonlyContext
47
+ ) -> bool:
48
+ if self.tool_filter is None:
49
+ return True
50
+
51
+ if isinstance(self.tool_filter, ToolPredicate):
52
+ return self.tool_filter(tool, readonly_context)
53
+
54
+ if isinstance(self.tool_filter, list):
55
+ return tool.name in self.tool_filter
56
+
57
+ return False
58
+
59
+ @override
60
+ async def get_tools(
61
+ self, readonly_context: Optional[ReadonlyContext] = None
62
+ ) -> List[BaseTool]:
63
+ """Get tools from the toolset."""
64
+ all_tools = [
65
+ BigQueryTool(
66
+ func=func,
67
+ credentials=self._credentials_config,
68
+ )
69
+ for func in [
70
+ metadata_tool.get_dataset_info,
71
+ metadata_tool.get_table_info,
72
+ metadata_tool.list_dataset_ids,
73
+ metadata_tool.list_table_ids,
74
+ query_tool.execute_sql,
75
+ ]
76
+ ]
77
+
78
+ return [
79
+ tool
80
+ for tool in all_tools
81
+ if self._is_tool_selected(tool, readonly_context)
82
+ ]
83
+
84
+ @override
85
+ async def close(self):
86
+ pass
@@ -0,0 +1,33 @@
1
+ # Copyright 2025 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ import google.api_core.client_info
18
+ from google.cloud import bigquery
19
+ from google.oauth2.credentials import Credentials
20
+
21
+ USER_AGENT = "adk-bigquery-tool"
22
+
23
+
24
+ def get_bigquery_client(*, credentials: Credentials) -> bigquery.Client:
25
+ """Get a BigQuery client."""
26
+
27
+ client_info = google.api_core.client_info.ClientInfo(user_agent=USER_AGENT)
28
+
29
+ bigquery_client = bigquery.Client(
30
+ credentials=credentials, client_info=client_info
31
+ )
32
+
33
+ return bigquery_client
@@ -0,0 +1,249 @@
1
+ # Copyright 2025 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from google.cloud import bigquery
16
+ from google.oauth2.credentials import Credentials
17
+
18
+ from ...tools.bigquery import client
19
+
20
+
21
+ def list_dataset_ids(project_id: str, credentials: Credentials) -> list[str]:
22
+ """List BigQuery dataset ids in a Google Cloud project.
23
+
24
+ Args:
25
+ project_id (str): The Google Cloud project id.
26
+ credentials (Credentials): The credentials to use for the request.
27
+
28
+ Returns:
29
+ list[str]: List of the BigQuery dataset ids present in the project.
30
+
31
+ Examples:
32
+ >>> list_dataset_ids("bigquery-public-data")
33
+ ['america_health_rankings',
34
+ 'american_community_survey',
35
+ 'aml_ai_input_dataset',
36
+ 'austin_311',
37
+ 'austin_bikeshare',
38
+ 'austin_crime',
39
+ 'austin_incidents',
40
+ 'austin_waste',
41
+ 'baseball',
42
+ 'bbc_news']
43
+ """
44
+ try:
45
+ bq_client = client.get_bigquery_client(credentials=credentials)
46
+
47
+ datasets = []
48
+ for dataset in bq_client.list_datasets(project_id):
49
+ datasets.append(dataset.dataset_id)
50
+ return datasets
51
+ except Exception as ex:
52
+ return {
53
+ "status": "ERROR",
54
+ "error_details": str(ex),
55
+ }
56
+
57
+
58
+ def get_dataset_info(
59
+ project_id: str, dataset_id: str, credentials: Credentials
60
+ ) -> dict:
61
+ """Get metadata information about a BigQuery dataset.
62
+
63
+ Args:
64
+ project_id (str): The Google Cloud project id containing the dataset.
65
+ dataset_id (str): The BigQuery dataset id.
66
+ credentials (Credentials): The credentials to use for the request.
67
+
68
+ Returns:
69
+ dict: Dictionary representing the properties of the dataset.
70
+
71
+ Examples:
72
+ >>> get_dataset_info("bigquery-public-data", "penguins")
73
+ {
74
+ "kind": "bigquery#dataset",
75
+ "etag": "PNC5907iQbzeVcAru/2L3A==",
76
+ "id": "bigquery-public-data:ml_datasets",
77
+ "selfLink":
78
+ "https://bigquery.googleapis.com/bigquery/v2/projects/bigquery-public-data/datasets/ml_datasets",
79
+ "datasetReference": {
80
+ "datasetId": "ml_datasets",
81
+ "projectId": "bigquery-public-data"
82
+ },
83
+ "access": [
84
+ {
85
+ "role": "OWNER",
86
+ "groupByEmail": "cloud-datasets-eng@google.com"
87
+ },
88
+ {
89
+ "role": "READER",
90
+ "iamMember": "allUsers"
91
+ },
92
+ {
93
+ "role": "READER",
94
+ "groupByEmail": "bqml-eng@google.com"
95
+ }
96
+ ],
97
+ "creationTime": "1553208775542",
98
+ "lastModifiedTime": "1686338918114",
99
+ "location": "US",
100
+ "type": "DEFAULT",
101
+ "maxTimeTravelHours": "168"
102
+ }
103
+ """
104
+ try:
105
+ bq_client = client.get_bigquery_client(credentials=credentials)
106
+ dataset = bq_client.get_dataset(
107
+ bigquery.DatasetReference(project_id, dataset_id)
108
+ )
109
+ return dataset.to_api_repr()
110
+ except Exception as ex:
111
+ return {
112
+ "status": "ERROR",
113
+ "error_details": str(ex),
114
+ }
115
+
116
+
117
+ def list_table_ids(
118
+ project_id: str, dataset_id: str, credentials: Credentials
119
+ ) -> list[str]:
120
+ """List table ids in a BigQuery dataset.
121
+
122
+ Args:
123
+ project_id (str): The Google Cloud project id containing the dataset.
124
+ dataset_id (str): The BigQuery dataset id.
125
+ credentials (Credentials): The credentials to use for the request.
126
+
127
+ Returns:
128
+ list[str]: List of the tables ids present in the dataset.
129
+
130
+ Examples:
131
+ >>> list_table_ids("bigquery-public-data", "ml_datasets")
132
+ ['census_adult_income',
133
+ 'credit_card_default',
134
+ 'holidays_and_events_for_forecasting',
135
+ 'iris',
136
+ 'penguins',
137
+ 'ulb_fraud_detection']
138
+ """
139
+ try:
140
+ bq_client = client.get_bigquery_client(credentials=credentials)
141
+
142
+ tables = []
143
+ for table in bq_client.list_tables(
144
+ bigquery.DatasetReference(project_id, dataset_id)
145
+ ):
146
+ tables.append(table.table_id)
147
+ return tables
148
+ except Exception as ex:
149
+ return {
150
+ "status": "ERROR",
151
+ "error_details": str(ex),
152
+ }
153
+
154
+
155
+ def get_table_info(
156
+ project_id: str, dataset_id: str, table_id: str, credentials: Credentials
157
+ ) -> dict:
158
+ """Get metadata information about a BigQuery table.
159
+
160
+ Args:
161
+ project_id (str): The Google Cloud project id containing the dataset.
162
+ dataset_id (str): The BigQuery dataset id containing the table.
163
+ table_id (str): The BigQuery table id.
164
+ credentials (Credentials): The credentials to use for the request.
165
+
166
+ Returns:
167
+ dict: Dictionary representing the properties of the table.
168
+
169
+ Examples:
170
+ >>> get_table_info("bigquery-public-data", "ml_datasets", "penguins")
171
+ {
172
+ "kind": "bigquery#table",
173
+ "etag": "X0ZkRohSGoYvWemRYEgOHA==",
174
+ "id": "bigquery-public-data:ml_datasets.penguins",
175
+ "selfLink":
176
+ "https://bigquery.googleapis.com/bigquery/v2/projects/bigquery-public-data/datasets/ml_datasets/tables/penguins",
177
+ "tableReference": {
178
+ "projectId": "bigquery-public-data",
179
+ "datasetId": "ml_datasets",
180
+ "tableId": "penguins"
181
+ },
182
+ "schema": {
183
+ "fields": [
184
+ {
185
+ "name": "species",
186
+ "type": "STRING",
187
+ "mode": "REQUIRED"
188
+ },
189
+ {
190
+ "name": "island",
191
+ "type": "STRING",
192
+ "mode": "NULLABLE"
193
+ },
194
+ {
195
+ "name": "culmen_length_mm",
196
+ "type": "FLOAT",
197
+ "mode": "NULLABLE"
198
+ },
199
+ {
200
+ "name": "culmen_depth_mm",
201
+ "type": "FLOAT",
202
+ "mode": "NULLABLE"
203
+ },
204
+ {
205
+ "name": "flipper_length_mm",
206
+ "type": "FLOAT",
207
+ "mode": "NULLABLE"
208
+ },
209
+ {
210
+ "name": "body_mass_g",
211
+ "type": "FLOAT",
212
+ "mode": "NULLABLE"
213
+ },
214
+ {
215
+ "name": "sex",
216
+ "type": "STRING",
217
+ "mode": "NULLABLE"
218
+ }
219
+ ]
220
+ },
221
+ "numBytes": "28947",
222
+ "numLongTermBytes": "28947",
223
+ "numRows": "344",
224
+ "creationTime": "1619804743188",
225
+ "lastModifiedTime": "1634584675234",
226
+ "type": "TABLE",
227
+ "location": "US",
228
+ "numTimeTravelPhysicalBytes": "0",
229
+ "numTotalLogicalBytes": "28947",
230
+ "numActiveLogicalBytes": "0",
231
+ "numLongTermLogicalBytes": "28947",
232
+ "numTotalPhysicalBytes": "5350",
233
+ "numActivePhysicalBytes": "0",
234
+ "numLongTermPhysicalBytes": "5350",
235
+ "numCurrentPhysicalBytes": "5350"
236
+ }
237
+ """
238
+ try:
239
+ bq_client = client.get_bigquery_client(credentials=credentials)
240
+ return bq_client.get_table(
241
+ bigquery.TableReference(
242
+ bigquery.DatasetReference(project_id, dataset_id), table_id
243
+ )
244
+ ).to_api_repr()
245
+ except Exception as ex:
246
+ return {
247
+ "status": "ERROR",
248
+ "error_details": str(ex),
249
+ }
@@ -0,0 +1,76 @@
1
+ # Copyright 2025 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from google.oauth2.credentials import Credentials
16
+
17
+ from ...tools.bigquery import client
18
+
19
+ MAX_DOWNLOADED_QUERY_RESULT_ROWS = 50
20
+
21
+
22
+ def execute_sql(project_id: str, query: str, credentials: Credentials) -> dict:
23
+ """Run a BigQuery SQL query in the project and return the result.
24
+
25
+ Args:
26
+ project_id (str): The GCP project id in which the query should be
27
+ executed.
28
+ query (str): The BigQuery SQL query to be executed.
29
+ credentials (Credentials): The credentials to use for the request.
30
+
31
+ Returns:
32
+ dict: Dictionary representing the result of the query.
33
+ If the result contains the key "result_is_likely_truncated" with
34
+ value True, it means that there may be additional rows matching the
35
+ query not returned in the result.
36
+
37
+ Examples:
38
+ >>> execute_sql("bigframes-dev",
39
+ ... "SELECT island, COUNT(*) AS population "
40
+ ... "FROM bigquery-public-data.ml_datasets.penguins GROUP BY island")
41
+ {
42
+ "rows": [
43
+ {
44
+ "island": "Dream",
45
+ "population": 124
46
+ },
47
+ {
48
+ "island": "Biscoe",
49
+ "population": 168
50
+ },
51
+ {
52
+ "island": "Torgersen",
53
+ "population": 52
54
+ }
55
+ ]
56
+ }
57
+ """
58
+
59
+ try:
60
+ bq_client = client.get_bigquery_client(credentials=credentials)
61
+ row_iterator = bq_client.query_and_wait(
62
+ query, project=project_id, max_results=MAX_DOWNLOADED_QUERY_RESULT_ROWS
63
+ )
64
+ rows = [{key: val for key, val in row.items()} for row in row_iterator]
65
+ result = {"rows": rows}
66
+ if (
67
+ MAX_DOWNLOADED_QUERY_RESULT_ROWS is not None
68
+ and len(rows) == MAX_DOWNLOADED_QUERY_RESULT_ROWS
69
+ ):
70
+ result["result_is_likely_truncated"] = True
71
+ return result
72
+ except Exception as ex:
73
+ return {
74
+ "status": "ERROR",
75
+ "error_details": str(ex),
76
+ }
google/adk/version.py CHANGED
@@ -13,4 +13,4 @@
13
13
  # limitations under the License.
14
14
 
15
15
  # version: date+base_cl
16
- __version__ = "1.1.0"
16
+ __version__ = "1.1.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-adk
3
- Version: 1.1.0
3
+ Version: 1.1.1
4
4
  Summary: Agent Development Kit
5
5
  Author-email: Google LLC <googleapis-packages@google.com>
6
6
  Requires-Python: >=3.9
@@ -1,7 +1,7 @@
1
1
  google/adk/__init__.py,sha256=sSPQK3r0tW8ahl-k8SXkZvMcbiTbGICCtrw6KkFucyg,726
2
2
  google/adk/runners.py,sha256=GXlJjARTSZgYsu6W5MhrZgMZZqit-elqK5qdpLs8rU0,18177
3
3
  google/adk/telemetry.py,sha256=vR3mXZd3E4k-QpHcRnQ92ng0nDOr1sVEF_Fe6f33E0w,6446
4
- google/adk/version.py,sha256=9tbqP-cwmLTXNtUiBngLee9-vt7BdAO2rFOaM7L_Bhc,621
4
+ google/adk/version.py,sha256=-t-FxnOMrGz1DfJCH0__Oi1hRHmkdgR1V28ZJjCYjfA,621
5
5
  google/adk/agents/__init__.py,sha256=WsCiBlvI-ISWrcntboo_sULvVJNwLNxXCe42UGPLKdY,1041
6
6
  google/adk/agents/active_streaming_tool.py,sha256=vFuh_PkdF5EyyneBBJ7Al8ojeTIR3OtsxLjckr9DbXE,1194
7
7
  google/adk/agents/base_agent.py,sha256=3OBJWLnRsnWuBPA2zLYo-6Yhs1bFDJGKHoa8_RPgndg,12271
@@ -157,9 +157,13 @@ google/adk/tools/application_integration_tool/application_integration_toolset.py
157
157
  google/adk/tools/application_integration_tool/integration_connector_tool.py,sha256=gKK4nZho3_ZDjmc7MssWA_tbQpNM_ug3SkZjv20Yv1w,7552
158
158
  google/adk/tools/application_integration_tool/clients/connections_client.py,sha256=xE6XlHRw3ILWLBY1ruv37CEzmrLZ77iiu3hf3v6CrD4,31108
159
159
  google/adk/tools/application_integration_tool/clients/integration_client.py,sha256=hLM8n97hsmvgYBtmF_KMYwr_mnlhfPvsDXzE2cI5SqE,10654
160
- google/adk/tools/bigquery/__init__.py,sha256=f9UsBJT2aofD45GHvGog0sLIm5ruzg7i45e9B-thXmE,1208
161
- google/adk/tools/bigquery/bigquery_credentials.py,sha256=lTXvYlAl6ursnRYHA3EDpT7LchAg5ftqCQNc0HAnLxo,7560
160
+ google/adk/tools/bigquery/__init__.py,sha256=tkXX7IoTzXgZjv82fjqa0_TTufxijiIr6nPsaqH1o5Y,1446
161
+ google/adk/tools/bigquery/bigquery_credentials.py,sha256=3XvDdd9FB6aLrcUo2Zec42da-eS1hOg0fSkXy1mBfak,7584
162
162
  google/adk/tools/bigquery/bigquery_tool.py,sha256=PaGfJFz-LLkNxtFEbfHdu9x0ANeIQMKH6zk0sfKzDao,3713
163
+ google/adk/tools/bigquery/bigquery_toolset.py,sha256=R3ujJDQbEthoiqK6OtfquR6Z3tWGtBz8_Lt2m67qidg,2534
164
+ google/adk/tools/bigquery/client.py,sha256=N2ge1EdHIh8qwTXioOkwLTc48Q2bNAlC9MQz_cUCQBQ,1072
165
+ google/adk/tools/bigquery/metadata_tool.py,sha256=ORDJ9LyzkqkriuCLaoeuS60rjIEn5NSwdl4A3NNm-eo,7669
166
+ google/adk/tools/bigquery/query_tool.py,sha256=0AVFSE_zP-7j1FMQ0mSxMZEJZV6Kl3eCdX22no3_MsI,2496
163
167
  google/adk/tools/google_api_tool/__init__.py,sha256=a_Bco5SyTQ89yb1t6Bs6NQrTsJgV22mn1quRNygVZXw,1385
164
168
  google/adk/tools/google_api_tool/google_api_tool.py,sha256=vDA7YnDZCl8-ucBvIzXS-uJWX1m2KY_csTz5M3nw_Ys,2029
165
169
  google/adk/tools/google_api_tool/google_api_toolset.py,sha256=M27lSCXOka4yHGGH50UVJvoEvZbWT-QBVaR1tW018tY,3773
@@ -193,8 +197,8 @@ google/adk/tools/retrieval/llama_index_retrieval.py,sha256=r9HUQXqygxizX0OXz7pJA
193
197
  google/adk/tools/retrieval/vertex_ai_rag_retrieval.py,sha256=aDsQPeScrYoHdLg0Yq7_haT1CJbHDxCPGRyhCy1ET-o,3356
194
198
  google/adk/utils/__init__.py,sha256=Q9FlRO2IfSE9yEaiAYzWkOMBJPCaNYqh4ihcp0t0BQs,574
195
199
  google/adk/utils/instructions_utils.py,sha256=al9Z-P8qOrbxNju8cqkeH7qRg0oQH7hfmvTG-0oSAQk,3996
196
- google_adk-1.1.0.dist-info/entry_points.txt,sha256=zL9CU-6V2yQ2oc5lrcyj55ROHrpiIePsvQJ4H6SL-zI,43
197
- google_adk-1.1.0.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
198
- google_adk-1.1.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
199
- google_adk-1.1.0.dist-info/METADATA,sha256=SDfIKQVzFIOUToDPGbTMw1cTp4B65D6NoA246ftN5ks,9529
200
- google_adk-1.1.0.dist-info/RECORD,,
200
+ google_adk-1.1.1.dist-info/entry_points.txt,sha256=zL9CU-6V2yQ2oc5lrcyj55ROHrpiIePsvQJ4H6SL-zI,43
201
+ google_adk-1.1.1.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
202
+ google_adk-1.1.1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
203
+ google_adk-1.1.1.dist-info/METADATA,sha256=oW3Hd8aDRt4NmL-9FCrCCtO2eePDpB9F0m_GIP90ciM,9529
204
+ google_adk-1.1.1.dist-info/RECORD,,