From e9747fb763e9f0833bb61d8aa82133bf84705e92 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 25 Sep 2023 20:30:12 -0700 Subject: [PATCH] update to expose longer_context_model_fallback_dict --- .../docs/completion/reliable_completions.md | 30 ++++++++++++++++-- litellm/__init__.py | 2 +- litellm/__pycache__/__init__.cpython-311.pyc | Bin 13263 -> 11762 bytes litellm/tests/test_longer_context_fallback.py | 13 ++++++++ pyproject.toml | 2 +- 5 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 litellm/tests/test_longer_context_fallback.py diff --git a/docs/my-website/docs/completion/reliable_completions.md b/docs/my-website/docs/completion/reliable_completions.md index e9a0a2f6c..a58975c1b 100644 --- a/docs/my-website/docs/completion/reliable_completions.md +++ b/docs/my-website/docs/completion/reliable_completions.md @@ -1,10 +1,36 @@ # Reliability + + +## Helper utils LiteLLM supports the following functions for reliability: +* `litellm.longer_context_model_fallback_dict`: Dictionary which has a mapping for those models which have larger equivalents * `completion_with_retries`: use tenacity retries * `completion()` with fallback models: set `fallback_models=['gpt-3.5-turbo', 'command-nightly', 'llama2`]. If primary model fails try fallback models -## Completion with Retries +## Context Window Errors + +```python +from litellm import longer_context_model_fallback_dict, ContextWindowExceededError + +sample_text = "how does a court case get to the Supreme Court?" * 1000 +messages = [{"content": user_message, "role": "user"}] +model = "gpt-3.5-turbo" +try: + # try the original model + response = completion(model=model, messages=messages) +# catch the context window error +except ContextWindowExceededError as e: + if model in longer_context_model_fallback_dict: + # switch to the equivalent larger model -> gpt.3.5-turbo-16k + new_model = longer_context_model_fallback_dict[model] + response = completion(new_model, messages) + +print(response) +``` + + +## Retry failed requests You can use this as a drop-in replacement for the `completion()` function to use tenacity retries - by default we retry the call 3 times. @@ -29,7 +55,7 @@ def test_completion_custom_provider_model_name(): printf"Error occurred: {e}") ``` -## Completion with Fallbacks +## Specify fallback models LLM APIs can be unstable, completion() with fallbacks ensures you'll always get a response from your calls ## Usage diff --git a/litellm/__init__.py b/litellm/__init__.py index ce1cace84..df81cf7b3 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -261,7 +261,7 @@ models_by_provider: dict = { } # mapping for those models which have larger equivalents -longer_context_model_fallback_dict = { +longer_context_model_fallback_dict: dict = { # openai chat completion models "gpt-3.5-turbo": "gpt-3.5-turbo-16k", "gpt-3.5-turbo-0301": "gpt-3.5-turbo-16k-0301", diff --git a/litellm/__pycache__/__init__.cpython-311.pyc b/litellm/__pycache__/__init__.cpython-311.pyc index 05a7c09e2dbe18127e155f3f2f7f44e03662f200..d18aa4f2253b5fe4e54a54771ed1d84f4a660744 100644 GIT binary patch delta 4065 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 diff --git a/litellm/tests/test_longer_context_fallback.py b/litellm/tests/test_longer_context_fallback.py new file mode 100644 index 000000000..8f8942897 --- /dev/null +++ b/litellm/tests/test_longer_context_fallback.py @@ -0,0 +1,13 @@ +#### What this tests #### +# This tests context fallback dict + +import sys, os +import traceback +import pytest +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import litellm +from litellm import longer_context_model_fallback_dict + +print(longer_context_model_fallback_dict) \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index d68537b92..6a70ee9c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "0.1.749" +version = "0.1.750" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License"