From 88bd1df3e0f6b7e0cc875ce3c4bc5a68bacbcbed Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 29 Aug 2023 12:29:56 -0700 Subject: [PATCH] adding exception handling for together ai --- litellm/__init__.py | 3 +- litellm/__pycache__/__init__.cpython-311.pyc | Bin 7634 -> 7679 bytes litellm/__pycache__/main.cpython-311.pyc | Bin 29301 -> 29818 bytes litellm/__pycache__/utils.cpython-311.pyc | Bin 70364 -> 72933 bytes litellm/exceptions.py | 11 +++ litellm/main.py | 11 +-- litellm/tests/test_exceptions.py | 82 ++++++++++--------- litellm/utils.py | 32 ++++++++ 8 files changed, 96 insertions(+), 43 deletions(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index ef2a5b3cf2..349f427b93 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -286,10 +286,11 @@ from .utils import ( ) from .main import * # type: ignore from .integrations import * -from openai.error import ( +from .exceptions import ( AuthenticationError, InvalidRequestError, RateLimitError, ServiceUnavailableError, OpenAIError, + ContextWindowExceededError ) diff --git a/litellm/__pycache__/__init__.cpython-311.pyc b/litellm/__pycache__/__init__.cpython-311.pyc index f49d4c5b411fb1c5783146cfc642fcd5774055e7..a37c35ddb6e860d72729510e96005ab5ec2101c2 100644 GIT binary patch delta 260 zcmca){ok5*IWI340}!Y=zDqHj$ScYCXQTQZ7TJ)Lh@8OOps1kS;Hco-kf@N{(5TSd zu&A)y@Tl<3GOSB@8QCTu6iSf0CFPu-SCU#$5}uitl3(sxk(`>ElA7XLRFq$&8L?Se zSe}`iD-|eOP?DLSS3KEYOiCjTXkU>zh%g2bhCt#MhfQvNN@-52T~P;+%Lv599-Di_ RKC{KLGctW(paB84902J_MEU># delta 194 zcmexweaV`4IWI340}!xDyiF0F$ScYCW25>V7Dz4BzZ5EYHl#lV6aUmzb%ST2z!@G&xsHYI2X5Bv(7oR7M~! Xw%fd3>@!<18za*P2C5N7#z3P1!GbV^ diff --git a/litellm/__pycache__/main.cpython-311.pyc b/litellm/__pycache__/main.cpython-311.pyc index 51744654fa6b74e7bd3a3e187c0b47ccb726d6c2..0fdab360cae28174dd029697d9358fc48328d607 100644 GIT binary patch delta 4172 zcmbtX4NzRw6@K?EyM(`Gm;C|upJjo-hM$B0`QtAk1T>n}M2)W@Yv3(`&3n7>_7Nez zH6+HWwKXJXrmYoI>ZEC`RITf1s*au5s+nq2GGa})4Z7L`}Y$ehs!}@nxGeRxm?wO2nNo8HmzU~jhs=;Kb?>-7H|b(Ay+8cIGbqa?4pBn;8;4pL~x2O&ZX)Zf?M=(9#zj2ibOBx zRrM^P*dzKlA9fg?2qjzzw%J0dSjLqRhGjw};iYi8yP$?E#{vBpcB|kj=#J{-TpaUr zes$84@G=;vwCZudaERe5Lq=T51V>3RseYf_I{&mUp3C$-7b3CGKYbl$No1DZ_k^kqHBY&4=JVdrK@IksY z@k;uggxm*fGX6}SOn5T=EOu(_cG#U=m42VXD1>)I#9375*~8KoCYfbFZD%jViyp4Y zq7xd1c>OGN$Uii#jgc&nL{;q)2nD5xj#Ih7C zUp%`aFt7Bf`j<%2udJ9~ao0XuUm=OW<$S`o176riV9X^2P?Kqa_l@P5bv&(ZUWpfG^M%w{_ zywzj{d@Ijwcckp$c@LhF$H&)xjnEl63sjr(7Jz6G$fOsJntr6oiEK&KoAZfg4mj|Z zSDjzY(Q;l#ISTF8T4KdRTHr9In>TUHT2073iL?18@?U1UXW0#(71+tUU@P+@$zbM~lA{MzA6{J|L@gtquPUdu;?jbeMeQQQ=7B8;+bqJyRhG?nF$PMRO?>rz-I2Tovx zd_t{~)Q0DqPpUyos$0nQD)}y!n8{{!k*ea{q864>TEaJ^7Eye?1Pk;mF-lZoP{Q6` z`p||OQ$Bd+i}Ko34+DKI_>!)O2 z7vG%nL)c@y9JeaQfr_hY-B$4U8%#r2zk~P&`Ei(W=R;R{#C`=+Q>!tIg4xN-kh#pU zWQ>jIk-B>!v!XFYQkK6H?x<)j99C9i&2?V=3q=_D33#EREMsJj?FI;BT0Q)}*{*b$ zANdNPx2izz`U22)`6(6X0spmtjv&w?qQEkgak`lqo2wp_Bn_2$={RGY#S$5)Y#@i=Wz!lsR$6aX z+;MLtPyYEr@c4TnyUJN|aKYkZr2KfNoLI16@v|zOli!3JtBT0|iGivYiD6qgNoEPr z-MjlEyMxj0aKc~HONa-KE+4c-acVNXr!U&y6N)9%RNH? zy>)dcU#xp;F;lUgovj}rQD|`?A2Y1a(`vk{mIq8T$KBzS@&nwJglQ{qMU=9)&_M!8tVu= zx3*I&=~0Kz*A6F?b?eE>tSds0%-A^G6B>~FqmiVR9})**$-KQG314%tr*D@W6fsOf zOd5yx8cTJL(j|{UX44_^SmJP#m0(a$G`l>nQTui(9zl^z>z6~Kw2$`hqT)@s(7f@M zDLTaVM5Sq}PwwF+4J2u`**tbe5g`tDt^kQ|Dnc6kz#E&Y~v@c-l}bNOb%WamAw z>f5VE+h*8sVtZ>;Lv+v-ut95wFY#8}B)OvdV7nnx>#d&3b|-!iI7{}wYp_gN8zy>= zN3p^CoMF|pVbzpj)p?Wc`{IG;M2|GB=&KI3{vV z_Dy>lrY!WH_dB(Hy1MYtmw5?;x+;P6N_UVr4(#BK$)1@6}jMJsppJ|^i zO+0?{o4Wm@c*ZePYk*~rU+1CC8`^dkZO{4I*U|QTQF{?>-`8xk)AoY9(@NV*^&3~x z_HX_Ts^34C2DG$)dQ(+vwW@Tw)~hp5Z)VzvY6-BJt$||A=|FZ~YruuAD-Guq!-uzD zW?2I7bG2F>=BYW6|Bd5po=QfN)ZvR866A7L>WANU6_7pfm#%V5O2f_?-5EqLy$bC+ z_mNCEy|Yb=A9aj9kr{kl>yOZ}TdBB(irY}&8Y;~=YETKji)!8QZ@y#WGgMtky^PZH z^A74N*|fW`R5k7X0tK>P><;lf);;M(YJ3(R2)PWjTuK+Ic!`QX!tY5!R`Ab#$qZ$_f=l_+Y7f|3rs_vjv_S NwCYp~4{r?q^gja$^Hu-= delta 3943 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

1bO!m3;wUhY)Df`Vtc3#!uVHk!3?e zz;RKKCUaD$aTf5)=sE};dlS2qd3-$-Lw(6};&@&>yM?WZV(|6p|35HGtoq=`32ef_ zuM?Q*cx)p31*>h>Gx#R%>UfFrKOJ4VF6!Vvlh^}kxh!W`8Vd`KKWb*JEY+oB#lzAl il#K_IQ&?loF2=wxUmY(|{->i$cOJYgg{?NAv-lrP<^lcy delta 11803 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 Nt@k^n;tEa<|1VlYmW}`b diff --git a/litellm/exceptions.py b/litellm/exceptions.py index 7b48a343d6..26a6e8b9f9 100644 --- a/litellm/exceptions.py +++ b/litellm/exceptions.py @@ -28,6 +28,17 @@ class InvalidRequestError(InvalidRequestError): # type: ignore self.message, f"{self.model}" ) # Call the base class constructor with the parameters it needs +# sub class of invalid request error - meant to give more granularity for error handling context window exceeded errors +class ContextWindowExceededError(InvalidRequestError): # type: ignore + def __init__(self, message, model, llm_provider): + self.status_code = 400 + self.message = message + self.model = model + self.llm_provider = llm_provider + super().__init__( + self.message, self.model, self.llm_provider + ) # Call the base class constructor with the parameters it needs + class RateLimitError(RateLimitError): # type: ignore def __init__(self, message, llm_provider): diff --git a/litellm/main.py b/litellm/main.py index 6cdce68f35..2a68e04694 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1,4 +1,4 @@ -import os, openai, sys +import os, openai, sys, json from typing import Any from functools import partial import dotenv, traceback, random, asyncio, time, contextvars @@ -539,6 +539,7 @@ def completion( return response response = model_response elif custom_llm_provider == "together_ai" or ("togethercomputer" in model): + custom_llm_provider = "together_ai" import requests TOGETHER_AI_TOKEN = ( @@ -594,10 +595,10 @@ def completion( ) # make this safe for reading, if output does not exist raise an error json_response = res.json() - if "output" not in json_response: - raise Exception( - f"liteLLM: Error Making TogetherAI request, JSON Response {json_response}" - ) + if "error" in json_response: + raise Exception(json.dumps(json_response)) + elif "error" in json_response["output"]: + raise Exception(json.dumps(json_response["output"])) completion_response = json_response["output"]["choices"][0]["text"] prompt_tokens = len(encoding.encode(prompt)) completion_tokens = len(encoding.encode(completion_response)) diff --git a/litellm/tests/test_exceptions.py b/litellm/tests/test_exceptions.py index 6620eb2aeb..3367bfa166 100644 --- a/litellm/tests/test_exceptions.py +++ b/litellm/tests/test_exceptions.py @@ -12,6 +12,7 @@ from litellm import ( completion, AuthenticationError, InvalidRequestError, + ContextWindowExceededError, RateLimitError, ServiceUnavailableError, OpenAIError, @@ -32,11 +33,12 @@ litellm.failure_callback = ["sentry"] # Approach: Run each model through the test -> assert if the correct error (always the same one) is triggered # models = ["gpt-3.5-turbo", "chatgpt-test", "claude-instant-1", "command-nightly"] -test_model = "claude-instant-1" -models = ["claude-instant-1"] +test_model = "togethercomputer/CodeLlama-34b-Python" +models = ["togethercomputer/CodeLlama-34b-Python"] def logging_fn(model_call_dict): + return if "model" in model_call_dict: print(f"model_call_dict: {model_call_dict['model']}") else: @@ -49,15 +51,16 @@ def test_context_window(model): sample_text = "how does a court case get to the Supreme Court?" * 5000 messages = [{"content": sample_text, "role": "user"}] try: - model = "chatgpt-test" print(f"model: {model}") response = completion( model=model, messages=messages, - custom_llm_provider="azure", logger_fn=logging_fn, ) print(f"response: {response}") + except ContextWindowExceededError as e: + print(f"ContextWindowExceededError: {e.llm_provider}") + return except InvalidRequestError as e: print(f"InvalidRequestError: {e.llm_provider}") return @@ -95,6 +98,9 @@ def invalid_auth(model): # set the model key to an invalid key, depending on th elif model == "command-nightly": temporary_key = os.environ["COHERE_API_KEY"] os.environ["COHERE_API_KEY"] = "bad-key" + elif "togethercomputer" in model: + temporary_key = os.environ["TOGETHERAI_API_KEY"] + os.environ["TOGETHERAI_API_KEY"] = "84060c79880fc49df126d3e87b53f8a463ff6e1c6d27fe64207cde25cdfcd1f24a" elif ( model == "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1" @@ -132,46 +138,48 @@ def invalid_auth(model): # set the model key to an invalid key, depending on th == "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1" ): os.environ["REPLICATE_API_KEY"] = temporary_key + elif ("togethercomputer" in model): + os.environ["TOGETHERAI_API_KEY"] = temporary_key return invalid_auth(test_model) -# # Test 3: Rate Limit Errors -# def test_model(model): -# try: -# sample_text = "how does a court case get to the Supreme Court?" * 50000 -# messages = [{ "content": sample_text,"role": "user"}] -# custom_llm_provider = None -# if model == "chatgpt-test": -# custom_llm_provider = "azure" -# print(f"model: {model}") -# response = completion(model=model, messages=messages, custom_llm_provider=custom_llm_provider) -# except RateLimitError: -# return True -# except OpenAIError: # is at least an openai error -> in case of random model errors - e.g. overloaded server -# return True -# except Exception as e: -# print(f"Uncaught Exception {model}: {type(e).__name__} - {e}") -# pass -# return False +# Test 3: Rate Limit Errors +def test_model(model): + try: + sample_text = "how does a court case get to the Supreme Court?" * 50000 + messages = [{ "content": sample_text,"role": "user"}] + custom_llm_provider = None + if model == "chatgpt-test": + custom_llm_provider = "azure" + print(f"model: {model}") + response = completion(model=model, messages=messages, custom_llm_provider=custom_llm_provider) + except RateLimitError: + return True + except OpenAIError: # is at least an openai error -> in case of random model errors - e.g. overloaded server + return True + except Exception as e: + print(f"Uncaught Exception {model}: {type(e).__name__} - {e}") + pass + return False -# # Repeat each model 500 times -# extended_models = [model for model in models for _ in range(250)] +# Repeat each model 500 times +extended_models = [model for model in models for _ in range(250)] -# def worker(model): -# return test_model(model) +def worker(model): + return test_model(model) -# # Create a dictionary to store the results -# counts = {True: 0, False: 0} +# Create a dictionary to store the results +counts = {True: 0, False: 0} -# # Use Thread Pool Executor -# with ThreadPoolExecutor(max_workers=500) as executor: -# # Use map to start the operation in thread pool -# results = executor.map(worker, extended_models) +# Use Thread Pool Executor +with ThreadPoolExecutor(max_workers=500) as executor: + # Use map to start the operation in thread pool + results = executor.map(worker, extended_models) -# # Iterate over results and count True/False -# for result in results: -# counts[result] += 1 + # Iterate over results and count True/False + for result in results: + counts[result] += 1 -# accuracy_score = counts[True]/(counts[True] + counts[False]) -# print(f"accuracy_score: {accuracy_score}") +accuracy_score = counts[True]/(counts[True] + counts[False]) +print(f"accuracy_score: {accuracy_score}") diff --git a/litellm/utils.py b/litellm/utils.py index 7ceff81966..777c9f3b60 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -25,6 +25,7 @@ from .exceptions import ( RateLimitError, ServiceUnavailableError, OpenAIError, + ContextWindowExceededError ) from typing import List, Dict, Union, Optional from .caching import Cache @@ -1445,6 +1446,37 @@ def exception_type(model, original_exception, custom_llm_provider): message=f"HuggingfaceException - {original_exception.message}", llm_provider="huggingface", ) + elif custom_llm_provider == "together_ai": + error_response = json.loads(error_str) + if "error" in error_response and "`inputs` tokens + `max_new_tokens` must be <=" in error_response["error"]: + exception_mapping_worked = True + raise ContextWindowExceededError( + message=error_response["error"], + model=model, + llm_provider="together_ai" + ) + elif "error" in error_response and "invalid private key" in error_response["error"]: + exception_mapping_worked = True + raise AuthenticationError( + message=error_response["error"], + llm_provider="together_ai" + ) + elif "error" in error_response and "INVALID_ARGUMENT" in error_response["error"]: + exception_mapping_worked = True + raise InvalidRequestError( + message=error_response["error"], + model=model, + llm_provider="together_ai" + ) + elif "error_type" in error_response and error_response["error_type"] == "validation": + exception_mapping_worked = True + raise InvalidRequestError( + message=error_response["error"], + model=model, + llm_provider="together_ai" + ) + print(f"error: {error_response}") + print(f"e: {original_exception}") raise original_exception # base case - return the original exception else: raise original_exception