#### What this does #### # On success, logs events to Promptlayer import os import traceback from pydantic import BaseModel import litellm class PromptLayerLogger: # Class variables or attributes def __init__(self): # Instance variables self.key = os.getenv("PROMPTLAYER_API_KEY") def log_event(self, kwargs, response_obj, start_time, end_time, print_verbose): # Method definition try: new_kwargs = {} new_kwargs["model"] = kwargs["model"] new_kwargs["messages"] = kwargs["messages"] # add kwargs["optional_params"] to new_kwargs for optional_param in kwargs["optional_params"]: new_kwargs[optional_param] = kwargs["optional_params"][optional_param] # Extract PromptLayer tags from metadata, if such exists tags = [] metadata = {} if "metadata" in kwargs["litellm_params"]: if "pl_tags" in kwargs["litellm_params"]["metadata"]: tags = kwargs["litellm_params"]["metadata"]["pl_tags"] # Remove "pl_tags" from metadata metadata = { k: v for k, v in kwargs["litellm_params"]["metadata"].items() if k != "pl_tags" } print_verbose( f"Prompt Layer Logging - Enters logging function for model kwargs: {new_kwargs}\n, response: {response_obj}" ) # python-openai >= 1.0.0 returns Pydantic objects instead of jsons if isinstance(response_obj, BaseModel): response_obj = response_obj.model_dump() request_response = litellm.module_level_client.post( "https://api.promptlayer.com/rest/track-request", json={ "function_name": "openai.ChatCompletion.create", "kwargs": new_kwargs, "tags": tags, "request_response": dict(response_obj), "request_start_time": int(start_time.timestamp()), "request_end_time": int(end_time.timestamp()), "api_key": self.key, # Optional params for PromptLayer # "prompt_id": "", # "prompt_input_variables": "", # "prompt_version":1, }, ) response_json = request_response.json() if not request_response.json().get("success", False): raise Exception("Promptlayer did not successfully log the response!") print_verbose( f"Prompt Layer Logging: success - final response object: {request_response.text}" ) if "request_id" in response_json: if metadata: response = litellm.module_level_client.post( "https://api.promptlayer.com/rest/track-metadata", json={ "request_id": response_json["request_id"], "api_key": self.key, "metadata": metadata, }, ) print_verbose( f"Prompt Layer Logging: success - metadata post response object: {response.text}" ) except Exception: print_verbose(f"error: Prompt Layer Error - {traceback.format_exc()}") pass