From 261db15bcfc0c68451be90332ee5a1b443d273ae Mon Sep 17 00:00:00 2001 From: William Espegren Date: Tue, 12 Sep 2023 18:48:23 +0200 Subject: [PATCH 1/3] util: verify_access_key Verify that the user provided a valid openai token by creating a request to the openAI endpoint. --- litellm/main.py | 1 + litellm/tests/test_verify_openai_key.py | 7 +++++++ litellm/utils.py | 15 +++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 litellm/tests/test_verify_openai_key.py diff --git a/litellm/main.py b/litellm/main.py index c0df0f4cc..51d35b4d8 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -17,6 +17,7 @@ from litellm.utils import ( CustomStreamWrapper, read_config_args, completion_with_fallbacks, + verify_access_key, ) from .llms import anthropic from .llms import together_ai diff --git a/litellm/tests/test_verify_openai_key.py b/litellm/tests/test_verify_openai_key.py new file mode 100644 index 000000000..e5cfdb1dd --- /dev/null +++ b/litellm/tests/test_verify_openai_key.py @@ -0,0 +1,7 @@ +from litellm import verify_access_key + +def bad_key(): + key = "bad-key" + response = verify_access_key(key) + print(f"response: {response}") +bad_key() \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index 1a36fd918..db6cd1e4f 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -2554,3 +2554,18 @@ def trim_messages( except: # [NON-Blocking, if error occurs just return final_messages return messages + +# Verify that the user has passed in a valid and active api key +def verify_access_key(access_key:str): + openai.api_key = access_key + try: + test_response = openai.ChatCompletion.create( + model="gpt-3.5-turbo", + messages=[ + {"role": "user", "content": "test"}, + ], + max_tokens = 10 + ) + return False + except: + return True \ No newline at end of file From 1b51016680853d98ebfdba998da3e829c49ae296 Mon Sep 17 00:00:00 2001 From: William Espegren Date: Tue, 12 Sep 2023 18:51:50 +0200 Subject: [PATCH 2/3] Raise exception if bad key is not detected --- litellm/tests/test_verify_openai_key.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_verify_openai_key.py b/litellm/tests/test_verify_openai_key.py index e5cfdb1dd..a8429d32e 100644 --- a/litellm/tests/test_verify_openai_key.py +++ b/litellm/tests/test_verify_openai_key.py @@ -3,5 +3,8 @@ from litellm import verify_access_key def bad_key(): key = "bad-key" response = verify_access_key(key) - print(f"response: {response}") + if response == False: + pass + else: + raise Exception("Bad key was not detected") bad_key() \ No newline at end of file From b26933301d608c726f3736c00781fb8489ed4002 Mon Sep 17 00:00:00 2001 From: William Espegren Date: Tue, 12 Sep 2023 19:02:55 +0200 Subject: [PATCH 3/3] renamed and added test_good_key() --- litellm/tests/test_verify_openai_key.py | 14 ++++++++++++-- litellm/utils.py | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/litellm/tests/test_verify_openai_key.py b/litellm/tests/test_verify_openai_key.py index a8429d32e..e671641ac 100644 --- a/litellm/tests/test_verify_openai_key.py +++ b/litellm/tests/test_verify_openai_key.py @@ -1,10 +1,20 @@ from litellm import verify_access_key +import os -def bad_key(): +def test_bad_key(): key = "bad-key" response = verify_access_key(key) if response == False: pass else: raise Exception("Bad key was not detected") -bad_key() \ No newline at end of file +test_bad_key() + +def test_good_key(): + key = os.environ['OPENAI_API_KEY'] + response = verify_access_key(key) + if response == True: + pass + else: + raise Exception("Good key did not pass") +test_good_key() \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index db6cd1e4f..772cb2fe2 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -2566,6 +2566,6 @@ def verify_access_key(access_key:str): ], max_tokens = 10 ) - return False + return True except: - return True \ No newline at end of file + return False \ No newline at end of file