From baa69734b094024263eebb526287728844ffe8bd Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 12 Sep 2023 11:28:50 -0700 Subject: [PATCH] raise better exception if llm provider isn't passed in or inferred --- litellm/__init__.py | 1 + litellm/__pycache__/__init__.cpython-311.pyc | Bin 8037 -> 8074 bytes litellm/__pycache__/main.cpython-311.pyc | Bin 32885 -> 32824 bytes litellm/__pycache__/utils.cpython-311.pyc | Bin 96785 -> 98615 bytes litellm/main.py | 2 + litellm/tests/test_bad_params.py | 10 ++++ litellm/utils.py | 49 +++++++++++++++++++ pyproject.toml | 2 +- 8 files changed, 63 insertions(+), 1 deletion(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index 084931eb03..ec3ea31651 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -238,6 +238,7 @@ from .utils import ( register_prompt_template, validate_environment, check_valid_key, + get_llm_provider ) from .main import * # type: ignore from .integrations import * diff --git a/litellm/__pycache__/__init__.cpython-311.pyc b/litellm/__pycache__/__init__.cpython-311.pyc index 9690c652a69354f1aa1cfa1025f2fe1b41775ea8..b5b19892baf920fe48dcd89e07568a88571d2239 100644 GIT binary patch delta 429 zcmaEA*JaPUoR^o20SK0?VMuM8$ScXXYNL8Oi$iX7R5T+)igAi*PD}`djs?@^IdQr1 zQSrG6Q3<(;QHi-pQAxSUQOUU}Q7K^c7CEW8X;EpLPqAq6GYW40DlEz^v$zHW10Pml7QCVV#!U+%)7;tnOBmUUX)mpnV(l&qym&E zN(K=rAR-k+q=ATZ5Rm~SZt*3Rrhp93P0UM7Pc16Soa`tm%QX!s#R$a3|2Jny9%88% UVr2TjFmQxDWwxtLz9-iX0A-SK3;+NC delta 359 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 SWm;AhS^e^tf6Z%9yZ;Nv685YB delta 10327 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 diff --git a/litellm/main.py b/litellm/main.py index 5c90f276af..a0b233861a 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -17,6 +17,7 @@ from litellm.utils import ( CustomStreamWrapper, read_config_args, completion_with_fallbacks, + get_llm_provider ) from .llms import anthropic from .llms import together_ai @@ -168,6 +169,7 @@ def completion( completion_call_id=id ) logging.update_environment_variables(model=model, user=user, optional_params=optional_params, litellm_params=litellm_params) + get_llm_provider(model=model, custom_llm_provider=custom_llm_provider) if custom_llm_provider == "azure": # azure configs openai.api_type = get_secret("AZURE_API_TYPE") or "azure" diff --git a/litellm/tests/test_bad_params.py b/litellm/tests/test_bad_params.py index 0173099f91..4296d997b7 100644 --- a/litellm/tests/test_bad_params.py +++ b/litellm/tests/test_bad_params.py @@ -32,6 +32,16 @@ def test_completion_with_empty_model(): pass +def test_completion_with_no_provider(): + # test on empty + try: + model = "cerebras/btlm-3b-8k-base" + response = completion(model=model, messages=messages) + except Exception as e: + print(f"error occurred: {e}") + pass + +test_completion_with_no_provider() # # bad key # temp_key = os.environ.get("OPENAI_API_KEY") # os.environ["OPENAI_API_KEY"] = "bad-key" diff --git a/litellm/utils.py b/litellm/utils.py index 1a36fd9184..5479cca7cc 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -931,6 +931,55 @@ def get_optional_params( # use the openai defaults return optional_params return optional_params +def get_llm_provider(model: str, custom_llm_provider: str = None): + try: + # check if llm provider provided + if custom_llm_provider: + return model, custom_llm_provider + + # check if llm provider part of model name + if model.split("/",1)[0] in litellm.provider_list: + custom_llm_provider = model.split("/", 1)[0] + model = model.split("/", 1)[1] + return model, custom_llm_provider + + # check if model in known model provider list + ## openai - chatcompletion + text completion + if model in litellm.open_ai_chat_completion_models or model in litellm.open_ai_text_completion_models: + custom_llm_provider = "openai" + ## cohere + elif model in litellm.cohere_models: + custom_llm_provider = "cohere" + ## replicate + elif model in litellm.replicate_models: + custom_llm_provider = "replicate" + ## openrouter + elif model in litellm.openrouter_models: + custom_llm_provider = "openrouter" + ## vertex - text + chat models + elif model in litellm.vertex_chat_models or model in litellm.vertex_text_models: + custom_llm_provider = "vertex_ai" + ## huggingface + elif model in litellm.huggingface_models: + custom_llm_provider = "huggingface" + ## ai21 + elif model in litellm.ai21_models: + custom_llm_provider = "ai21" + ## together_ai + elif model in litellm.together_ai_models: + custom_llm_provider = "together_ai" + ## aleph_alpha + elif model in litellm.aleph_alpha_models: + custom_llm_provider = "aleph_alpha" + ## baseten + elif model in litellm.baseten_models: + custom_llm_provider = "baseten" + + if custom_llm_provider is None: + raise ValueError(f"LLM Provider NOT provided. Pass in the LLM provider you are trying to call. E.g. For 'Huggingface' inference endpoints pass in `completion(model='huggingface/{model}',..)` Learn more: https://docs.litellm.ai/docs/providers") + return model, custom_llm_provider + except Exception as e: + raise e def get_max_tokens(model: str): try: diff --git a/pyproject.toml b/pyproject.toml index 8ac50966c3..92abc5df9c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "0.1.601" +version = "0.1.602" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License"