From bacb63b566ebdb8724f63d6b2d38eaa90ced500a Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Wed, 17 Dec 2025 14:17:43 +0100 Subject: [PATCH 1/7] fix(litellm): Prevent module shadowing --- sentry_sdk/integrations/litellm.py | 3 ++- tests/test_shadowed_module.py | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sentry_sdk/integrations/litellm.py b/sentry_sdk/integrations/litellm.py index 08cb217962..ddafc73412 100644 --- a/sentry_sdk/integrations/litellm.py +++ b/sentry_sdk/integrations/litellm.py @@ -19,6 +19,7 @@ try: import litellm # type: ignore[import-not-found] + from litellm import get_llm_provider except ImportError: raise DidNotEnable("LiteLLM not installed") @@ -45,7 +46,7 @@ def _input_callback(kwargs: "Dict[str, Any]") -> None: # Get key parameters full_model = kwargs.get("model", "") try: - model, provider, _, _ = litellm.get_llm_provider(full_model) + model, provider, _, _ = get_llm_provider(full_model) except Exception: model = full_model provider = "unknown" diff --git a/tests/test_shadowed_module.py b/tests/test_shadowed_module.py index e1171dd103..ee81822973 100644 --- a/tests/test_shadowed_module.py +++ b/tests/test_shadowed_module.py @@ -31,7 +31,6 @@ def pytest_generate_tests(metafunc): - { "clickhouse_driver", "grpc", - "litellm", "opentelemetry", "pure_eval", "ray", From c5c81addfbec369ccbad3510884fd13f88e03127 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Wed, 17 Dec 2025 14:35:25 +0100 Subject: [PATCH 2/7] import callbacks instead of get_llm_provider() --- sentry_sdk/integrations/litellm.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/sentry_sdk/integrations/litellm.py b/sentry_sdk/integrations/litellm.py index ddafc73412..2420fe4ef7 100644 --- a/sentry_sdk/integrations/litellm.py +++ b/sentry_sdk/integrations/litellm.py @@ -19,7 +19,7 @@ try: import litellm # type: ignore[import-not-found] - from litellm import get_llm_provider + from litellm import input_callback, success_callback, failure_callback except ImportError: raise DidNotEnable("LiteLLM not installed") @@ -46,7 +46,7 @@ def _input_callback(kwargs: "Dict[str, Any]") -> None: # Get key parameters full_model = kwargs.get("model", "") try: - model, provider, _, _ = get_llm_provider(full_model) + model, provider, _, _ = litellm.get_llm_provider(full_model) except Exception: model = full_model provider = "unknown" @@ -279,14 +279,14 @@ def __init__(self: "LiteLLMIntegration", include_prompts: bool = True) -> None: @staticmethod def setup_once() -> None: """Set up LiteLLM callbacks for monitoring.""" - litellm.input_callback = litellm.input_callback or [] - if _input_callback not in litellm.input_callback: - litellm.input_callback.append(_input_callback) + litellm_input_callback = input_callback or [] + if _input_callback not in litellm_input_callback: + litellm_input_callback.append(_input_callback) - litellm.success_callback = litellm.success_callback or [] - if _success_callback not in litellm.success_callback: - litellm.success_callback.append(_success_callback) + litellm_success_callback = success_callback or [] + if _success_callback not in litellm_success_callback: + litellm_success_callback.append(_success_callback) - litellm.failure_callback = litellm.failure_callback or [] - if _failure_callback not in litellm.failure_callback: - litellm.failure_callback.append(_failure_callback) + litellm_failure_callback = failure_callback or [] + if _failure_callback not in litellm_failure_callback: + litellm_failure_callback.append(_failure_callback) From 88f24787c60f2de272146abd13632e4e1e8dec59 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Wed, 17 Dec 2025 14:53:41 +0100 Subject: [PATCH 3/7] only add import --- sentry_sdk/integrations/litellm.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/sentry_sdk/integrations/litellm.py b/sentry_sdk/integrations/litellm.py index 2420fe4ef7..08cb217962 100644 --- a/sentry_sdk/integrations/litellm.py +++ b/sentry_sdk/integrations/litellm.py @@ -19,7 +19,6 @@ try: import litellm # type: ignore[import-not-found] - from litellm import input_callback, success_callback, failure_callback except ImportError: raise DidNotEnable("LiteLLM not installed") @@ -279,14 +278,14 @@ def __init__(self: "LiteLLMIntegration", include_prompts: bool = True) -> None: @staticmethod def setup_once() -> None: """Set up LiteLLM callbacks for monitoring.""" - litellm_input_callback = input_callback or [] - if _input_callback not in litellm_input_callback: - litellm_input_callback.append(_input_callback) + litellm.input_callback = litellm.input_callback or [] + if _input_callback not in litellm.input_callback: + litellm.input_callback.append(_input_callback) - litellm_success_callback = success_callback or [] - if _success_callback not in litellm_success_callback: - litellm_success_callback.append(_success_callback) + litellm.success_callback = litellm.success_callback or [] + if _success_callback not in litellm.success_callback: + litellm.success_callback.append(_success_callback) - litellm_failure_callback = failure_callback or [] - if _failure_callback not in litellm_failure_callback: - litellm_failure_callback.append(_failure_callback) + litellm.failure_callback = litellm.failure_callback or [] + if _failure_callback not in litellm.failure_callback: + litellm.failure_callback.append(_failure_callback) From 8637b1b04f858bf8b966aa3dc57a3706f457803f Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Wed, 17 Dec 2025 14:54:12 +0100 Subject: [PATCH 4/7] . --- sentry_sdk/integrations/litellm.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sentry_sdk/integrations/litellm.py b/sentry_sdk/integrations/litellm.py index 08cb217962..c367a01c35 100644 --- a/sentry_sdk/integrations/litellm.py +++ b/sentry_sdk/integrations/litellm.py @@ -19,6 +19,7 @@ try: import litellm # type: ignore[import-not-found] + from litellm import input_callback, success_callback, failure_callback except ImportError: raise DidNotEnable("LiteLLM not installed") From e24f7c21af463e26dd2d7cfb165340eed31d400a Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Wed, 17 Dec 2025 14:54:36 +0100 Subject: [PATCH 5/7] add type ignore --- sentry_sdk/integrations/litellm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry_sdk/integrations/litellm.py b/sentry_sdk/integrations/litellm.py index c367a01c35..1c7b1e3a15 100644 --- a/sentry_sdk/integrations/litellm.py +++ b/sentry_sdk/integrations/litellm.py @@ -19,7 +19,7 @@ try: import litellm # type: ignore[import-not-found] - from litellm import input_callback, success_callback, failure_callback + from litellm import input_callback, success_callback, failure_callback # type: ignore[import-not-found] except ImportError: raise DidNotEnable("LiteLLM not installed") From 9939e7818e0c43f693c52ddb03673d2e5f747f98 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Wed, 17 Dec 2025 14:58:50 +0100 Subject: [PATCH 6/7] remove type ignore --- sentry_sdk/integrations/litellm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry_sdk/integrations/litellm.py b/sentry_sdk/integrations/litellm.py index 1c7b1e3a15..c367a01c35 100644 --- a/sentry_sdk/integrations/litellm.py +++ b/sentry_sdk/integrations/litellm.py @@ -19,7 +19,7 @@ try: import litellm # type: ignore[import-not-found] - from litellm import input_callback, success_callback, failure_callback # type: ignore[import-not-found] + from litellm import input_callback, success_callback, failure_callback except ImportError: raise DidNotEnable("LiteLLM not installed") From fce4a67cc091aa09450edcad19b165a13e1a6e35 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Wed, 17 Dec 2025 15:28:01 +0100 Subject: [PATCH 7/7] use imports so they are not accidentally removed in future --- sentry_sdk/integrations/litellm.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sentry_sdk/integrations/litellm.py b/sentry_sdk/integrations/litellm.py index c367a01c35..06ae8a0782 100644 --- a/sentry_sdk/integrations/litellm.py +++ b/sentry_sdk/integrations/litellm.py @@ -279,14 +279,14 @@ def __init__(self: "LiteLLMIntegration", include_prompts: bool = True) -> None: @staticmethod def setup_once() -> None: """Set up LiteLLM callbacks for monitoring.""" - litellm.input_callback = litellm.input_callback or [] + litellm.input_callback = input_callback or [] if _input_callback not in litellm.input_callback: litellm.input_callback.append(_input_callback) - litellm.success_callback = litellm.success_callback or [] + litellm.success_callback = success_callback or [] if _success_callback not in litellm.success_callback: litellm.success_callback.append(_success_callback) - litellm.failure_callback = litellm.failure_callback or [] + litellm.failure_callback = failure_callback or [] if _failure_callback not in litellm.failure_callback: litellm.failure_callback.append(_failure_callback)