use standard logging payload for DD logging

This commit is contained in:
Ishaan Jaff 2024-11-26 17:53:01 -08:00
parent 7d6e45f78e
commit 6d0424881a

View file

@ -253,59 +253,31 @@ class DataDogLogger(CustomBatchLogger):
""" """
import json import json
litellm_params = kwargs.get("litellm_params", {}) standard_logging_object: Optional[StandardLoggingPayload] = kwargs.get(
metadata = ( "standard_logging_object", None
litellm_params.get("metadata", {}) or {} )
) # if litellm_params['metadata'] == None if standard_logging_object is None:
messages = kwargs.get("messages") raise ValueError("standard_logging_object not found in kwargs")
optional_params = kwargs.get("optional_params", {}) _start_time: float = standard_logging_object.get("startTime", 0)
call_type = kwargs.get("call_type", "litellm.completion") _end_time: float = standard_logging_object.get("endTime", 0)
cache_hit = kwargs.get("cache_hit", False) response_time_seconds: float = _end_time - _start_time
usage = response_obj["usage"]
id = response_obj.get("id", str(uuid.uuid4()))
usage = dict(usage)
try:
response_time = (end_time - start_time).total_seconds() * 1000
except Exception:
response_time = None
try:
response_obj = dict(response_obj)
except Exception:
response_obj = response_obj
# Clean Metadata before logging - never log raw metadata
# the raw metadata can contain circular references which leads to infinite recursion
# we clean out all extra litellm metadata params before logging
clean_metadata = {}
if isinstance(metadata, dict):
for key, value in metadata.items():
# clean litellm metadata before logging
if key in [
"endpoint",
"caching_groups",
"previous_models",
]:
continue
else:
clean_metadata[key] = value
# Build the initial payload # Build the initial payload
payload = { payload = {
"id": id, "id": standard_logging_object.get("id"),
"call_type": call_type, "call_type": standard_logging_object.get("call_type"),
"cache_hit": cache_hit, "cache_hit": standard_logging_object.get("cache_hit"),
"start_time": start_time, "start_time": _start_time,
"end_time": end_time, "end_time": _end_time,
"response_time": response_time, "response_time": response_time_seconds,
"model": kwargs.get("model", ""), "model": standard_logging_object.get("model"),
"user": kwargs.get("user", ""), "user": standard_logging_object.get("end_user"),
"model_parameters": optional_params, "model_parameters": standard_logging_object.get("model_parameters"),
"spend": kwargs.get("response_cost", 0), "spend": standard_logging_object.get("response_cost"),
"messages": messages, "messages": standard_logging_object.get("messages"),
"response": response_obj, "response": standard_logging_object.get("response"),
"usage": usage, "usage": standard_logging_object.get("usage"),
"metadata": clean_metadata, "metadata": standard_logging_object.get("metadata"),
} }
make_json_serializable(payload) make_json_serializable(payload)