Spaces:
Paused
Paused
| import json | |
| import traceback | |
| from datetime import datetime, timezone | |
| import litellm | |
| class GreenscaleLogger: | |
| def __init__(self): | |
| import os | |
| self.greenscale_api_key = os.getenv("GREENSCALE_API_KEY") | |
| self.headers = { | |
| "api-key": self.greenscale_api_key, | |
| "Content-Type": "application/json", | |
| } | |
| self.greenscale_logging_url = os.getenv("GREENSCALE_ENDPOINT") | |
| def log_event(self, kwargs, response_obj, start_time, end_time, print_verbose): | |
| try: | |
| response_json = response_obj.model_dump() if response_obj else {} | |
| data = { | |
| "modelId": kwargs.get("model"), | |
| "inputTokenCount": response_json.get("usage", {}).get("prompt_tokens"), | |
| "outputTokenCount": response_json.get("usage", {}).get( | |
| "completion_tokens" | |
| ), | |
| } | |
| data["timestamp"] = datetime.now(timezone.utc).strftime( | |
| "%Y-%m-%dT%H:%M:%SZ" | |
| ) | |
| if type(end_time) is datetime and type(start_time) is datetime: | |
| data["invocationLatency"] = int( | |
| (end_time - start_time).total_seconds() * 1000 | |
| ) | |
| # Add additional metadata keys to tags | |
| tags = [] | |
| metadata = kwargs.get("litellm_params", {}).get("metadata", {}) | |
| for key, value in metadata.items(): | |
| if key.startswith("greenscale"): | |
| if key == "greenscale_project": | |
| data["project"] = value | |
| elif key == "greenscale_application": | |
| data["application"] = value | |
| else: | |
| tags.append( | |
| {"key": key.replace("greenscale_", ""), "value": str(value)} | |
| ) | |
| data["tags"] = tags | |
| if self.greenscale_logging_url is None: | |
| raise Exception("Greenscale Logger Error - No logging URL found") | |
| response = litellm.module_level_client.post( | |
| self.greenscale_logging_url, | |
| headers=self.headers, | |
| data=json.dumps(data, default=str), | |
| ) | |
| if response.status_code != 200: | |
| print_verbose( | |
| f"Greenscale Logger Error - {response.text}, {response.status_code}" | |
| ) | |
| else: | |
| print_verbose(f"Greenscale Logger Succeeded - {response.text}") | |
| except Exception as e: | |
| print_verbose( | |
| f"Greenscale Logger Error - {e}, Stack trace: {traceback.format_exc()}" | |
| ) | |
| pass | |