Skip to content

Commit 5f91a9d

Browse files
committed
fix: lazy-import GCS evaluation managers in evals utility
Fixes #5787 Change-Id: I0aadfb11fedc49c1d45d4fcd9f89087c27a0e6ea
1 parent 416775d commit 5f91a9d

3 files changed

Lines changed: 21 additions & 6 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ dependencies = [
4747
"packaging>=21",
4848
"pydantic>=2.12,<3",
4949
"python-dotenv>=1,<2",
50+
"python-multipart>=0.0.9,<1",
5051
# go/keep-sorted start
5152
"pyyaml>=6.0.2,<7",
5253
"requests>=2.32.4,<3",

src/google/adk/cli/utils/evals.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,20 @@
1515
from __future__ import annotations
1616

1717
import os
18+
from typing import Any, TYPE_CHECKING
1819

1920
from pydantic import alias_generators
2021
from pydantic import BaseModel
2122
from pydantic import ConfigDict
2223

2324
from ...evaluation.eval_case import Invocation
2425
from ...evaluation.evaluation_generator import EvaluationGenerator
25-
from ...evaluation.gcs_eval_set_results_manager import GcsEvalSetResultsManager
26-
from ...evaluation.gcs_eval_sets_manager import GcsEvalSetsManager
2726
from ...sessions.session import Session
2827

28+
if TYPE_CHECKING:
29+
from ...evaluation.gcs_eval_set_results_manager import GcsEvalSetResultsManager
30+
from ...evaluation.gcs_eval_sets_manager import GcsEvalSetsManager
31+
2932

3033
class GcsEvalManagers(BaseModel):
3134
model_config = ConfigDict(
@@ -34,9 +37,9 @@ class GcsEvalManagers(BaseModel):
3437
arbitrary_types_allowed=True,
3538
)
3639

37-
eval_sets_manager: GcsEvalSetsManager
40+
eval_sets_manager: 'GcsEvalSetsManager'
3841

39-
eval_set_results_manager: GcsEvalSetResultsManager
42+
eval_set_results_manager: 'GcsEvalSetResultsManager'
4043

4144

4245
def convert_session_to_eval_invocations(session: Session) -> list[Invocation]:
@@ -66,8 +69,19 @@ def create_gcs_eval_managers_from_uri(
6669
6770
Raises:
6871
ValueError: If the eval_storage_uri is not supported.
72+
RuntimeError: If GCP optional dependencies are missing.
6973
"""
7074
if eval_storage_uri.startswith('gs://'):
75+
try:
76+
from ...evaluation.gcs_eval_set_results_manager import GcsEvalSetResultsManager
77+
from ...evaluation.gcs_eval_sets_manager import GcsEvalSetsManager
78+
except ImportError as e:
79+
raise RuntimeError(
80+
'GCS evaluation managers require Google Cloud optional dependencies.\n'
81+
'Please install them using: pip install google-adk[gcp]\n'
82+
'Or: pip install google-cloud-storage>=2.18'
83+
) from e
84+
7185
gcs_bucket = eval_storage_uri.split('://')[1]
7286
eval_sets_manager = GcsEvalSetsManager(
7387
bucket_name=gcs_bucket, project=os.environ['GOOGLE_CLOUD_PROJECT']

tests/unittests/cli/utils/test_evals.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525

2626
@mock.patch.dict(os.environ, {'GOOGLE_CLOUD_PROJECT': 'test-project'})
2727
@mock.patch(
28-
'google.adk.cli.utils.evals.GcsEvalSetResultsManager',
28+
'google.adk.evaluation.gcs_eval_set_results_manager.GcsEvalSetResultsManager',
2929
autospec=True,
3030
)
3131
@mock.patch(
32-
'google.adk.cli.utils.evals.GcsEvalSetsManager',
32+
'google.adk.evaluation.gcs_eval_sets_manager.GcsEvalSetsManager',
3333
autospec=True,
3434
)
3535
def test_create_gcs_eval_managers_from_uri_success(

0 commit comments

Comments
 (0)