From 6da500c6e0817ea8dfcc3fd625512d62b145af13 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 11 Sep 2023 12:19:13 -0700 Subject: [PATCH] add mock request to docs --- litellm/__pycache__/main.cpython-311.pyc | Bin 31786 -> 32049 bytes litellm/__pycache__/utils.cpython-311.pyc | Bin 90449 -> 90371 bytes litellm/main.py | 9 ++++++++- litellm/tests/test_mock_request.py | 21 +++++++++++++++++++++ litellm/utils.py | 3 +-- pyproject.toml | 2 +- 6 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 litellm/tests/test_mock_request.py diff --git a/litellm/__pycache__/main.cpython-311.pyc b/litellm/__pycache__/main.cpython-311.pyc index 6841fe91c95d3d6e7767ddfeec0fefaff4d212a0..62fec350c1a8c9f1b244b63bee086e5dcbcd08ba 100644 GIT binary patch delta 9312 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 OFeLj=^Ja1q>wf{4otpaq diff --git a/litellm/main.py b/litellm/main.py index d5e5fc6409..3d63f7e36b 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -93,6 +93,7 @@ def completion( deployment_id = None, # Optional liteLLM function params *, + mock_request=False, # to mock an LLM request return_async=False, api_key: Optional[str] = None, api_version: Optional[str] = None, @@ -134,7 +135,13 @@ def completion( ): # allow custom provider to be passed in via the model name "azure/chatgpt-test" custom_llm_provider = model.split("/", 1)[0] model = model.split("/", 1)[1] - + if mock_request == True: + ## RESPONSE OBJECT + completion_response = "This is a mock request" + model_response["choices"][0]["message"]["content"] = completion_response + model_response["created"] = time.time() + model_response["model"] = "MockResponse" + return model_response # check if user passed in any of the OpenAI optional params optional_params = get_optional_params( functions=functions, diff --git a/litellm/tests/test_mock_request.py b/litellm/tests/test_mock_request.py new file mode 100644 index 0000000000..637aed3e7b --- /dev/null +++ b/litellm/tests/test_mock_request.py @@ -0,0 +1,21 @@ +#### What this tests #### +# This tests mock request calls to litellm + +import sys, os +import traceback + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import litellm + +def test_mock_request(): + try: + model = "gpt-3.5-turbo" + messages = [{"role": "user", "content": "Hey, I'm a mock request"}] + response = litellm.completion(model=model, messages=messages, mock_request=True) + print(response) + except: + traceback.print_exc() + +test_mock_request() \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index d901eadfba..2a19e885b2 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1938,8 +1938,7 @@ def exception_type(model, original_exception, custom_llm_provider): llm_provider="vllm", model=model ) - else: - raise original_exception + raise original_exception except Exception as e: # LOGGING exception_logging( diff --git a/pyproject.toml b/pyproject.toml index 63c955461f..0dfbbbefa5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "0.1.590" +version = "0.1.591" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License"