fix(otel): skip raw_gen_ai_request span when per-request message redaction applies

This commit is contained in:
Tom Ron 2026-10-04 21:11:32 +03:00
parent e1d16f51d1
commit cb4a355863
2 changed files with 23 additions and 0 deletions

View file

@ -29,6 +29,7 @@ from litellm.integrations.otel.model.metadata import flatten_metadata
from litellm.integrations.otel.model.semconv import LiteLLM, Metric
from litellm.integrations.otel.plumbing.otlp_tls import resolve_otlp_http_tls
from litellm.litellm_core_utils.internal_call_metadata import is_unbilled_non_inference_call_from_params
from litellm.litellm_core_utils.redact_messages import should_redact_message_logging
from litellm.litellm_core_utils.safe_json_dumps import safe_dumps
from litellm.litellm_core_utils.secret_redaction import redact_string
from litellm.litellm_core_utils.service_tier_utils import (
@ -1471,6 +1472,9 @@ class OpenTelemetry(OTELGenAISemconvMixin, CustomLogger):
if not self._capture_in_span():
return
if should_redact_message_logging(kwargs):
return
litellm_params: Final = kwargs.get("litellm_params", {})
metadata: Final = litellm_params.get("metadata") or {}
generation_name: Final = metadata.get("generation_name")

View file

@ -1754,6 +1754,25 @@ class TestOpenTelemetry(unittest.TestCase):
mock_tracer.start_span.assert_not_called()
@patch.dict(os.environ, {"OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT": ""})
@patch("litellm.turn_off_message_logging", False)
def test_maybe_log_raw_request_skips_when_request_header_enables_redaction(self):
otel = OpenTelemetry()
otel.message_logging = True
mock_tracer = MagicMock()
otel.get_tracer_to_use_for_request = MagicMock(return_value=mock_tracer)
for header in (
"x-litellm-enable-message-redaction",
"litellm-enable-message-redaction",
):
kwargs = {"litellm_params": {"metadata": {"headers": {header: "true"}}}}
otel._maybe_log_raw_request(
kwargs, {}, datetime.now(), datetime.now(), MagicMock()
)
mock_tracer.start_span.assert_not_called()
class TestOpenTelemetryToNs(unittest.TestCase):
"""``_to_ns`` converts a span boundary to epoch nanoseconds. Service spans now