From f98da9f13c2a0bb99c11df03f147bbf918cce5a2 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 14 Sep 2023 09:19:32 -0700 Subject: [PATCH] adding support for nlp cloud --- litellm/__init__.py | 5 + litellm/__pycache__/__init__.cpython-311.pyc | Bin 8074 -> 8226 bytes litellm/__pycache__/main.cpython-311.pyc | Bin 33061 -> 33730 bytes litellm/__pycache__/utils.cpython-311.pyc | Bin 101105 -> 104530 bytes litellm/llms/nlp_cloud.py | 103 ++++++++++++++++ litellm/main.py | 28 ++++- litellm/tests/test_completion.py | 30 +++++ litellm/tests/test_exceptions.py | 5 + litellm/utils.py | 116 ++++++++++++++++++- pyproject.toml | 2 +- 10 files changed, 286 insertions(+), 3 deletions(-) create mode 100644 litellm/llms/nlp_cloud.py diff --git a/litellm/__init__.py b/litellm/__init__.py index ec3ea3165..882994184 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -29,6 +29,7 @@ vertex_location: Optional[str] = None togetherai_api_key: Optional[str] = None baseten_key: Optional[str] = None aleph_alpha_key: Optional[str] = None +nlp_cloud_key: Optional[str] = None use_client = False logging = True caching = False # deprecated son @@ -152,6 +153,8 @@ huggingface_models = [ ai21_models = ["j2-ultra", "j2-mid", "j2-light"] +nlp_cloud_models = ["dolphin", "chatdolphin"] + together_ai_models = [ "togethercomputer/llama-2-70b-chat", "togethercomputer/Llama-2-7B-32K-Instruct", @@ -183,6 +186,7 @@ model_list = ( + together_ai_models + baseten_models + aleph_alpha_models + + nlp_cloud_models ) provider_list = [ @@ -200,6 +204,7 @@ provider_list = [ "sagemaker", "bedrock", "vllm", + "nlp_cloud", "custom", # custom apis ] diff --git a/litellm/__pycache__/__init__.cpython-311.pyc b/litellm/__pycache__/__init__.cpython-311.pyc index b5b19892baf920fe48dcd89e07568a88571d2239..f687fe5eca43afb0541abb9b45d02be88919b1ab 100644 GIT binary patch delta 1167 zcmZ9KUuaWT9LLYO`PbZ-E~TAq%+fBaU7Dsf##T*h`ZukuQ3hijgM%(h?>R}XyEl=W z8*l?rh7T%(Z5#waVW6Oh4^!^z@YUDqgUEdtgFS6e*{d+v?|1tL^l*Ql?>WDJ=XY;% zYw`Y4@1tl`C9s-lpP<9P^bXNi&(fbMS1B760TGE~%v<6BKU9Pr53$2sWn-Y9f~7fS zj`G4T*`pLlm5SQhFgTVCPRdxgVTsE~ES zN3Ik8u^<?pJOx+gVc=t6(_k}T$H7i;`MED!t`nZVPuV;l z=b5^~7Wf3uf-Zu868uY`Q=rTI2+x6k1hdMX@AGVol781+m+O&)iel20vb>>jJe@PXF{`XW17hs zHw6=Bjn%yTQ%2ovuml+$3^YpTkwn78eG*NZYoi(BbF0X1f8SrB#icFENM7MaMrlM%CE8)UKe)7tTwB4 zVOb_d3W)vR=WS0BhVB?*!MY0p3f3ME64LciO5ezz;)BkE_a=UK=RI&?f$845|gRqlhh#+8vHjA4GeaDghslb^z|uSvWIKY?zr<; K@&WbZ0RICGD;yL6 delta 1058 zcmZ9IOHWfl6vt-@1=>RK!TYT|%d@--h0>Ns3m9V*V=@s-=}b$_y%2A2O~gdR5M$gJ zGl_BG3JgXuG3I^Gk3BUUdUP@+BjwH!Y&-u*sGQ(<~0+rOB2>13WQ6zlD7Y`M0ob$>p)E+SSQSNsk!b`bM-j4Y$FlE8+Hh96y$c#$=rS(m_QsY)(ghHr;Ph} z6a3N(2kwU$fEa`rf*6JvNfCZwS0?hhws<@5NZHsV_wY{8093kmDVqZA1`UGtfQCSO zLBpVZpwnVh_%`7HVoY&d(XTk6IHfqL7*Grqnd90`RU6ip zm5yq+^caijD{MuNv$(#>R`mo+=$vuY@6&{yWJ%c5Ys52V{mNgU){TOTHhUKw*JC{> zic;DsKRFudnEdJp*A77XEinc`j7~)F34C(K+3ipT%*i{B3i-?#pkDdeS?Tpc%0qJ{ z;;vXXV_cZ=w3f+G$TlgTTv3`sC7rxy_#qjT<*t4@XhmG#3#`bwVoFQp()lO8f?;EpQjUM&aQ1F;@Z)D$FSLN#VcE>d|9>KaRu87O_4FdIcLwB za5>{DHeEw3A+7^tPjyH>sxId(m`NZwLLice6k-jKbFXH3N|-S{z8+5r!$@Og6!G`* ze-=%^S+kl57%!lJubKI6C*&}XQu;;GnzFsp8k^Nzw@u}T`h&_mLS2VVXU^IV$q62o O9JX2a8}?{Ey8ZzP>-5?H diff --git a/litellm/__pycache__/main.cpython-311.pyc b/litellm/__pycache__/main.cpython-311.pyc index 7d1b0da0d773d58fdb6fe518dbe57ffb03f7646a..57f2e449a6bcce7e1fc71e462b86f9d45687efb3 100644 GIT binary patch delta 9912 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 DxA8k& delta 6524 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 E0al