From a8b3fc6c2d5827c510140b150bbca2aa9b6d2ae4 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 3 Aug 2023 10:06:31 -0700 Subject: [PATCH] adding tenacity retries --- litellm/__init__.py | 1 + litellm/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1006 bytes litellm/__pycache__/main.cpython-311.pyc | Bin 0 -> 12259 bytes litellm/__pycache__/timeout.cpython-311.pyc | Bin 0 -> 5167 bytes litellm/__pycache__/utils.cpython-311.pyc | Bin 0 -> 18717 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 201 bytes litellm/main.py | 6 ++++++ litellm/tests/test_api_key_param.py | 3 ++- litellm/tests/test_bad_params.py | 20 +++++++++++++++--- litellm/tests/test_timeout.py | 3 ++- litellm/timeout.py | 13 +++++++----- setup.py | 2 +- 12 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 litellm/__pycache__/__init__.cpython-311.pyc create mode 100644 litellm/__pycache__/main.cpython-311.pyc create mode 100644 litellm/__pycache__/timeout.cpython-311.pyc create mode 100644 litellm/__pycache__/utils.cpython-311.pyc create mode 100644 litellm/integrations/__pycache__/__init__.cpython-311.pyc diff --git a/litellm/__init__.py b/litellm/__init__.py index b0c53be1c..01e40bc69 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -3,6 +3,7 @@ failure_callback = [] set_verbose=False telemetry=True max_tokens = 256 # OpenAI Defaults +retry = True # control tenacity retries. ####### PROXY PARAMS ################### configurable params if you use proxy models like Helicone api_base = None headers = None diff --git a/litellm/__pycache__/__init__.cpython-311.pyc b/litellm/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..72f69328e0d8f3331f85a2fbb2a125cafaecd01e GIT binary patch literal 1006 zcmZ`%J8#rL5MJBooX>Z5e0dQmkAemr!nr&k4TuU+MKpxQLbCR}i*I%7hwOEfvxIcN zfR>&H@lTLwoC?bgNL1-gN|%c9=`JJ!tl4j8zWH`NGxlf0&=EWjzJDV|1EF7auz2LT zbM*n7kH|+(y(EGhnMjU8WTyeUN)%@aR?|nM@kw$tqWY54B1?ceX%fwsoi^2ID~DUC zKErm6PKUHWV-TIRxfz&_DIxGXd^xZjE9g4iV8vOPaRy&Kt#bxngI#%zdgja1OC%xm zs@KR3KNj}U-V)O&U=n69E`f2}73QhD!Ny5@08AcqB81BD_yexq6 zrhU#}9z3|&U6+MSxb9v&zSf>WWf`Z>lO4FL{zmB!fT1!;dT&V1@TSB|q;Bf4E&7rz$EUPTWLt@^$gZ!%++-P=GmfdZRe=+Gsa!7Ky_SolW@6kw19SZx3F`yR!i zD9K(c!D5R(4!?Qx&3oTFzT>^`d-LZ`r;R{*|Cj&5@7zYnukfLg>XtHJSPX>RBRt`m zB#D&oOoXA&hKPaQjS(Zgn<6H-8xOdQw@=ZR3H*a1tUR* z7>M8)Z>$X90c1X^JP?MA5}xDD^k?B2DBHwaA23h`{^bNTNdiiZIC$F>6KNJ)P^tm` zL8xVa=y(7#@e%yX3Ge~lxq^a=ubUzd>mQh)B>eS~Zr)y7a$UV)csmb$hQIqh%X_Ab zwPSnUQ>2BCVy*TqK$RIW@!l!sxfEJ?-xP_o@yuBg_J4*$8V)m>aWH*7Y}BlSX=zN% zOeEr(|D+-c$UGrq6%tSOcA_-zN zCP_kSLec_PV+koL#?pKy6&0>cWYW-ZB9_$1XUOPRHDe+@5_gn2Lm~3X2>&m-p};+m zfSf}HX}OFzBC;}(9XvAtd70r2I+g*fkzx(JNyi!h%Tlay8P*6`j$%#AuqMEoDVBv+ zSa`C~CyuYS%>mX*v1Un^Q$l!Ktu*QFo1wg&mbdT@9cuxslVYvQuvWmjDAty!wrB%v z9mU$0jn)p>dWv;`6u5^q>&Rp}j{M7t^)NM>v+_*YB)So2M~(<$Oaks{EV61sW6~Oz zl|&(y(oD!b(Ss#zso1rsl({SbIaDyMenJ$oLOL!)Cxmn?DP7mxBckw!lYqLeqii5e z!0StiSXMJlW(5(%k{wBAVp7;C`hbk+N6>&EfFOtf4TRW)pcz36f>s1=2-*Q?br~v} zv1D{2CdN|PtP`-I<>@zjd(T6I+1|^dn8=RtW0_>^aw67yBom)Zfxu;ZlL<*kCR6%7 z6-%VIPh8i$qkWWC~{$gW=tj00AklZL+LmdU#1F#1q@Z+Ly);g zmaBu}euIY|_kGK>`aSYGyD} z@k|OV))Iq7lnoF(d$~>)iV0b4H6(Td{EcNG8B1N_V+X}vczhZDSsYZJd_~An!zn|F zkkf{58@|L_9G?WkqygStHQYqxRl^bE=U8&c2v2y+6R{fzK&MP->ZmAdW)bu(krgyw zxf_BgX2hz+WHobaA`!hTTn9zXh@e&#d&|adpmti(FoP8xNo(dSf_N#D72+;v1rts% z=IJDlgXO$OthLi@kd3klEEp%7Ws7W;Z8F#k+4+!p0Hr_DZEemg*Mm(#7Lpl8H1bA? z=JA=3sGgU&G6vze&a_*OwejgTiSA;`b;k9&bLJ|QYK}M6TF#mt=xwcwBKsVQmP*UA z>y|-wt+TJ(b0}LYlqEEBO9|F0My{9L56!hZ5QfyuoxM_C+$iay4|A<^Y8-`{CVmIf zT)Q@Jxo?!cKWF}!$@ykX>HmH)TD3@t=5G4S&9_guwo(hK|l> zp48yK8Mhq&$GPRK;a0;7a?7=hTgLSNtl(C~OF(Y@`u`ud__{gV-K&D_3RGRJX0Mbn(FnH3D)K}Y>->*zyw?E(jyYD@>$OZ%ax*7pG_ zhV)mwR|dX=CFj;Hk_`A@tRWN(y=Id~TrQ*;?rrAwMBGKkC`rr*qBxM!6ZR z%pMtXx|2`%P38TB=m!m`sR`wJs^xw{erlj2@ZZ@4CATkc1MeJXS-H{8G`bW{^bhkK*x(F;OqxqYmc<0ww+wN^sNd_ka2Y9Xp-Ak zlnXsmZ@0dP-maecwRT-{XfCwWftnlI>(w?@*Q^em#bmsrQgP*+)A`)Bq94!N{S8&9 zfWrgXYFsSWA-z_8$8VE6R`c#QBm2&hE+QSRmh2|twp{1x)+_QScRt+y0QTY^!M~iq z`kbib>5A3)u(#Ic+=i%PuJdN+Rpu(WX1qwQGU1)WVaGRd<B6@h@E7&NP!PrIOH;rSGG?6{f+Y2t(_A+iexRAY9c51Fu zr-z0iP=+0YR>MXSg_l+r2O$UabcDu)YW!Z@#CqZX1;#DzLBL8TZ`*PV1gS_>eBLwM zv7aR$GMYJ_NlOrz_>g>P&ya#n2v$wU_Y+lhlW+VGYXFvhceAen)9 zT=pPjD(`P$)2P0Aq6CkWuaC{Mfw{(F;}#uLc2(zpo`NJ=#$I|URpt0+t)6LIjI zHSd|B(&}FT!Y&>|a2!B(+2F<30rA^LJ&QGm5p*NK z-Y<(_B|$KxG0lb1th8{o6464l8D`6zJcu=@OxDGCK7q3fVWyZknk`EgBhnJM>ja*S zWfBk!Ek~=ctC}^I%>oBvX$eFF)loBv8Hi9A!LLuGArcjZ&{{T=MzQ6EYvM^P;vO76 zcl6Au)5i{11WmjMcpB@XL@IJenc=I(;$Q&LYz(E~h6~0Mf|wk{Q?tT>kmfpk>gdpt zO8p-Bv54c)`Eg^*a3*vmmQ3)Ws_=%W9*1y>LlZE40v}4GL)$`OZUslg3rGxgT(j!o z=?}{qsChDC0+b$jrN5$L6y8XKcj6(eX2Bo}#9DSS5IqN`f^M{-@rcF}(Kx)1R!116Bg|IcOTx9a z-kZiV5Jt0ADT^U&^E3d>C{CuedXTGfFn@`ph%$NXi`=#D-Ts{l1j0$NC4hxzI`>Szf8>87S#FCT35C*U`>rmyG zK*V@QxT|Uozsaglp757&M5v0C=i*+>;cBZ{DsoQsTl4DHDN6Z^VQQ+SVBsevSR6DH z#ClVj165wHN;S`_PpJ4dk{6LYOc|XQjK&$_8O?;EsWC#f3*IgdGCw0vnjpQ!c!t1~w`ECzXqFWjtLnn*!YD1i+UF z@~28RVsXxxZs%_07K82Yj!b11w(cr!9Z`{U}|90tL$NxS3&uQiDRAD$> z98S|x&8_zj{OsTd2bIm=Dl{J~HXnRj zn(v;%@j+)1Sg^A&zVhRmO{593qoJU_bj{cGhl{?R_T7lKEM0PBW|bwl})GJhN9 zCm&lC?s$PaUgVBLW{JNx;IFr_=@3y$8~xHNj=+X_9lY{;Om9F(V( zvYvqIZ!WR4m=TKspnS9tn}3#7tgQuW>sK6c)!&Ky=sVy4j?%KT;Or|p`#=E9yZ=i3 z%Nu`v^Dk~HuU;(djTHArD0ZPObbtJ3=?~J%wpR*mgT=N%#nP;9effumJ2u7JQ?P^; zOIWpg;F!d`Tiy234?TC96koVt-Td3;L9GkSHYl!8UQn&x_a|r1zbD_7pIEyTYnR&A zGtEvX3(!*M)@fF8wG}Mw<$3eZ3y+h^x$h`LQRT9vaFYdYvdB$B=4oBiHc~L%ty=15jub4xY0I=_(c)fg?Na>>i_KkXu&cxx zgRT-mU^d%9sSp^gpd3bfgC(CV1&OCEKXz+OwYpG4HY?W6Fy=*TJ<{H#Zs{ve#HNC^ zXTj5^)P?dRsBXk;K0v|rCe`kqc|)hS!uMQP}tyE=cp zxM@G+;3_!!r(d0ZbrIe*Dh>PQUYkEw?A`-8xC)Ma^qsB#eOdACpL=8eVsXP>$iY>x z?VsK_y;0>H@9&>+!7*2UWWm$?-j=&t@`=S&6W?;NCN|Cz)nMH347?n@Gy-&QoDhQyrQSI1WG85m9s;K72OAcc7ROWX>v3bV} zOz~GiV)iM%U2|^%fUCg0RODV#xR+FSYkmxvS)Tb#iWM)lZG+Obb7t?%-l`m5DC~Ws zxc80x_=4Si=UcN)1$%eV-krbn+a$9(<{AxMbbIeL|F{|COLYf8%{;B26QjohYUZ)z z$G}+HeT!XTwYg=nBRt>n^X6j5PPHuzlGNq{NdjOt*MWE-Fj^ZxoR&*ceyrT;D!aen z^nUNnJ8$Os1xJGtI01`Q-~?O+$H}4t*9Fz?&7b=9f)zB-WE`l1rzZQ%hS_U1j4Kgx z$Z!}>(byvfI5qgSpXu+ej6js#o_COL4C#8y4aE^5AQ(X~ihxHjhCp{! z!8fb4D30TsEC9_2-}aQ9-(baA)jL-4DX(Mc8wmag0d?#wD}C{o@D=*vqKse)!Mgym zXnHG-5%q+?S=T%A19)iwW1Ia?0N@XC9mWB*&YM4~njPrgjdyR{yZPgrbD2V5Pcg8ky32>%+N0|VcdWo2D{{vm^VA(Ex;s8~ z_dId;%uhZ#uef^(?!!g*;r!SF=T&_Df0mu!_oum^=RQ9B@uiQ?;_k=S4_AR3C~^Y| zy_OdKKE;aHl2f7vcP;lp^gbyY_Y?wqi-El_-l-wlsY6Bgp>=dh-<{Tuw|4bD{`iOz zI1X3AaiZurp>QV_pSyZb&JR7hsGK>gn9dbU=ZdCtka?j+`n87F8p$sjZAYEPUvzCa zYB7FdVIjXNEJzpWKLM$L4}$sgJ1 zI2u?p5ocSxg}{UWnMDIqnpF~Gae;m!%JCV9ZC{~NAR?>E!8EiiB5ofdo*fep3hVOA1xSk`GLKZZ%IeV_eBSXHe_iv+mj0Jp1vH$LAlP|77<+ zy!DT7f$u!u@yPJlQ?lm_%s|OS>V0#4^XDJ&pA41iD2l9vpBst6In|7}N^6+6Of{4^ qTJ{h}N1}H?ZHA!Tqs~uECDI9P=wKNktZc%U#~BlYTD3N$68gX3q^B4F literal 0 HcmV?d00001 diff --git a/litellm/__pycache__/timeout.cpython-311.pyc b/litellm/__pycache__/timeout.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7211e4a7ef94e6b8043acab4eb8dff1663a7f2f GIT binary patch literal 5167 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 literal 0 HcmV?d00001 diff --git a/litellm/integrations/__pycache__/__init__.cpython-311.pyc b/litellm/integrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ece0d4ef5b4ca996909ab168c8553e9cc30a5a4 GIT binary patch literal 201 zcmZ3^%ge<81e_;Mr|<*m#~=<2FhLog`GAb+3@HpLj5!P;3@J>(44TX@8G(YDjJFuI z{D36GN`}uM)xSLSLyJ?3iuJRLiZY8cQZn*$60&ryk0@&FAkgB{FKt1RJ$S$pur&9iiLp02WCb_#v2U$ L4RBb*1{4MWvPm>j literal 0 HcmV?d00001 diff --git a/litellm/main.py b/litellm/main.py index 898f40ae4..c414fd5fc 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -7,6 +7,11 @@ import traceback import litellm from litellm import client, logging, exception_type, timeout, success_callback, failure_callback import random +from tenacity import ( + retry, + stop_after_attempt, + wait_random_exponential, +) # for exponential backoff ####### ENVIRONMENT VARIABLES ################### dotenv.load_dotenv() # Loading env variables using dotenv @@ -55,6 +60,7 @@ def get_optional_params( ####### COMPLETION ENDPOINTS ################ ############################################# @client +@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(2), reraise=True, retry_error_callback=lambda retry_state: setattr(retry_state.outcome, 'retry_variable', litellm.retry)) # retry call, turn this off by setting `litellm.retry = False` @timeout(60) ## set timeouts, in case calls hang (e.g. Azure) - default is 60s, override with `force_timeout` def completion( model, messages, # required params diff --git a/litellm/tests/test_api_key_param.py b/litellm/tests/test_api_key_param.py index bd9569495..7ffffcda8 100644 --- a/litellm/tests/test_api_key_param.py +++ b/litellm/tests/test_api_key_param.py @@ -15,13 +15,14 @@ def logger_fn(model_call_object: dict): user_message = "Hello, how are you?" messages = [{ "content": user_message,"role": "user"}] +print(os.environ) temp_key = os.environ.get("OPENAI_API_KEY") os.environ["OPENAI_API_KEY"] = "bad-key" # test on openai completion call try: response = completion(model="gpt-3.5-turbo", messages=messages, logger_fn=logger_fn, api_key=temp_key) + print(f"response: {response}") except: print(f"error occurred: {traceback.format_exc()}") pass - os.environ["OPENAI_API_KEY"] = temp_key diff --git a/litellm/tests/test_bad_params.py b/litellm/tests/test_bad_params.py index 53872e5fa..0a2313c78 100644 --- a/litellm/tests/test_bad_params.py +++ b/litellm/tests/test_bad_params.py @@ -4,7 +4,8 @@ import sys, os import traceback - +from dotenv import load_dotenv +load_dotenv() # Get the current directory of the script current_dir = os.path.dirname(os.path.abspath(__file__)) @@ -19,7 +20,7 @@ import litellm from litellm import embedding, completion - +litellm.set_verbose = True litellm.success_callback = ["posthog"] litellm.failure_callback = ["slack", "sentry", "posthog"] @@ -35,4 +36,17 @@ def test_completion_with_empty_model(): response = completion(model=model_val, messages=messages) except Exception as e: print(f"error occurred: {e}") - pass \ No newline at end of file + pass + + +#bad key +temp_key = os.environ.get("OPENAI_API_KEY") +os.environ["OPENAI_API_KEY"] = "bad-key" +# test on openai completion call +try: + response = completion(model="gpt-3.5-turbo", messages=messages) + print(f"response: {response}") +except: + print(f"error occurred: {traceback.format_exc()}") + pass +os.environ["OPENAI_API_KEY"] = temp_key \ No newline at end of file diff --git a/litellm/tests/test_timeout.py b/litellm/tests/test_timeout.py index fd36effc3..31f27e12b 100644 --- a/litellm/tests/test_timeout.py +++ b/litellm/tests/test_timeout.py @@ -18,7 +18,8 @@ start_time = time.time() try: stop_after_10_s(force_timeout=1) -except: +except Exception as e: + print(e) pass end_time = time.time() diff --git a/litellm/timeout.py b/litellm/timeout.py index 8cbe650ed..37bbbffc1 100644 --- a/litellm/timeout.py +++ b/litellm/timeout.py @@ -37,26 +37,29 @@ def timeout( thread = _LoopWrapper() thread.start() future = asyncio.run_coroutine_threadsafe(async_func(), thread.loop) + local_timeout_duration = timeout_duration + if "force_timeout" in kwargs: + local_timeout_duration = kwargs["force_timeout"] try: - local_timeout_duration = timeout_duration - if "force_timeout" in kwargs: - local_timeout_duration = kwargs["force_timeout"] result = future.result(timeout=local_timeout_duration) except futures.TimeoutError: thread.stop_loop() - raise exception_to_raise() + raise exception_to_raise(f"A timeout error occurred. The function call took longer than {local_timeout_duration} second(s).") thread.stop_loop() return result @wraps(func) async def async_wrapper(*args, **kwargs): + local_timeout_duration = timeout_duration + if "force_timeout" in kwargs: + local_timeout_duration = kwargs["force_timeout"] try: value = await asyncio.wait_for( func(*args, **kwargs), timeout=timeout_duration ) return value except asyncio.TimeoutError: - raise exception_to_raise() + raise exception_to_raise(f"A timeout error occurred. The function call took longer than {local_timeout_duration} second(s).") if iscoroutinefunction(func): return async_wrapper diff --git a/setup.py b/setup.py index 98597b52c..d5b99c706 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='litellm', - version='0.1.226', + version='0.1.227', description='Library to easily interface with LLM API providers', author='BerriAI', packages=[