Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions mlflow/tracing/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
from mlflow.pyfunc.context import Context
from mlflow.types.chat import ChatTool

_IMMUTABLE_TAGS_SET = set(IMMUTABLE_TAGS)


def capture_function_input_args(func, args, kwargs) -> dict[str, Any] | None:
try:
Expand Down Expand Up @@ -289,7 +291,10 @@ def maybe_get_logged_model_id() -> str | None:

def exclude_immutable_tags(tags: dict[str, str]) -> dict[str, str]:
"""Exclude immutable tags e.g. "mlflow.user" from the given tags."""
return {k: v for k, v in tags.items() if k not in IMMUTABLE_TAGS}
# Use set subtraction for performance if tags is large
if not tags:
return {}
return {k: v for k, v in tags.items() if k not in _IMMUTABLE_TAGS_SET}


def generate_mlflow_trace_id_from_otel_trace_id(otel_trace_id: int) -> str:
Expand Down Expand Up @@ -461,10 +466,9 @@ def _calculate_percentile(sorted_data: list[float], percentile: float) -> float:
Returns:
The percentile value
"""
if not sorted_data:
return 0.0

n = len(sorted_data)
if n == 0:
return 0.0
index = percentile * (n - 1)
lower = int(index)
upper = lower + 1
Expand All @@ -474,7 +478,9 @@ def _calculate_percentile(sorted_data: list[float], percentile: float) -> float:

# Linear interpolation between two nearest values
weight = index - lower
return sorted_data[lower] * (1 - weight) + sorted_data[upper] * weight
lower_value = sorted_data[lower]
upper_value = sorted_data[upper]
return lower_value + weight * (upper_value - lower_value)


def add_size_stats_to_trace_metadata(trace: Trace):
Expand Down