Skip to content

Commit 2c4911d

Browse files
authored
fix: lazy import strands-agents-evals to avoid ImportError when not installed (#367)
evaluation/__init__.py unconditionally imported StrandsEvalsAgentCoreEvaluator and create_strands_evaluator, which transitively imports strands_evals. This caused an ImportError for users who installed bedrock-agentcore without the strands-agents-evals extra. Use __getattr__ lazy loading so strands-dependent symbols are only imported when actually accessed, with a clear error message if the extra is missing. Closes #340
1 parent 5bdf009 commit 2c4911d

1 file changed

Lines changed: 28 additions & 4 deletions

File tree

src/bedrock_agentcore/evaluation/__init__.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
"""AgentCore Evaluation: EvaluationClient and Strands integration."""
22

33
from bedrock_agentcore.evaluation.client import EvaluationClient
4-
from bedrock_agentcore.evaluation.integrations.strands_agents_evals.evaluator import (
5-
StrandsEvalsAgentCoreEvaluator,
6-
create_strands_evaluator,
7-
)
84
from bedrock_agentcore.evaluation.span_to_adot_serializer import (
95
convert_strands_to_adot,
106
)
@@ -19,3 +15,31 @@
1915
"create_strands_evaluator",
2016
"fetch_spans_from_cloudwatch",
2117
]
18+
19+
_STRANDS_EVALS_EXTRAS = {
20+
"StrandsEvalsAgentCoreEvaluator",
21+
"create_strands_evaluator",
22+
}
23+
24+
25+
def __getattr__(name: str):
26+
"""Lazy import for optional strands-agents-evals dependencies."""
27+
if name in _STRANDS_EVALS_EXTRAS:
28+
try:
29+
from bedrock_agentcore.evaluation.integrations.strands_agents_evals.evaluator import (
30+
StrandsEvalsAgentCoreEvaluator,
31+
create_strands_evaluator,
32+
)
33+
except ImportError as e:
34+
raise ImportError(
35+
f"'{name}' requires the 'strands-agents-evals' extra. "
36+
"Install it with: pip install 'bedrock-agentcore[strands-agents-evals]'"
37+
) from e
38+
39+
_lazy = {
40+
"StrandsEvalsAgentCoreEvaluator": StrandsEvalsAgentCoreEvaluator,
41+
"create_strands_evaluator": create_strands_evaluator,
42+
}
43+
return _lazy[name]
44+
45+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")

0 commit comments

Comments
 (0)