|
8 | 8 | tool-augmented models using self-contained task bundles. |
9 | 9 | """ |
10 | 10 |
|
| 11 | +from importlib import import_module |
| 12 | +from typing import Any |
11 | 13 | import warnings |
12 | 14 |
|
13 | | -from eval_protocol.adapters.braintrust import reward_fn_to_scorer, scorer_to_reward_fn |
14 | | - |
| 15 | +# Lightweight imports (no heavy optional dependencies) |
| 16 | +from .integrations.braintrust import reward_fn_to_scorer, scorer_to_reward_fn |
15 | 17 | from .auth import get_fireworks_account_id, get_fireworks_api_key |
16 | 18 | from .common_utils import load_jsonl |
17 | 19 | from .config import RewardKitConfig, get_config, load_config |
18 | | -from .mcp_env import ( |
19 | | - AnthropicPolicy, |
20 | | - FireworksPolicy, |
21 | | - LiteLLMPolicy, |
22 | | - OpenAIPolicy, |
23 | | - make, |
24 | | - rollout, |
25 | | - test_mcp, |
26 | | -) |
27 | | - |
28 | | -# Try to import FireworksPolicy if available |
29 | | -try: |
30 | | - from .mcp_env import FireworksPolicy |
31 | 20 |
|
32 | | - _FIREWORKS_AVAILABLE = True |
33 | | -except (ImportError, AttributeError): |
34 | | - _FIREWORKS_AVAILABLE = False |
35 | 21 | # Import submodules to make them available via eval_protocol.rewards, etc. |
36 | | -from . import mcp, rewards |
37 | 22 | from .models import EvaluateResult, Message, MetricResult |
38 | 23 | from .playback_policy import PlaybackPolicyBase |
39 | 24 | from .resources import create_llm_resource |
|
42 | 27 |
|
43 | 28 | warnings.filterwarnings("default", category=DeprecationWarning, module="eval_protocol") |
44 | 29 |
|
| 30 | +# Public API (static exports only; dynamic MCP symbols are provided via __getattr__) |
45 | 31 | __all__ = [ |
46 | 32 | # Core interfaces |
47 | 33 | "Message", |
|
60 | 46 | "RewardKitConfig", |
61 | 47 | # Utilities |
62 | 48 | "load_jsonl", |
63 | | - # MCP Environment API |
64 | | - "make", |
65 | | - "rollout", |
66 | | - "LiteLLMPolicy", |
67 | | - "AnthropicPolicy", |
68 | | - "FireworksPolicy", |
69 | | - "OpenAIPolicy", |
70 | | - "test_mcp", |
71 | 49 | # Playback functionality |
72 | 50 | "PlaybackPolicyBase", |
73 | 51 | # Resource management |
|
77 | 55 | "mcp", |
78 | 56 | ] |
79 | 57 |
|
| 58 | + |
| 59 | +def __getattr__(name: str) -> Any: |
| 60 | + """Lazily import heavy MCP environment symbols to speed up package import. |
| 61 | +
|
| 62 | + This defers importing modules that depend on optional or heavy dependencies |
| 63 | + (e.g., vendored tau2, OpenAI clients) until they are actually used. |
| 64 | + """ |
| 65 | + if name in { |
| 66 | + "make", |
| 67 | + "rollout", |
| 68 | + "LiteLLMPolicy", |
| 69 | + "AnthropicPolicy", |
| 70 | + "FireworksPolicy", |
| 71 | + "OpenAIPolicy", |
| 72 | + "test_mcp", |
| 73 | + }: |
| 74 | + m = import_module(".mcp_env", __name__) |
| 75 | + return getattr(m, name) |
| 76 | + if name in {"mcp", "rewards"}: |
| 77 | + # Lazy-load subpackages for attribute access like eval_protocol.mcp |
| 78 | + return import_module(f".{name}", __name__) |
| 79 | + raise AttributeError(f"module '{__name__}' has no attribute '{name}'") |
| 80 | + |
| 81 | + |
80 | 82 | from . import _version |
81 | 83 |
|
82 | 84 | __version__ = _version.get_versions()["version"] |
0 commit comments