Merge pull request #1676 from BerriAI/litellm_patch_dynamo_key

[Fix]Litellm patch dynamoDB
This commit is contained in:
Ishaan Jaff 2024-01-29 16:54:17 -08:00 committed by GitHub
commit 9c0599b1cd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 38 additions and 8 deletions

View file

@ -233,10 +233,6 @@ class DynamoDBWrapper(CustomDB):
table = client.table(self.database_arguments.config_table_name)
key_name = "param_name"
if key_name == "token" and key.startswith("sk-"):
# ensure it's hashed
key = hash_token(token=key)
response = await table.get_item({key_name: key})
new_response: Any = None

View file

@ -292,6 +292,7 @@ async def user_api_key_auth(
raise Exception("No connected db.")
## check for cache hit (In-Memory Cache)
original_api_key = api_key # (Patch: For DynamoDB Backwards Compatibility)
if api_key.startswith("sk-"):
api_key = hash_token(token=api_key)
valid_token = user_api_key_cache.get_cache(key=api_key)
@ -304,10 +305,15 @@ async def user_api_key_auth(
)
elif custom_db_client is not None:
valid_token = await custom_db_client.get_data(
key=api_key, table_name="key"
)
try:
valid_token = await custom_db_client.get_data(
key=api_key, table_name="key"
)
except:
# (Patch: For DynamoDB Backwards Compatibility)
valid_token = await custom_db_client.get_data(
key=original_api_key, table_name="key"
)
verbose_proxy_logger.debug(f"Token from db: {valid_token}")
elif valid_token is not None:
verbose_proxy_logger.debug(f"API Key Cache Hit!")

View file

@ -472,3 +472,31 @@ def test_call_with_key_over_budget_stream(custom_db_client):
error_detail = e.message
assert "Authentication Error, ExceededTokenBudget:" in error_detail
print(vars(e))
def test_dynamo_db_migration(custom_db_client):
# Tests the temporary patch we have in place
setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client)
setattr(litellm.proxy.proxy_server, "master_key", "sk-1234")
try:
async def test():
bearer_token = (
"Bearer " + "sk-elJDL2pOEjcAuC7zD4psAg"
) # this works with ishaan's db, it's a never expiring key
request = Request(scope={"type": "http"})
request._url = URL(url="/chat/completions")
async def return_body():
return b'{"model": "azure-models"}'
request.body = return_body
# use generated key to auth in
result = await user_api_key_auth(request=request, api_key=bearer_token)
print("result from user auth with new key", result)
asyncio.run(test())
except Exception as e:
pytest.fail(f"An exception occurred - {str(e)}")