From dd6b4db09002df693b1f5b14519fde3a70eb04ba Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 7 Aug 2023 12:07:33 -0700 Subject: [PATCH] fixing claude exception-mapping + set key bug --- litellm/__pycache__/main.cpython-311.pyc | Bin 14126 -> 14105 bytes litellm/__pycache__/utils.cpython-311.pyc | Bin 27052 -> 27290 bytes litellm/main.py | 3 +-- litellm/tests/test_api_key_param.py | 23 +++++++++++++++++----- litellm/utils.py | 5 ++++- pyproject.toml | 2 +- 6 files changed, 24 insertions(+), 9 deletions(-) diff --git a/litellm/__pycache__/main.cpython-311.pyc b/litellm/__pycache__/main.cpython-311.pyc index c75deb7212905865fe4d782e7e90ea877ce3f49c..e84e64bc546d1eb3583d4cc246581302e3484727 100644 GIT binary patch delta 563 zcmZ3NH#3iSIWI340}#YHTugbkk#{LOqw(a;?B0yVoBy*vWdw4ba)LO9T>R{e8j~Fb zW#u(%6v`Ni%xV-;G$lbg!5~E|n+e1y5}kZeP;>J#K?O!e?a9Z5)-vjBE)`~EWYnEp zE)vM7H+dqT%H+2qqKx{RnMHRpGU`v>D`v@PF!{TfH>2TXXK_VFqsgg2(qwbHxCb-i z^2ryZIw$8zpJM#E*;1yFnL80=hb)L_oqSY2f-!NkoWfcb#v7Z@sLWv0b7Z`sZPY8& zBXvPU{UWEv1x}5-+(K8l6+SR9vO6-~)i%1K?SPQpJW1_8J7db^NqQ|_sURcMfP|)C zksFAe2_l3*L^g=X0TJ3D0u)-eI9+p-Qd3eg^U{m*L4wU7LFVF;qN1$H3Hox}ogl$3 z5YaukQ(uL<55$xQ5mP7c&{t%g4P?r0zNdemi7{*PJ|jCWkO5#*Tqm;`=W>^UxL|j* zO|CPRW}G~Ema&=ie2}O#h^PY+w^)+%3o45^K>V!9uZ>L^YbGn2*hyu81XMsoC5QkA z7RbJ$=E;>NvW#msPdE9-2(-4(OiU+>nbGD013LMUnSqJ7MfxKv0~1G!*atSSeAMI% GW^n)%8<)}m delta 614 zcmbQ4w=R!&IWI340}!O>UQBtpk#{LOyGad04Pyz{WJev5$!FOO8BI3-XMf6wBK)5d zBy7mV&(5eh*-=ndUaLl-jG@S^Mj=H@5@Z?}q-bX|ffz-ilP?NtZeAv+z{sdG`MA(p zX5AXm$sY_wCU*1&H zXK_VF$Q(c*ckLd%OBgj+8#d_-nI@ zOd~UQ63BX45YaYygM0*I(q>MDwJeMeHg8v%!N}-5IY3Q%@)8xH&9!R(*%?zO*Xp%+ zrGZqZ0|`yRA~z5_3q%Nkh#U}+3nH{Z1Ss5Yak}OvrKY50=A{=EfCO7Wg3QGwMMc?@ zz4hg|yFh~7Afjh-iM|SVKZq$0BBo7VtgpyA2gsD$d{X~D6Jz$|l}2`4AOparxJ~|O zl*?TX;)31LJ~`7^nsLhHR%0{i1t3vr5K#{#Zm}fi7gQE;fcV*yuNj*%)=uUzv9rho z38;XGDi8q<2atVW27heEFXH{d_*>bH8V03*O&> z?x!x71F+yv=h2OeuiW7wQ=f&l51oXYG&7_ee@VPryBIP=6;Dh6JZHNY(j8J$ssTVY z8D4SFrpic%R+Jj3GOH7$AhO>y5w7%|5gZKXWQ0(~GSs;bhdFP!46rfW-1b+_`Hx(E z8Jfv8EJI-rxn%Pqko@Jh((Yt!Ojt*58884w)&Bu{G+={lLEfV)YjrK7K@UwQ!$F@x zz-UMp2r+@0BLN?2H2BrqT|!C*$bSSFMgdJLXF;_FP2D_WaoaU!KC|lT% z73XdA!e6z&ZP;FsB>((YuXIJEpX5nQ!SB#>4Y`9Z?94PEibC__MUBf zPXTn>nhrcs)e+sT@_YrI^zqoTf8XU-1Fg^M^RC3UD^UQhs`HR`r&fClR^Uq%Du5>o zRpF{yt*zbGcGVf%_Z?GP&aGuwVk_?(-1ZHs&Ot`-EJ4O_2bC|Wbr@(n8wVS4$3Voq zk>Ce7^9Rm45K-QahalWib}oE2!9)6bVwL6eWYY1CJ+GvtJ>}ixN3+8T*;z|J=_7O( zey8oY1O8IR@Fg|CJgNQ;1#BfE!x^4t(f zX#uElVi=b5Preu;Eh&hk8`(0j?s_4pZlMxcB!}?VFwbU~%e0J@gJmUZSb*Ne3>`68@K635%F8G> znLA9EU2+an4eJ`I$@XEojM9^H!zONy43}VJ6qsBTVLy3SM7n`GGXp~d!vlGh3oJ4p zn9Nv}?s5uW5K&vpeUa1T3a7~j20eDg2LehLxRh>i3w&hIo*Wq2#B+mJ>VllX1zr%E z{5*0U%a0qp5}PkZ9byz^apzz-&cWqw&U{=*!QF`YxDl(n`Q{ZdQjCljHXn|?!^HSy z@`8kQK+-=kl s1<@c~;vfPPn!h+~a`RJ4b5iY!BsL#RZ)M`QWK{aV04K^Ohi16~0Mmr62><{9 diff --git a/litellm/main.py b/litellm/main.py index ad197a919..7803de2a9 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -164,7 +164,6 @@ def completion( os.environ["REPLICATE_API_TOKEN"] = api_key elif litellm.replicate_key: os.environ["REPLICATE_API_TOKEN"] = litellm.replicate_key - prompt = " ".join([message["content"] for message in messages]) input = {"prompt": prompt} if max_tokens != float('inf'): @@ -199,7 +198,7 @@ def completion( if api_key: os.environ["ANTHROPIC_API_KEY"] = api_key elif litellm.anthropic_key: - os.environ["ANTHROPIC_API_TOKEN"] = litellm.anthropic_key + os.environ["ANTHROPIC_API_KEY"] = litellm.anthropic_key prompt = f"{HUMAN_PROMPT}" for message in messages: if "role" in message: diff --git a/litellm/tests/test_api_key_param.py b/litellm/tests/test_api_key_param.py index 7ffffcda8..6213730f5 100644 --- a/litellm/tests/test_api_key_param.py +++ b/litellm/tests/test_api_key_param.py @@ -15,14 +15,27 @@ 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 1: Setting key dynamically +temp_key = os.environ.get("ANTHROPIC_API_KEY") +os.environ["ANTHROPIC_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) + response = completion(model="claude-instant-1", 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 +os.environ["ANTHROPIC_API_KEY"] = temp_key + + +## Test 2: Setting key via __init__ params +litellm.anthropic_key = os.environ.get("ANTHROPIC_API_KEY") +os.environ.pop("ANTHROPIC_API_KEY") +# test on openai completion call +try: + response = completion(model="claude-instant-1", messages=messages, logger_fn=logger_fn) + print(f"response: {response}") +except: + print(f"error occurred: {traceback.format_exc()}") + pass +os.environ["ANTHROPIC_API_KEY"] = temp_key diff --git a/litellm/utils.py b/litellm/utils.py index 4f671a231..411c21f24 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -417,7 +417,7 @@ def exception_type(model, original_exception): exception_type = "" logging(model=model, additional_args={"error_str": error_str, "exception_type": exception_type, "original_exception": original_exception}, logger_fn=user_logger_fn) if "claude" in model: #one of the anthropics - if "status_code" in original_exception: + if hasattr(original_exception, "status_code"): print_verbose(f"status_code: {original_exception.status_code}") if original_exception.status_code == 401: exception_mapping_worked = True @@ -428,6 +428,9 @@ def exception_type(model, original_exception): elif original_exception.status_code == 429: exception_mapping_worked = True raise RateLimitError(f"AnthropicException - {original_exception.message}") + elif "Could not resolve authentication method. Expected either api_key or auth_token to be set." in error_str: + exception_mapping_worked = True + raise AuthenticationError(f"AnthropicException - {error_str}") elif "replicate" in model: if "Incorrect authentication token" in error_str: exception_mapping_worked = True diff --git a/pyproject.toml b/pyproject.toml index 98ace7d78..15d3b592e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "0.1.353" +version = "0.1.354" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License"