[Refactor] litellm/init.py: lazy load dotprompt integration (#18056)
This commit is contained in:
parent
feb6924efe
commit
f8168f5063
@ -72,11 +72,6 @@ from litellm.constants import (
|
||||
DEFAULT_SOFT_BUDGET,
|
||||
DEFAULT_ALLOWED_FAILS,
|
||||
)
|
||||
from litellm.integrations.dotprompt import (
|
||||
global_prompt_manager,
|
||||
global_prompt_directory,
|
||||
set_global_prompt_directory,
|
||||
)
|
||||
from litellm.types.guardrails import GuardrailItem
|
||||
from litellm.types.secret_managers.main import (
|
||||
KeyManagementSystem,
|
||||
@ -1567,6 +1562,7 @@ def __getattr__(name: str) -> Any:
|
||||
TYPES_UTILS_NAMES,
|
||||
CACHING_NAMES,
|
||||
HTTP_HANDLER_NAMES,
|
||||
DOTPROMPT_NAMES,
|
||||
)
|
||||
|
||||
# Lazy load cost_calculator functions
|
||||
@ -1615,6 +1611,12 @@ def __getattr__(name: str) -> Any:
|
||||
|
||||
return _lazy_import_http_handlers(name)
|
||||
|
||||
# Lazy load dotprompt integration globals
|
||||
if name in DOTPROMPT_NAMES:
|
||||
from ._lazy_imports import _lazy_import_dotprompt
|
||||
|
||||
return _lazy_import_dotprompt(name)
|
||||
|
||||
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
||||
|
||||
|
||||
|
||||
@ -78,6 +78,13 @@ HTTP_HANDLER_NAMES = (
|
||||
"module_level_client",
|
||||
)
|
||||
|
||||
# Dotprompt integration names that support lazy loading via _lazy_import_dotprompt
|
||||
DOTPROMPT_NAMES = (
|
||||
"global_prompt_manager",
|
||||
"global_prompt_directory",
|
||||
"set_global_prompt_directory",
|
||||
)
|
||||
|
||||
# Lazy import for utils module - imports only the requested item by name.
|
||||
# Note: PLR0915 (too many statements) is suppressed because the many if statements
|
||||
# are intentional - each attribute is imported individually only when requested,
|
||||
@ -504,4 +511,35 @@ def _lazy_import_http_handlers(name: str) -> Any:
|
||||
_globals["module_level_client"] = sync_client
|
||||
return sync_client
|
||||
|
||||
raise AttributeError(f"HTTP handlers lazy import: unknown attribute {name!r}")
|
||||
raise AttributeError(f"HTTP handlers lazy import: unknown attribute {name!r}")
|
||||
|
||||
|
||||
def _lazy_import_dotprompt(name: str) -> Any:
|
||||
"""Lazy import for dotprompt integration globals."""
|
||||
_globals = _get_litellm_globals()
|
||||
|
||||
if name == "global_prompt_manager":
|
||||
from litellm.integrations.dotprompt import (
|
||||
global_prompt_manager as _global_prompt_manager,
|
||||
)
|
||||
|
||||
_globals["global_prompt_manager"] = _global_prompt_manager
|
||||
return _global_prompt_manager
|
||||
|
||||
if name == "global_prompt_directory":
|
||||
from litellm.integrations.dotprompt import (
|
||||
global_prompt_directory as _global_prompt_directory,
|
||||
)
|
||||
|
||||
_globals["global_prompt_directory"] = _global_prompt_directory
|
||||
return _global_prompt_directory
|
||||
|
||||
if name == "set_global_prompt_directory":
|
||||
from litellm.integrations.dotprompt import (
|
||||
set_global_prompt_directory as _set_global_prompt_directory,
|
||||
)
|
||||
|
||||
_globals["set_global_prompt_directory"] = _set_global_prompt_directory
|
||||
return _set_global_prompt_directory
|
||||
|
||||
raise AttributeError(f"Dotprompt lazy import: unknown attribute {name!r}")
|
||||
@ -27,6 +27,8 @@ from litellm._lazy_imports import (
|
||||
_lazy_import_caching,
|
||||
_lazy_import_llm_client_cache,
|
||||
_lazy_import_http_handlers,
|
||||
DOTPROMPT_NAMES,
|
||||
_lazy_import_dotprompt,
|
||||
)
|
||||
|
||||
|
||||
@ -165,6 +167,21 @@ def test_http_handler_lazy_imports():
|
||||
_verify_only_requested_name_imported(name, HTTP_HANDLER_NAMES)
|
||||
|
||||
|
||||
def test_dotprompt_lazy_imports():
|
||||
"""Test that dotprompt globals can be lazy imported."""
|
||||
for name in DOTPROMPT_NAMES:
|
||||
_clear_names_from_globals(DOTPROMPT_NAMES)
|
||||
|
||||
obj = _lazy_import_dotprompt(name)
|
||||
assert name in litellm.__dict__
|
||||
|
||||
# Only the setter must be callable; others may be None by default
|
||||
if name == "set_global_prompt_directory":
|
||||
assert callable(obj), f"{name} should be callable"
|
||||
|
||||
_verify_only_requested_name_imported(name, DOTPROMPT_NAMES)
|
||||
|
||||
|
||||
def test_unknown_attribute_raises_error():
|
||||
"""Test that unknown attributes raise AttributeError."""
|
||||
with pytest.raises(AttributeError):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user