From 7575d7ea47666055c708d246fbb817fdc4d4105c Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 5 Aug 2023 12:20:09 -0700 Subject: [PATCH] version '0.1.341' returns usage across providers --- litellm/__pycache__/__init__.cpython-311.pyc | Bin 1656 -> 1656 bytes litellm/__pycache__/main.cpython-311.pyc | Bin 12126 -> 14286 bytes litellm/__pycache__/utils.cpython-311.pyc | Bin 20446 -> 20794 bytes litellm/main.py | 118 +++++++++++------- ...st_completion.cpython-311-pytest-7.4.0.pyc | Bin 6216 -> 5895 bytes litellm/tests/test_completion.py | 10 +- litellm/utils.py | 9 +- pyproject.toml | 3 +- requirements.txt | 3 +- 9 files changed, 89 insertions(+), 54 deletions(-) diff --git a/litellm/__pycache__/__init__.cpython-311.pyc b/litellm/__pycache__/__init__.cpython-311.pyc index fd307768611934eb142198f4e05aa0b9ee9ff9a7..c047a814425c1dfb3cbdc7d5600ae36110a1c407 100644 GIT binary patch delta 20 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 delta 4791 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 RoTnd0t7r`#psya>@juFwWxN0Y delta 2498 zcmbVNYiv_x7(SPt)AqF8+U>0CHZHDXg97c?1%%b^ZVLb7_%irNuyl;_(NhcVl;#w#_v5{S&>8&zobu}_xiox zd(QWsua2{~jv-~e<$CAEf>ECPm500h4pWjL50jiC!myzf{G8dekx5KS zG8zMOIJuPy1t?6cenXCLWJo~Mvt~8@V$PBj72`8h&?NZHFqxIWA|M{DkRc$L+_AS5 zOOm1CRhpa&VVHhPjvuqaH#Nme8O3^vWth+DFS}@33Dd^H|0v0p^Z2iva9EIOA%$W| zbwOT?``_w-hk{(K@0;Xl1%>*-rskp;h_k_+kBylUst3mMw#3)h?PJ7R?PFU%i>UUCw$3>3P zzYISZA0&n7VMf5WmNcQktj2~0R1((I44=>l*^ic0aNg&1968nY^XokCqe(yg5oFn8AUlL` z7~w;N-SEqNZ|xdNGo}GGkqGyx36H41zT^^Wtwc=>#$yS!C;m!5>Bg94(7s^W@?(^G zO7+u|k5R23+>cD(_Y|@d2&WM~MaUi=*(V5k1N5e0tH>~1UNEy;KfgWi)JxHp-56P3 z6Hq*da2DY_!Ucpg2zUd@C8%qvlDd#0m{Tt`jd2prRG$8R-v?^~&HMpPfV+Wm7+z$D zD}lvsh1bXBKE;q^>4@8_*{JXMQiLSiZ-lm%a(KO2s5U;*iyP>Tq}!A!#_gQu$m!|8 zGC{a`%Dmky2Ika?dEC81cQ485(VhBXEA<5jTU|3A3zQz)2gk(t%I;IMn~i-tKJQh< zn&jyL}o4^HT$b#wDO61=oi4UT}X0- zOA1-L!fY3I2%FeV%w~Qqvx)VTb_dDo)Sz?2LHc}jXc|%$s4f;SBM#EeL90l0{qd$mx z6jveO%qRFg&_}gC0`>c?cU~`=q|v%EWnbFG$~CNcjCmYZKz!Moh4Wb2!EClelGfb~!UE z8my@z_@JQmJ}6SKzEq@Yk$|G;Lmvd6B!LQLq2OCzd{{{F!52Menr72VE_1)R_niBk zbI+V}=C|4Rrqf@hQgMc3{KD_e=GIrj zqa~YnMH}jVh>Of!+JH>Svij^J1C7?&8ZuXXNTDo?GdP5BmR;8dw&F9Nwh-{y)@HA2 zvs<^H9rT_XmW}KW@*5??ZTX8*9mpdOC~|pInNc7qxj7^^R6~rQ%#`n|>oS|rWkS2b zvvNn9I+`N_vAT)SYqmXb!VY*{5w_a3Ht3`^2?hy@2!Vo7Dxv9RF(=Bn8QJ_uyu}lA zZx|)GPYxSn7KLEPVb1}SNH->5G?uJ`Onzs~i)lPIzWJB&J>S@8lDHEDhY^m${fPC~ z>$smJVdN|EKVPJ>2`GC|LFnp12%gh~DoLgY4vx`)BvHz;Chkq{^5#%d*?b}XwsLr$ zl$z&vnzqu7HCii9Sa11Vt>f22SU{z%!o2)DSw8VFos72~aGGA|K>!pOYWKcPcVM;S zuMj=xe{Ngti|1e%DR2)$K=oLPGSEs@#1ptXviW(c%P0HhgtLxW?3=nPb6;de#8b$7 zUS7#u;y=sF>9JBsrM^49RxYBGOXMgTXIN;+#r*i8*lh`86Aa2{c$nx*PV3TF9+%^} z{L=o|qN0wjVjCdvcvNn;q*SReL{K2G2<|L0ZWg8+PRI3N36&>s2CpHUWj#fR>UDE; zYhwP_;vX-c+A?d~X6>q3lVj$mRV^v zn~v{J`SrC|!^Ru+o7j(cTsx|ng9??KC0>(db3=a`J=vpjd*}nSe5zobPTp#CF9;m$ z>Zl>9t${ias9%689H@|hk_VKDC^~osS6?wmlYmO^pV*`LJLxpMV{j6;^v4KZLF}oV y^K01ug~G>{CUxsW(TlO{WAcJEnBjb`$M!&%|5{TrUChXywUA~yul5KcAO8V8z7t&l delta 1341 zcmZ{kO>7%Q6o7Z^tnK`Y1Emlb^PxE|NmSCDn(G7G6#`K* z=NY~xT$LUJyeMS@E00O_CS|JGV$>4NMzhpp4zBfc1UN|pH zVgi>%yYIWUN&5kp-1a!fBZy^o0$F{niu03PIEdwWC>B?p;)rp?5thR+8C7-m7?;d& z9KKl_3q#Kx6K8Q*tb5P>mW^bf?VE5dpdfB%8My8{{z4WfmbzqiDipgkeWSd7WXxKO-*UOzB?qTO@YiPE^;iR|l^C-5)3h zkBU#D-9@MeKfyC{1AZ6|tuhaa4zod(C7aYROXY^%tWln8sa#WA8fE8Dxr~otAUZdLra=s=P^DjaO`gYJLuLM8m*P;YDK62*F#)yP5-y9`)QU2 zX|f`&((o}}M|6a};d-ZVzsj41FCw?gJ!xr2TH2MCu*@s)wL_GzolFRyx)&q%?eL;x z|3(t=H9iH`N8TYJP)5UTk3r4StCX!Z3~G5>24y9k8ism>4sQM6Ux7t2Ami7K@e|JY zVPpK{40_Hk@Hd{^mT(s-46gp4uCuu3R*gQ%RFv_?7^}#>oe;9e^B;WR=IDphcjWPo xb61e=1kQH6dt;A&TT-~kdv?}2jENj@yVc*B>KX`U@u{WzX8>AHH`oO diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 88d2ef782b..c99b278b13 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -8,11 +8,14 @@ import pytest import litellm from litellm import embedding, completion -litellm.set_verbose = True +# litellm.set_verbose = True user_message = "Hello, whats the weather in San Francisco??" messages = [{ "content": user_message,"role": "user"}] +def logger_fn(user_model_dict): + print(f"user_model_dict: {user_model_dict}") + def test_completion_openai(): try: response = completion(model="gpt-3.5-turbo", messages=messages) @@ -83,7 +86,7 @@ def test_completion_azure(): def test_completion_claude(): try: - response = completion(model="claude-instant-1", messages=messages) + response = completion(model="claude-instant-1", messages=messages, logger_fn=logger_fn) # Add any assertions here to check the response print(response) except Exception as e: @@ -97,7 +100,8 @@ def test_completion_cohere(): except Exception as e: pytest.fail(f"Error occurred: {e}") - +# Replicate API endpoints are unstable -> throw random CUDA errors -> this means our tests can fail even if our tests weren't incorrect. +# [TODO] improve our try-except block to handle for these # def test_completion_replicate_llama(): # model_name = "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1" # try: diff --git a/litellm/utils.py b/litellm/utils.py index 94880e6699..8e62d3470a 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -33,13 +33,16 @@ def logging(model=None, input=None, azure=False, additional_args={}, logger_fn=N if azure: model_call_details["azure"] = azure if exception: - model_call_details["original_exception"] = exception + model_call_details["exception"] = exception if litellm.telemetry: safe_crash_reporting(model=model, exception=exception, azure=azure) # log usage-crash details. Do not log any user details. If you want to turn this off, set `litellm.telemetry=False`. if input: model_call_details["input"] = input + + if len(additional_args): + model_call_details["additional_args"] = additional_args # log additional call details -> api key, etc. if model: if azure == True or model in litellm.open_ai_chat_completion_models or model in litellm.open_ai_chat_completion_models or model in litellm.open_ai_embedding_models: @@ -53,7 +56,6 @@ def logging(model=None, input=None, azure=False, additional_args={}, logger_fn=N model_call_details["api_key"] = os.environ.get("ANTHROPIC_API_KEY") elif model in litellm.cohere_models: model_call_details["api_key"] = os.environ.get("COHERE_API_KEY") - model_call_details["additional_args"] = additional_args ## User Logging -> if you pass in a custom logging function or want to use sentry breadcrumbs print_verbose(f"Logging Details: logger_fn - {logger_fn} | callable(logger_fn) - {callable(logger_fn)}") if logger_fn and callable(logger_fn): @@ -318,6 +320,7 @@ def exception_type(model, original_exception): exception_type = type(original_exception).__name__ else: 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: print_verbose(f"status_code: {original_exception.status_code}") @@ -357,7 +360,7 @@ def exception_type(model, original_exception): raise original_exception except Exception as e: ## LOGGING - logging(logger_fn=user_logger_fn, additional_args={"original_exception": original_exception}, exception=e) + logging(logger_fn=user_logger_fn, additional_args={"exception_mapping_worked": exception_mapping_worked, "original_exception": original_exception}, exception=e) if exception_mapping_worked: raise e else: # don't let an error with mapping interrupt the user from receiving an error from the llm api calls diff --git a/pyproject.toml b/pyproject.toml index ea45eb1cef..4fa2b2fd3f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "0.1.331" +version = "0.1.341" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License" @@ -15,6 +15,7 @@ anthropic = "^0.3.7" replicate = "^0.10.0" python-dotenv = "^1.0.0" tenacity = "^8.0.1" +tiktoken = "^0.4.0" [build-system] requires = ["poetry-core"] diff --git a/requirements.txt b/requirements.txt index 098bd48021..eca980d36a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,5 @@ replicate pytest python-dotenv openai[datalib] -tenacity \ No newline at end of file +tenacity +tiktoken \ No newline at end of file