Spaces:
Paused
Paused
| #### 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 ID>", | |
| # "prompt_input_variables": "<Dictionary of variables for prompt>", | |
| # "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 | |