mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-10 03:28:53 +00:00
fix(integrations): correct telemetry_dev callback lookup and lint errors
- Map telemetry_dev to TelemetryDevLogger in the callback registry. - Add a telemetry_dev branch to get_custom_logger_compatible_class. - Apply ruff format to telemetry_dev.py and litellm_logging.py. - Add a test for the init, config, and cache of the telemetry_dev callback.
This commit is contained in:
parent
4803da77b5
commit
9acc14da61
5 changed files with 50 additions and 21 deletions
|
|
@ -1,3 +1,3 @@
|
|||
from litellm.integrations.telemetry_dev.telemetry_dev import TelemetryDevLogger
|
||||
|
||||
__all__ = ["TelemetryDevLogger"]
|
||||
__all__ = ["TelemetryDevLogger"] # mutable-ok: module export list
|
||||
|
|
|
|||
|
|
@ -1,14 +1,7 @@
|
|||
import os
|
||||
from typing import TYPE_CHECKING, Any
|
||||
|
||||
from litellm.integrations.opentelemetry import OpenTelemetry
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from litellm.integrations.opentelemetry import OpenTelemetryConfig
|
||||
from litellm.types.integrations.arize import Protocol
|
||||
else:
|
||||
Protocol = Any
|
||||
OpenTelemetryConfig = Any
|
||||
from litellm.types.integrations.arize import Protocol
|
||||
|
||||
|
||||
class TelemetryDevConfig:
|
||||
|
|
@ -19,7 +12,7 @@ class TelemetryDevConfig:
|
|||
otlp_auth_headers: str,
|
||||
protocol: Protocol,
|
||||
endpoint: str,
|
||||
):
|
||||
) -> None:
|
||||
self.otlp_auth_headers = otlp_auth_headers
|
||||
self.protocol = protocol
|
||||
self.endpoint = endpoint
|
||||
|
|
@ -36,9 +29,7 @@ class TelemetryDevLogger(OpenTelemetry):
|
|||
"TELEMETRY_DEV_API_KEY environment variable is required for the telemetry.dev integration."
|
||||
)
|
||||
|
||||
base_url = os.environ.get(
|
||||
"TELEMETRY_DEV_BASE_URL", "https://ingest.telemetry.dev"
|
||||
).rstrip("/")
|
||||
base_url = os.environ.get("TELEMETRY_DEV_BASE_URL", "https://ingest.telemetry.dev").rstrip("/")
|
||||
|
||||
return TelemetryDevConfig(
|
||||
otlp_auth_headers=f"Authorization=Bearer {api_key}",
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ from litellm.integrations.posthog import PostHogLogger
|
|||
from litellm.integrations.prometheus import PrometheusLogger
|
||||
from litellm.integrations.s3_v2 import S3Logger
|
||||
from litellm.integrations.sqs import SQSLogger
|
||||
from litellm.integrations.telemetry_dev.telemetry_dev import TelemetryDevLogger
|
||||
from litellm.integrations.vantage.vantage_logger import VantageLogger
|
||||
from litellm.integrations.vector_store_integrations.vector_store_pre_call_hook import (
|
||||
VectorStorePreCallHook,
|
||||
|
|
@ -85,7 +86,7 @@ class CustomLoggerRegistry:
|
|||
"langfuse_otel": OpenTelemetry,
|
||||
"arize_phoenix": OpenTelemetry,
|
||||
"langtrace": OpenTelemetry,
|
||||
"telemetry_dev": OpenTelemetry,
|
||||
"telemetry_dev": TelemetryDevLogger,
|
||||
"weave_otel": OpenTelemetry,
|
||||
"levo": OpenTelemetry,
|
||||
"mlflow": MlflowLogger,
|
||||
|
|
|
|||
|
|
@ -4119,15 +4119,10 @@ def _init_custom_logger_compatible_class(
|
|||
)
|
||||
|
||||
for callback in _in_memory_loggers:
|
||||
if (
|
||||
isinstance(callback, TelemetryDevLogger)
|
||||
and callback.callback_name == "telemetry_dev"
|
||||
):
|
||||
if isinstance(callback, TelemetryDevLogger) and callback.callback_name == "telemetry_dev":
|
||||
return callback
|
||||
|
||||
telemetry_dev_logger = TelemetryDevLogger(
|
||||
config=otel_config, callback_name="telemetry_dev"
|
||||
)
|
||||
telemetry_dev_logger = TelemetryDevLogger(config=otel_config, callback_name="telemetry_dev")
|
||||
_in_memory_loggers.append(telemetry_dev_logger)
|
||||
return telemetry_dev_logger
|
||||
elif logging_integration == "otel":
|
||||
|
|
@ -4713,6 +4708,15 @@ def get_custom_logger_compatible_class(
|
|||
if isinstance(callback, OpenTelemetry) and callback.callback_name == "langtrace":
|
||||
return callback
|
||||
|
||||
elif logging_integration == "telemetry_dev":
|
||||
from litellm.integrations.telemetry_dev.telemetry_dev import (
|
||||
TelemetryDevLogger,
|
||||
)
|
||||
|
||||
for callback in _in_memory_loggers:
|
||||
if isinstance(callback, TelemetryDevLogger) and callback.callback_name == "telemetry_dev":
|
||||
return callback
|
||||
|
||||
elif logging_integration == "mlflow":
|
||||
for callback in _in_memory_loggers:
|
||||
if isinstance(callback, MlflowLogger):
|
||||
|
|
|
|||
|
|
@ -319,3 +319,36 @@ def test_get_combined_callback_list_returns_copy_when_dynamic_is_none():
|
|||
combined_callbacks.append("new_callback")
|
||||
|
||||
assert global_callbacks == ["langfuse"]
|
||||
|
||||
|
||||
def test_telemetry_dev_callback_initialization(monkeypatch):
|
||||
from litellm.integrations.telemetry_dev.telemetry_dev import TelemetryDevLogger
|
||||
from litellm.litellm_core_utils.litellm_logging import (
|
||||
_init_custom_logger_compatible_class,
|
||||
get_custom_logger_compatible_class,
|
||||
)
|
||||
|
||||
monkeypatch.setenv("TELEMETRY_DEV_API_KEY", "td_live_test")
|
||||
monkeypatch.delenv("TELEMETRY_DEV_BASE_URL", raising=False)
|
||||
|
||||
config = TelemetryDevLogger.get_telemetry_dev_config()
|
||||
assert config.endpoint == "https://ingest.telemetry.dev/v1/traces"
|
||||
assert config.otlp_auth_headers == "Authorization=Bearer td_live_test"
|
||||
assert config.protocol == "otlp_http"
|
||||
|
||||
monkeypatch.setenv("TELEMETRY_DEV_BASE_URL", "https://example.com/")
|
||||
assert TelemetryDevLogger.get_telemetry_dev_config().endpoint == "https://example.com/v1/traces"
|
||||
monkeypatch.delenv("TELEMETRY_DEV_BASE_URL")
|
||||
|
||||
logger = _init_custom_logger_compatible_class("telemetry_dev", internal_usage_cache=None, llm_router=None)
|
||||
assert isinstance(logger, TelemetryDevLogger)
|
||||
assert logger.callback_name == "telemetry_dev"
|
||||
assert CustomLoggerRegistry.CALLBACK_CLASS_STR_TO_CLASS_TYPE["telemetry_dev"] is TelemetryDevLogger
|
||||
|
||||
# init is cached and lookup resolves to the same instance
|
||||
assert _init_custom_logger_compatible_class("telemetry_dev", internal_usage_cache=None, llm_router=None) is logger
|
||||
assert get_custom_logger_compatible_class("telemetry_dev") is logger
|
||||
|
||||
monkeypatch.delenv("TELEMETRY_DEV_API_KEY")
|
||||
with pytest.raises(ValueError, match="TELEMETRY_DEV_API_KEY"):
|
||||
TelemetryDevLogger.get_telemetry_dev_config()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue