@@ -162,10 +162,16 @@ def cythonize(*args, **kwargs):
162162
163163milvus_dependency = ['pymilvus>=2.5.10,<3.0.0' ]
164164
165- ml_base = [
165+ # google-adk / OpenTelemetry require protobuf>=5; tensorflow-transform in
166+ # ml_test is pinned to versions that require protobuf<5 on Python 3.10. Those
167+ # cannot be installed together, so ADK deps stay out of ml_test (use ml_base).
168+ ml_base_core = [
166169 'embeddings>=0.0.4' , # 0.0.3 crashes setuptools
167- 'google-adk' ,
168170 'onnxruntime' ,
171+ # onnx 1.12–1.13 cap protobuf in ways that trigger huge backtracking with
172+ # Beam[gcp]+ml_test; pip can fall back to onnx 1.11 sdist which needs cmake.
173+ # 1.14.1+ matches tf2onnx>=1.16 and ships manylinux wheels for py3.10.
174+ 'onnx>=1.14.1,<2' ,
169175 'langchain' ,
170176 'sentence-transformers>=2.2.2' ,
171177 'skl2onnx' ,
@@ -174,11 +180,24 @@ def cythonize(*args, **kwargs):
174180 # tensorflow transitive dep, lower versions not compatible with Python3.10+
175181 'absl-py>=0.12.0' ,
176182 'tensorflow-hub' ,
177- 'tf2onnx' ,
178183 'torch' ,
179184 'transformers' ,
180185]
181186
187+ ml_adk_dependency = [
188+ 'google-adk==1.28.1' ,
189+ # proto-plus<1.24 caps protobuf<5; opentelemetry-proto (via ADK) needs
190+ # protobuf>=5. Scoped here so the main dependency list stays broader.
191+ 'proto-plus>=1.26.1,<2' ,
192+ 'opentelemetry-api==1.37.0' ,
193+ 'opentelemetry-sdk==1.37.0' ,
194+ 'opentelemetry-exporter-otlp-proto-http==1.37.0' ,
195+ # protobuf>=5 (ADK/OTel); tf2onnx 1.16.x pins protobuf~=3.20 only.
196+ 'tf2onnx>=1.17.0,<1.18' ,
197+ ]
198+
199+ ml_base = ml_base_core + ml_adk_dependency
200+
182201
183202def find_by_ext (root_dir , ext ):
184203 for root , _ , files in os .walk (root_dir ):
@@ -392,6 +411,9 @@ def get_portability_package_data():
392411 'packaging>=22.0' ,
393412 'pillow>=12.1.1,<13' ,
394413 'pymongo>=3.8.0,<5.0.0' ,
414+ # ADK / OpenTelemetry need proto-plus>=1.26.1 (protobuf>=5); that
415+ # floor is declared on ml_adk_dependency only so core installs stay
416+ # compatible with older proto-plus.
395417 'proto-plus>=1.7.1,<2' ,
396418 # 1. Use a tighter upper bound in protobuf dependency to make sure
397419 # the minor version at job submission
@@ -449,7 +471,8 @@ def get_portability_package_data():
449471 'parameterized>=0.7.1,<0.10.0' ,
450472 'pyhamcrest>=1.9,!=1.10.0,<3.0.0' ,
451473 'requests_mock>=1.7,<2.0' ,
452- 'tenacity>=8.0.0,<9' ,
474+ # google-adk 1.28+ requires tenacity>=9,<10 (conflicts with <9).
475+ 'tenacity>=8.0.0,<10' ,
453476 'pytest>=7.1.2,<9.0' ,
454477 'pytest-xdist>=2.5.0,<4' ,
455478 'pytest-timeout>=2.1.0,<3' ,
@@ -547,14 +570,14 @@ def get_portability_package_data():
547570 # TFT->TFX-BSL require pandas 1.x, which is not compatible
548571 # with numpy 2.x
549572 'numpy<2' ,
550- # To help with dependency resolution in test suite. Revise once
551- # https://github.com/apache/beam/issues/37854 is fixed
552- 'protobuf<4; python_version<"3.11"'
553573 # Comment out xgboost as it is breaking presubmit python ml
554574 # tests due to tag check introduced since pip 24.2
555575 # https://github.com/apache/beam/issues/31285
556576 # 'xgboost<2.0', # https://github.com/apache/beam/issues/31252
557- ] + ml_base ,
577+ # tft needs protobuf<5; tf2onnx 1.17+ allows protobuf 5 on the
578+ # ADK-only path.
579+ 'tf2onnx>=1.16.1,<1.17' ,
580+ ] + ml_base_core ,
558581 'p310_ml_test' : [
559582 'datatable' ,
560583 ] + ml_base ,
0 commit comments