import sys import os sys.path.insert( 0, os.path.abspath("../../") ) # Adds the parent directory to the system path import pytest from litellm.llms.AzureOpenAI.common_utils import process_azure_headers from httpx import Headers def test_process_azure_headers_empty(): result = process_azure_headers({}) assert result == {}, "Expected empty dictionary for no input" def test_process_azure_headers_with_all_headers(): input_headers = Headers( { "x-ratelimit-limit-requests": "100", "x-ratelimit-remaining-requests": "90", "x-ratelimit-limit-tokens": "10000", "x-ratelimit-remaining-tokens": "9000", "other-header": "value", } ) expected_output = { "x-ratelimit-limit-requests": "100", "x-ratelimit-remaining-requests": "90", "x-ratelimit-limit-tokens": "10000", "x-ratelimit-remaining-tokens": "9000", "llm_provider-x-ratelimit-limit-requests": "100", "llm_provider-x-ratelimit-remaining-requests": "90", "llm_provider-x-ratelimit-limit-tokens": "10000", "llm_provider-x-ratelimit-remaining-tokens": "9000", "llm_provider-other-header": "value", } result = process_azure_headers(input_headers) assert result == expected_output, "Unexpected output for all Azure headers" def test_process_azure_headers_with_partial_headers(): input_headers = Headers( { "x-ratelimit-limit-requests": "100", "x-ratelimit-remaining-tokens": "9000", "other-header": "value", } ) expected_output = { "x-ratelimit-limit-requests": "100", "x-ratelimit-remaining-tokens": "9000", "llm_provider-x-ratelimit-limit-requests": "100", "llm_provider-x-ratelimit-remaining-tokens": "9000", "llm_provider-other-header": "value", } result = process_azure_headers(input_headers) assert result == expected_output, "Unexpected output for partial Azure headers" def test_process_azure_headers_with_no_matching_headers(): input_headers = Headers( {"unrelated-header-1": "value1", "unrelated-header-2": "value2"} ) expected_output = { "llm_provider-unrelated-header-1": "value1", "llm_provider-unrelated-header-2": "value2", } result = process_azure_headers(input_headers) assert result == expected_output, "Unexpected output for non-matching headers" def test_process_azure_headers_with_dict_input(): input_headers = { "x-ratelimit-limit-requests": "100", "x-ratelimit-remaining-requests": "90", "other-header": "value", } expected_output = { "x-ratelimit-limit-requests": "100", "x-ratelimit-remaining-requests": "90", "llm_provider-x-ratelimit-limit-requests": "100", "llm_provider-x-ratelimit-remaining-requests": "90", "llm_provider-other-header": "value", } result = process_azure_headers(input_headers) assert result == expected_output, "Unexpected output for dict input" @pytest.mark.parametrize( "api_base, model, expected_endpoint", [ ( "https://my-endpoint-sweden-berri992.openai.azure.com", "dall-e-3-test", "https://my-endpoint-sweden-berri992.openai.azure.com/openai/deployments/dall-e-3-test/images/generations?api-version=2023-12-01-preview", ), ( "https://my-endpoint-sweden-berri992.openai.azure.com/openai/deployments/my-custom-deployment", "dall-e-3", "https://my-endpoint-sweden-berri992.openai.azure.com/openai/deployments/my-custom-deployment/images/generations?api-version=2023-12-01-preview", ), ], ) def test_process_azure_endpoint_url(api_base, model, expected_endpoint): from litellm.llms.AzureOpenAI.azure import AzureChatCompletion azure_chat_completion = AzureChatCompletion() input_args = { "azure_client_params": { "api_version": "2023-12-01-preview", "azure_endpoint": api_base, "azure_deployment": model, "max_retries": 2, "timeout": 600, "api_key": "f28ab7b695af4154bc53498e5bdccb07", }, "model": model, } result = azure_chat_completion.create_azure_base_url(**input_args) assert result == expected_endpoint, "Unexpected endpoint"