feat(litellm_logging.py): log exception response headers to langfuse

This commit is contained in:
Krrish Dholakia 2024-08-01 18:01:03 -07:00
parent 17d007d6da
commit f506eb341b
6 changed files with 19 additions and 15 deletions

View file

@ -5,6 +5,7 @@ import os
import traceback import traceback
from packaging.version import Version from packaging.version import Version
from pydantic import BaseModel
import litellm import litellm
from litellm._logging import verbose_logger from litellm._logging import verbose_logger
@ -43,8 +44,8 @@ class LangFuseLogger:
self.langfuse_debug = os.getenv("LANGFUSE_DEBUG") self.langfuse_debug = os.getenv("LANGFUSE_DEBUG")
parameters = { parameters = {
"public_key": self.public_key, "public_key": "pk-lf-b3db7e8e-c2f6-4fc7-825c-a541a8fbe003",
"secret_key": self.secret_key, "secret_key": "sk-lf-b11ef3a8-361c-4445-9652-12318b8596e4",
"host": self.langfuse_host, "host": self.langfuse_host,
"release": self.langfuse_release, "release": self.langfuse_release,
"debug": self.langfuse_debug, "debug": self.langfuse_debug,
@ -331,7 +332,7 @@ class LangFuseLogger:
metadata = copy.deepcopy( metadata = copy.deepcopy(
metadata metadata
) # Avoid modifying the original metadata ) # Avoid modifying the original metadata
except: except Exception:
new_metadata = {} new_metadata = {}
for key, value in metadata.items(): for key, value in metadata.items():
if ( if (
@ -342,6 +343,8 @@ class LangFuseLogger:
or isinstance(value, float) or isinstance(value, float)
): ):
new_metadata[key] = copy.deepcopy(value) new_metadata[key] = copy.deepcopy(value)
elif isinstance(value, BaseModel):
new_metadata[key] = value.model_dump()
metadata = new_metadata metadata = new_metadata
supports_tags = Version(langfuse.version.__version__) >= Version("2.6.3") supports_tags = Version(langfuse.version.__version__) >= Version("2.6.3")

View file

@ -1543,6 +1543,13 @@ class Logging:
self.model_call_details["end_time"] = end_time self.model_call_details["end_time"] = end_time
self.model_call_details.setdefault("original_response", None) self.model_call_details.setdefault("original_response", None)
self.model_call_details["response_cost"] = 0 self.model_call_details["response_cost"] = 0
if hasattr(exception, "headers") and isinstance(exception.headers, dict):
self.model_call_details.setdefault("litellm_params", {})
metadata = (
self.model_call_details["litellm_params"].get("metadata", {}) or {}
)
metadata.update(exception.headers)
return start_time, end_time return start_time, end_time
def failure_handler( def failure_handler(

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,11 +1,8 @@
model_list: model_list:
- model_name: "*" - model_name: "predibase-llama"
litellm_params: litellm_params:
model: "*" model: "predibase/llama-3-8b-instruct"
- model_name: "azure-gpt-4o-mini" request_timeout: 1
litellm_params:
model: azure/my-gpt-4o-mini litellm_settings:
api_key: os.environ/AZURE_API_KEY failure_callback: ["langfuse"]
api_base: os.environ/AZURE_API_BASE
model_info:
base_model: azure/global-standard/gpt-4o-mini