From 10832be1e4726dfe35ec007f2c4e401e481783e9 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 3 Aug 2023 08:36:25 -0700 Subject: [PATCH] updating build to include helicone integration --- build/lib/litellm/__init__.py | 2 +- build/lib/litellm/integrations/__init__.py | 1 + build/lib/litellm/integrations/helicone.py | 73 ++++++++++++++++++ build/lib/litellm/utils.py | 5 +- dist/litellm-0.1.222-py3-none-any.whl | Bin 10305 -> 0 bytes dist/litellm-0.1.222.tar.gz | Bin 10367 -> 0 bytes dist/litellm-0.1.226-py3-none-any.whl | Bin 0 -> 11935 bytes dist/litellm-0.1.226.tar.gz | Bin 0 -> 11458 bytes litellm.egg-info/PKG-INFO | 2 +- litellm.egg-info/SOURCES.txt | 4 +- litellm/__init__.py | 2 +- litellm/__pycache__/__init__.cpython-311.pyc | Bin 956 -> 0 bytes litellm/__pycache__/main.cpython-311.pyc | Bin 11621 -> 0 bytes litellm/__pycache__/timeout.cpython-311.pyc | Bin 4905 -> 0 bytes litellm/__pycache__/utils.cpython-311.pyc | Bin 18290 -> 0 bytes litellm/integrations/__init__.py | 1 + .../__pycache__/helicone.cpython-311.pyc | Bin 3924 -> 0 bytes litellm/integrations/helicone.py | 13 ++-- litellm/tests/test_client.py | 6 +- litellm/tests/test_helicone_integration.py | 24 ++++++ litellm/utils.py | 4 +- setup.py | 5 +- 22 files changed, 127 insertions(+), 15 deletions(-) create mode 100644 build/lib/litellm/integrations/__init__.py create mode 100644 build/lib/litellm/integrations/helicone.py delete mode 100644 dist/litellm-0.1.222-py3-none-any.whl delete mode 100644 dist/litellm-0.1.222.tar.gz create mode 100644 dist/litellm-0.1.226-py3-none-any.whl create mode 100644 dist/litellm-0.1.226.tar.gz delete mode 100644 litellm/__pycache__/__init__.cpython-311.pyc delete mode 100644 litellm/__pycache__/main.cpython-311.pyc delete mode 100644 litellm/__pycache__/timeout.cpython-311.pyc delete mode 100644 litellm/__pycache__/utils.cpython-311.pyc create mode 100644 litellm/integrations/__init__.py delete mode 100644 litellm/integrations/__pycache__/helicone.cpython-311.pyc create mode 100644 litellm/tests/test_helicone_integration.py diff --git a/build/lib/litellm/__init__.py b/build/lib/litellm/__init__.py index 6ae281afc9..b0c53be1c9 100644 --- a/build/lib/litellm/__init__.py +++ b/build/lib/litellm/__init__.py @@ -36,4 +36,4 @@ open_ai_embedding_models = [ from .timeout import timeout from .utils import client, logging, exception_type # Import all the symbols from main.py from .main import * # Import all the symbols from main.py - +from .integrations import * \ No newline at end of file diff --git a/build/lib/litellm/integrations/__init__.py b/build/lib/litellm/integrations/__init__.py new file mode 100644 index 0000000000..b9742821a6 --- /dev/null +++ b/build/lib/litellm/integrations/__init__.py @@ -0,0 +1 @@ +from . import * \ No newline at end of file diff --git a/build/lib/litellm/integrations/helicone.py b/build/lib/litellm/integrations/helicone.py new file mode 100644 index 0000000000..6b3d619659 --- /dev/null +++ b/build/lib/litellm/integrations/helicone.py @@ -0,0 +1,73 @@ +#### What this does #### +# On success, logs events to Helicone +import dotenv, os +import requests +from anthropic import HUMAN_PROMPT, AI_PROMPT +dotenv.load_dotenv() # Loading env variables using dotenv +import traceback +class HeliconeLogger: + # Class variables or attributes + helicone_model_list = ["gpt", "claude"] + def __init__(self): + # Instance variables + self.provider_url = "https://api.openai.com/v1" + self.key = os.getenv('HELICONE_API_KEY') + + def claude_mapping(self, model, messages, response_obj): + prompt = f"{HUMAN_PROMPT}" + for message in messages: + if "role" in message: + if message["role"] == "user": + prompt += f"{HUMAN_PROMPT}{message['content']}" + else: + prompt += f"{AI_PROMPT}{message['content']}" + else: + prompt += f"{HUMAN_PROMPT}{message['content']}" + prompt += f"{AI_PROMPT}" + claude_provider_request = {"model": model, "prompt": prompt} + + claude_response_obj = {"completion": response_obj['choices'][0]['message']['content'], "model": model, "stop_reason": "stop_sequence"} + + return claude_provider_request, claude_response_obj + + def log_success(self, model, messages, response_obj, start_time, end_time, print_verbose): + # Method definition + try: + print_verbose(f"Helicone Logging - Enters logging function for model {model}") + model = model if any(accepted_model in model for accepted_model in self.helicone_model_list) else "gpt-3.5-turbo" + provider_request = {"model": model, "messages": messages} + + if "claude" in model: + provider_request, response_obj = self.claude_mapping(model=model, messages=messages, response_obj=response_obj) + + providerResponse = { + "json": response_obj, + "headers": {"openai-version": "2020-10-01"}, + "status": 200 + } + + # Code to be executed + url = "https://api.hconeai.com/oai/v1/log" + headers = { + 'Authorization': f'Bearer {self.key}', + 'Content-Type': 'application/json' + } + start_time_seconds = int(start_time.timestamp()) + start_time_milliseconds = int((start_time.timestamp() - start_time_seconds) * 1000) + end_time_seconds = int(end_time.timestamp()) + end_time_milliseconds = int((end_time.timestamp() - end_time_seconds) * 1000) + data = { + "providerRequest": {"url": self.provider_url, "json": provider_request, "meta": {"Helicone-Auth": f"Bearer {self.key}"}}, + "providerResponse": providerResponse, + "timing": {"startTime": {"seconds": start_time_seconds, "milliseconds": start_time_milliseconds}, "endTime": {"seconds": end_time_seconds, "milliseconds": end_time_milliseconds}} # {"seconds": .., "milliseconds": ..} + } + response = requests.post(url, headers=headers, json=data) + if response.status_code == 200: + print_verbose("Helicone Logging - Success!") + else: + print_verbose(f"Helicone Logging - Error Request was not successful. Status Code: {response.status_code}") + print_verbose(f"Helicone Logging - Error {response.text}") + except: + # traceback.print_exc() + print_verbose(f"Helicone Logging Error - {traceback.format_exc()}") + pass \ No newline at end of file diff --git a/build/lib/litellm/utils.py b/build/lib/litellm/utils.py index 1cbbb37cfd..b0050226b8 100644 --- a/build/lib/litellm/utils.py +++ b/build/lib/litellm/utils.py @@ -112,6 +112,7 @@ def set_callbacks(callback_list): subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'sentry_sdk']) import sentry_sdk sentry_sdk_instance = sentry_sdk + sentry_trace_rate = os.environ.get("SENTRY_API_TRACE_RATE") if "SENTRY_API_TRACE_RATE" in os.environ else "1.0" sentry_sdk_instance.init(dsn=os.environ.get("SENTRY_API_URL"), traces_sample_rate=float(os.environ.get("SENTRY_API_TRACE_RATE"))) capture_exception = sentry_sdk_instance.capture_exception add_breadcrumb = sentry_sdk_instance.add_breadcrumb @@ -236,14 +237,16 @@ def handle_success(args, kwargs, result, start_time, end_time): print_verbose("reaches helicone for logging!") model = args[0] if len(args) > 0 else kwargs["model"] messages = args[1] if len(args) > 1 else kwargs["messages"] - heliconeLogger.log_success(model=model, messages=messages, response_obj=result, start_time=start_time, end_time=end_time) + heliconeLogger.log_success(model=model, messages=messages, response_obj=result, start_time=start_time, end_time=end_time, print_verbose=print_verbose) except: + print_verbose(f"Success Callback Error - {traceback.format_exc()}") pass if success_handler and callable(success_handler): success_handler(args, kwargs) pass except: + print_verbose(f"Success Callback Error - {traceback.format_exc()}") pass diff --git a/dist/litellm-0.1.222-py3-none-any.whl b/dist/litellm-0.1.222-py3-none-any.whl deleted file mode 100644 index c16ca3268216f647bc18728bea69717b6d444e47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10305 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 diff --git a/dist/litellm-0.1.226-py3-none-any.whl b/dist/litellm-0.1.226-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..8910c20fb6edf757ce48df48c25593b7a30715a2 GIT binary patch literal 11935 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 A0RR91 literal 0 HcmV?d00001 diff --git a/dist/litellm-0.1.226.tar.gz b/dist/litellm-0.1.226.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..336259f3f374f6a17241518d5274eecff860cff4 GIT binary patch literal 11458 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 d3q+gXNZS*%bh^OD-?*l1PaH-)hd9Jh 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 Y`P6bPk*5jx*uCK2c 0 else kwargs["model"] messages = args[1] if len(args) > 1 else kwargs["messages"] - heliconeLogger.log_success(model=model, messages=messages, response_obj=result, start_time=start_time, end_time=end_time) + heliconeLogger.log_success(model=model, messages=messages, response_obj=result, start_time=start_time, end_time=end_time, print_verbose=print_verbose) except: + print_verbose(f"Success Callback Error - {traceback.format_exc()}") pass if success_handler and callable(success_handler): success_handler(args, kwargs) pass except: + print_verbose(f"Success Callback Error - {traceback.format_exc()}") pass diff --git a/setup.py b/setup.py index 641473e0a4..98597b52ca 100644 --- a/setup.py +++ b/setup.py @@ -2,12 +2,15 @@ from setuptools import setup, find_packages setup( name='litellm', - version='0.1.222', + version='0.1.226', description='Library to easily interface with LLM API providers', author='BerriAI', packages=[ 'litellm' ], + package_data={ + "litellm": ["integrations/*"], # Specify the directory path relative to your package + }, install_requires=[ 'openai', 'cohere',