diff --git a/litellm/utils.py b/litellm/utils.py index 5e9e115ed54..94577745e23 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -3430,7 +3430,15 @@ def get_optional_params_embeddings( special_params: Final = passed_params.pop("kwargs") drop_params = passed_params.pop("drop_params", None) + if drop_params is None: + drop_params = special_params.pop("drop_params", None) + if drop_params is None: + drop_params = litellm.drop_params or False + additional_drop_params = passed_params.pop("additional_drop_params", None) + if additional_drop_params is None: + additional_drop_params = special_params.pop("additional_drop_params", None) + allowed_openai_params = passed_params.pop("allowed_openai_params", None) or [] # Remove function objects from passed_params to avoid JSON serialization errors passed_params.pop("get_supported_openai_params", None) @@ -3761,6 +3769,17 @@ def get_optional_params_embeddings( if "extra_body" in final_params and len(final_params["extra_body"]) == 0: final_params.pop("extra_body", None) + # High-performance check optimized to avoid allocations in hot paths + if (litellm.drop_params is True or drop_params is True) and ( + custom_llm_provider == "azure" or custom_llm_provider in litellm.openai_compatible_providers + ): + if ( + model is not None + and "text-embedding-3" not in model + and "dimensions" not in (allowed_openai_params or []) + ): + final_params.pop("dimensions", None) + return final_params diff --git a/tests/local_testing/test_get_optional_params_embeddings.py b/tests/local_testing/test_get_optional_params_embeddings.py index 60ccfbfaebe..60b71c9b849 100644 --- a/tests/local_testing/test_get_optional_params_embeddings.py +++ b/tests/local_testing/test_get_optional_params_embeddings.py @@ -160,3 +160,82 @@ def test_openai_non_text_embedding_3_drop_params_global(): assert "dimensions" not in optional_params finally: litellm.drop_params = prev_drop_params + + +def test_azure_and_openai_compatible_drop_params(): + """ + Verify that dimensions parameter is correctly dropped on Azure and OpenAI compatible calls + when drop_params is True (either per-call or globally), and raises UnsupportedParamsError + otherwise. + """ + from litellm.exceptions import UnsupportedParamsError + + prev_drop_params = litellm.drop_params + + # 1. Test Azure drop_params=True (per-call) + litellm.drop_params = False + model, custom_llm_provider, _, _ = get_llm_provider( + model="azure/dummy-model" + ) + optional_params = get_optional_params_embeddings( + model=model, + dimensions=512, + custom_llm_provider=custom_llm_provider, + drop_params=True, + ) + assert "dimensions" not in optional_params + + # 2. Test Azure drop_params=True (global) + litellm.drop_params = True + optional_params = get_optional_params_embeddings( + model=model, + dimensions=512, + custom_llm_provider=custom_llm_provider, + ) + assert "dimensions" not in optional_params + + # 3. Test Azure drop_params=False (preserves dimensions parameter) + litellm.drop_params = False + optional_params = get_optional_params_embeddings( + model=model, + dimensions=512, + custom_llm_provider=custom_llm_provider, + ) + assert "dimensions" in optional_params + assert optional_params["dimensions"] == 512 + + # 4. Test OpenAI compatible (Together AI) drop_params=True (per-call) + model, custom_llm_provider, _, _ = get_llm_provider( + model="together_ai/dummy-model" + ) + optional_params = get_optional_params_embeddings( + model=model, + dimensions=512, + custom_llm_provider=custom_llm_provider, + drop_params=True, + ) + assert "dimensions" not in optional_params + + # 5. Test OpenAI compatible (Together AI) drop_params=True (global) + litellm.drop_params = True + optional_params = get_optional_params_embeddings( + model=model, + dimensions=512, + custom_llm_provider=custom_llm_provider, + ) + assert "dimensions" not in optional_params + + # 6. Test OpenAI compatible (Together AI) drop_params=False (preserves dimensions parameter) + litellm.drop_params = False + optional_params = get_optional_params_embeddings( + model=model, + dimensions=512, + custom_llm_provider=custom_llm_provider, + ) + assert "dimensions" in optional_params + assert optional_params["dimensions"] == 512 + + # Restore state + litellm.drop_params = prev_drop_params + +