fix(utils.py): support drop_params for dimensions on Azure and OpenAI compatible embedding calls

Signed-off-by: Hasnaat Hussain <hasnaat.hussain.2@gmail.com>
This commit is contained in:
Hasnaat Hussain 2026-07-08 14:22:38 +05:00
parent 5e4b3838aa
commit c37cbb7fde
2 changed files with 98 additions and 0 deletions

View file

@ -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

View file

@ -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