Spaces:
Paused
Paused
| import sys | |
| import os | |
| import io, asyncio | |
| # import logging | |
| # logging.basicConfig(level=logging.DEBUG) | |
| sys.path.insert(0, os.path.abspath("../..")) | |
| from litellm import completion | |
| import litellm | |
| litellm.num_retries = 3 | |
| import time, random | |
| import pytest | |
| def pre_request(): | |
| file_name = f"dynamo.log" | |
| log_file = open(file_name, "a+") | |
| # Clear the contents of the file by truncating it | |
| log_file.truncate(0) | |
| # Save the original stdout so that we can restore it later | |
| original_stdout = sys.stdout | |
| # Redirect stdout to the file | |
| sys.stdout = log_file | |
| return original_stdout, log_file, file_name | |
| import re | |
| def verify_log_file(log_file_path): | |
| with open(log_file_path, "r") as log_file: | |
| log_content = log_file.read() | |
| print( | |
| f"\nVerifying DynamoDB file = {log_file_path}. File content=", log_content | |
| ) | |
| # Define the pattern to search for in the log file | |
| pattern = r"Response from DynamoDB:{.*?}" | |
| # Find all matches in the log content | |
| matches = re.findall(pattern, log_content) | |
| # Print the DynamoDB success log matches | |
| print("DynamoDB Success Log Matches:") | |
| for match in matches: | |
| print(match) | |
| # Print the total count of lines containing the specified response | |
| print(f"Total occurrences of specified response: {len(matches)}") | |
| # Count the occurrences of successful responses (status code 200 or 201) | |
| success_count = sum( | |
| 1 | |
| for match in matches | |
| if "'HTTPStatusCode': 200" in match or "'HTTPStatusCode': 201" in match | |
| ) | |
| # Print the count of successful responses | |
| print(f"Count of successful responses from DynamoDB: {success_count}") | |
| assert success_count == 3 # Expect 3 success logs from dynamoDB | |
| def test_dynamo_logging(): | |
| # all dynamodb requests need to be in one test function | |
| # since we are modifying stdout, and pytests runs tests in parallel | |
| try: | |
| # pre | |
| # redirect stdout to log_file | |
| litellm.success_callback = ["dynamodb"] | |
| litellm.dynamodb_table_name = "litellm-logs-1" | |
| litellm.set_verbose = True | |
| original_stdout, log_file, file_name = pre_request() | |
| print("Testing async dynamoDB logging") | |
| async def _test(): | |
| return await litellm.acompletion( | |
| model="gpt-3.5-turbo", | |
| messages=[{"role": "user", "content": "This is a test"}], | |
| max_tokens=100, | |
| temperature=0.7, | |
| user="ishaan-2", | |
| ) | |
| response = asyncio.run(_test()) | |
| print(f"response: {response}") | |
| # streaming + async | |
| async def _test2(): | |
| response = await litellm.acompletion( | |
| model="gpt-3.5-turbo", | |
| messages=[{"role": "user", "content": "This is a test"}], | |
| max_tokens=10, | |
| temperature=0.7, | |
| user="ishaan-2", | |
| stream=True, | |
| ) | |
| async for chunk in response: | |
| pass | |
| asyncio.run(_test2()) | |
| # aembedding() | |
| async def _test3(): | |
| return await litellm.aembedding( | |
| model="text-embedding-ada-002", input=["hi"], user="ishaan-2" | |
| ) | |
| response = asyncio.run(_test3()) | |
| time.sleep(1) | |
| except Exception as e: | |
| pytest.fail(f"An exception occurred - {e}") | |
| finally: | |
| # post, close log file and verify | |
| # Reset stdout to the original value | |
| sys.stdout = original_stdout | |
| # Close the file | |
| log_file.close() | |
| verify_log_file(file_name) | |
| print("Passed! Testing async dynamoDB logging") | |
| # test_dynamo_logging_async() | |