Spaces:
Paused
Paused
| # #### What this tests #### | |
| # # This tests error logging (with custom user functions) for the raw `completion` + `embedding` endpoints | |
| # # Test Scenarios (test across completion, streaming, embedding) | |
| # ## 1: Pre-API-Call | |
| # ## 2: Post-API-Call | |
| # ## 3: On LiteLLM Call success | |
| # ## 4: On LiteLLM Call failure | |
| # import sys, os, io | |
| # import traceback, logging | |
| # import pytest | |
| # import dotenv | |
| # dotenv.load_dotenv() | |
| # # Create logger | |
| # logger = logging.getLogger(__name__) | |
| # logger.setLevel(logging.DEBUG) | |
| # # Create a stream handler | |
| # stream_handler = logging.StreamHandler(sys.stdout) | |
| # logger.addHandler(stream_handler) | |
| # # Create a function to log information | |
| # def logger_fn(message): | |
| # logger.info(message) | |
| # sys.path.insert( | |
| # 0, os.path.abspath("../..") | |
| # ) # Adds the parent directory to the system path | |
| # import litellm | |
| # from litellm import embedding, completion | |
| # from openai.error import AuthenticationError | |
| # litellm.set_verbose = True | |
| # score = 0 | |
| # user_message = "Hello, how are you?" | |
| # messages = [{"content": user_message, "role": "user"}] | |
| # # 1. On Call Success | |
| # # normal completion | |
| # # test on openai completion call | |
| # def test_logging_success_completion(): | |
| # global score | |
| # try: | |
| # # Redirect stdout | |
| # old_stdout = sys.stdout | |
| # sys.stdout = new_stdout = io.StringIO() | |
| # response = completion(model="gpt-3.5-turbo", messages=messages) | |
| # # Restore stdout | |
| # sys.stdout = old_stdout | |
| # output = new_stdout.getvalue().strip() | |
| # if "Logging Details Pre-API Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Logging Details Post-API Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Logging Details LiteLLM-Success Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # score += 1 | |
| # except Exception as e: | |
| # pytest.fail(f"Error occurred: {e}") | |
| # pass | |
| # # ## test on non-openai completion call | |
| # # def test_logging_success_completion_non_openai(): | |
| # # global score | |
| # # try: | |
| # # # Redirect stdout | |
| # # old_stdout = sys.stdout | |
| # # sys.stdout = new_stdout = io.StringIO() | |
| # # response = completion(model="claude-instant-1", messages=messages) | |
| # # # Restore stdout | |
| # # sys.stdout = old_stdout | |
| # # output = new_stdout.getvalue().strip() | |
| # # if "Logging Details Pre-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details Post-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details LiteLLM-Success Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # score += 1 | |
| # # except Exception as e: | |
| # # pytest.fail(f"Error occurred: {e}") | |
| # # pass | |
| # # streaming completion | |
| # ## test on openai completion call | |
| # def test_logging_success_streaming_openai(): | |
| # global score | |
| # try: | |
| # # litellm.set_verbose = False | |
| # def custom_callback( | |
| # kwargs, # kwargs to completion | |
| # completion_response, # response from completion | |
| # start_time, end_time # start/end time | |
| # ): | |
| # if "complete_streaming_response" in kwargs: | |
| # print(f"Complete Streaming Response: {kwargs['complete_streaming_response']}") | |
| # # Assign the custom callback function | |
| # litellm.success_callback = [custom_callback] | |
| # # Redirect stdout | |
| # old_stdout = sys.stdout | |
| # sys.stdout = new_stdout = io.StringIO() | |
| # response = completion(model="gpt-3.5-turbo", messages=messages, stream=True) | |
| # for chunk in response: | |
| # pass | |
| # # Restore stdout | |
| # sys.stdout = old_stdout | |
| # output = new_stdout.getvalue().strip() | |
| # if "Logging Details Pre-API Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Logging Details Post-API Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Logging Details LiteLLM-Success Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Complete Streaming Response:" not in output: | |
| # raise Exception("Required log message not found!") | |
| # score += 1 | |
| # except Exception as e: | |
| # pytest.fail(f"Error occurred: {e}") | |
| # pass | |
| # # test_logging_success_streaming_openai() | |
| # ## test on non-openai completion call | |
| # def test_logging_success_streaming_non_openai(): | |
| # global score | |
| # try: | |
| # # litellm.set_verbose = False | |
| # def custom_callback( | |
| # kwargs, # kwargs to completion | |
| # completion_response, # response from completion | |
| # start_time, end_time # start/end time | |
| # ): | |
| # # print(f"streaming response: {completion_response}") | |
| # if "complete_streaming_response" in kwargs: | |
| # print(f"Complete Streaming Response: {kwargs['complete_streaming_response']}") | |
| # # Assign the custom callback function | |
| # litellm.success_callback = [custom_callback] | |
| # # Redirect stdout | |
| # old_stdout = sys.stdout | |
| # sys.stdout = new_stdout = io.StringIO() | |
| # response = completion(model="claude-instant-1", messages=messages, stream=True) | |
| # for idx, chunk in enumerate(response): | |
| # pass | |
| # # Restore stdout | |
| # sys.stdout = old_stdout | |
| # output = new_stdout.getvalue().strip() | |
| # if "Logging Details Pre-API Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Logging Details Post-API Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Logging Details LiteLLM-Success Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Complete Streaming Response:" not in output: | |
| # raise Exception(f"Required log message not found! {output}") | |
| # score += 1 | |
| # except Exception as e: | |
| # pytest.fail(f"Error occurred: {e}") | |
| # pass | |
| # # test_logging_success_streaming_non_openai() | |
| # # embedding | |
| # def test_logging_success_embedding_openai(): | |
| # try: | |
| # # Redirect stdout | |
| # old_stdout = sys.stdout | |
| # sys.stdout = new_stdout = io.StringIO() | |
| # response = embedding(model="text-embedding-ada-002", input=["good morning from litellm"]) | |
| # # Restore stdout | |
| # sys.stdout = old_stdout | |
| # output = new_stdout.getvalue().strip() | |
| # if "Logging Details Pre-API Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Logging Details Post-API Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # elif "Logging Details LiteLLM-Success Call" not in output: | |
| # raise Exception("Required log message not found!") | |
| # except Exception as e: | |
| # pytest.fail(f"Error occurred: {e}") | |
| # # ## 2. On LiteLLM Call failure | |
| # # ## TEST BAD KEY | |
| # # # normal completion | |
| # # ## test on openai completion call | |
| # # try: | |
| # # temporary_oai_key = os.environ["OPENAI_API_KEY"] | |
| # # os.environ["OPENAI_API_KEY"] = "bad-key" | |
| # # temporary_anthropic_key = os.environ["ANTHROPIC_API_KEY"] | |
| # # os.environ["ANTHROPIC_API_KEY"] = "bad-key" | |
| # # # Redirect stdout | |
| # # old_stdout = sys.stdout | |
| # # sys.stdout = new_stdout = io.StringIO() | |
| # # try: | |
| # # response = completion(model="gpt-3.5-turbo", messages=messages) | |
| # # except AuthenticationError: | |
| # # print(f"raised auth error") | |
| # # pass | |
| # # # Restore stdout | |
| # # sys.stdout = old_stdout | |
| # # output = new_stdout.getvalue().strip() | |
| # # print(output) | |
| # # if "Logging Details Pre-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details Post-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details LiteLLM-Failure Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # os.environ["OPENAI_API_KEY"] = temporary_oai_key | |
| # # os.environ["ANTHROPIC_API_KEY"] = temporary_anthropic_key | |
| # # score += 1 | |
| # # except Exception as e: | |
| # # print(f"exception type: {type(e).__name__}") | |
| # # pytest.fail(f"Error occurred: {e}") | |
| # # pass | |
| # # ## test on non-openai completion call | |
| # # try: | |
| # # temporary_oai_key = os.environ["OPENAI_API_KEY"] | |
| # # os.environ["OPENAI_API_KEY"] = "bad-key" | |
| # # temporary_anthropic_key = os.environ["ANTHROPIC_API_KEY"] | |
| # # os.environ["ANTHROPIC_API_KEY"] = "bad-key" | |
| # # # Redirect stdout | |
| # # old_stdout = sys.stdout | |
| # # sys.stdout = new_stdout = io.StringIO() | |
| # # try: | |
| # # response = completion(model="claude-instant-1", messages=messages) | |
| # # except AuthenticationError: | |
| # # pass | |
| # # if "Logging Details Pre-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details Post-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details LiteLLM-Failure Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # os.environ["OPENAI_API_KEY"] = temporary_oai_key | |
| # # os.environ["ANTHROPIC_API_KEY"] = temporary_anthropic_key | |
| # # score += 1 | |
| # # except Exception as e: | |
| # # print(f"exception type: {type(e).__name__}") | |
| # # # Restore stdout | |
| # # sys.stdout = old_stdout | |
| # # output = new_stdout.getvalue().strip() | |
| # # print(output) | |
| # # pytest.fail(f"Error occurred: {e}") | |
| # # # streaming completion | |
| # # ## test on openai completion call | |
| # # try: | |
| # # temporary_oai_key = os.environ["OPENAI_API_KEY"] | |
| # # os.environ["OPENAI_API_KEY"] = "bad-key" | |
| # # temporary_anthropic_key = os.environ["ANTHROPIC_API_KEY"] | |
| # # os.environ["ANTHROPIC_API_KEY"] = "bad-key" | |
| # # # Redirect stdout | |
| # # old_stdout = sys.stdout | |
| # # sys.stdout = new_stdout = io.StringIO() | |
| # # try: | |
| # # response = completion(model="gpt-3.5-turbo", messages=messages) | |
| # # except AuthenticationError: | |
| # # pass | |
| # # # Restore stdout | |
| # # sys.stdout = old_stdout | |
| # # output = new_stdout.getvalue().strip() | |
| # # print(output) | |
| # # if "Logging Details Pre-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details Post-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details LiteLLM-Failure Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # os.environ["OPENAI_API_KEY"] = temporary_oai_key | |
| # # os.environ["ANTHROPIC_API_KEY"] = temporary_anthropic_key | |
| # # score += 1 | |
| # # except Exception as e: | |
| # # print(f"exception type: {type(e).__name__}") | |
| # # pytest.fail(f"Error occurred: {e}") | |
| # # ## test on non-openai completion call | |
| # # try: | |
| # # temporary_oai_key = os.environ["OPENAI_API_KEY"] | |
| # # os.environ["OPENAI_API_KEY"] = "bad-key" | |
| # # temporary_anthropic_key = os.environ["ANTHROPIC_API_KEY"] | |
| # # os.environ["ANTHROPIC_API_KEY"] = "bad-key" | |
| # # # Redirect stdout | |
| # # old_stdout = sys.stdout | |
| # # sys.stdout = new_stdout = io.StringIO() | |
| # # try: | |
| # # response = completion(model="claude-instant-1", messages=messages) | |
| # # except AuthenticationError: | |
| # # pass | |
| # # # Restore stdout | |
| # # sys.stdout = old_stdout | |
| # # output = new_stdout.getvalue().strip() | |
| # # print(output) | |
| # # if "Logging Details Pre-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details Post-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details LiteLLM-Failure Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # score += 1 | |
| # # except Exception as e: | |
| # # print(f"exception type: {type(e).__name__}") | |
| # # pytest.fail(f"Error occurred: {e}") | |
| # # # embedding | |
| # # try: | |
| # # temporary_oai_key = os.environ["OPENAI_API_KEY"] | |
| # # os.environ["OPENAI_API_KEY"] = "bad-key" | |
| # # temporary_anthropic_key = os.environ["ANTHROPIC_API_KEY"] | |
| # # os.environ["ANTHROPIC_API_KEY"] = "bad-key" | |
| # # # Redirect stdout | |
| # # old_stdout = sys.stdout | |
| # # sys.stdout = new_stdout = io.StringIO() | |
| # # try: | |
| # # response = embedding(model="text-embedding-ada-002", input=["good morning from litellm"]) | |
| # # except AuthenticationError: | |
| # # pass | |
| # # # Restore stdout | |
| # # sys.stdout = old_stdout | |
| # # output = new_stdout.getvalue().strip() | |
| # # print(output) | |
| # # if "Logging Details Pre-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details Post-API Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # elif "Logging Details LiteLLM-Failure Call" not in output: | |
| # # raise Exception("Required log message not found!") | |
| # # except Exception as e: | |
| # # print(f"exception type: {type(e).__name__}") | |
| # # pytest.fail(f"Error occurred: {e}") | |