From 705a65d4c46f3ed7d51d90caafd1f7bfef05cb11 Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Wed, 8 Jul 2026 14:22:38 +0500 Subject: [PATCH 1/9] fix(utils.py): support drop_params for dimensions on Azure and OpenAI compatible embedding calls Signed-off-by: Hasnaat Hussain --- litellm/utils.py | 19 +++++ .../test_get_optional_params_embeddings.py | 79 +++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/litellm/utils.py b/litellm/utils.py index 79372f00284..27778f3e33b 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -3248,7 +3248,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) @@ -3579,6 +3587,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 667207de789..3b54c6bf95d 100644 --- a/tests/local_testing/test_get_optional_params_embeddings.py +++ b/tests/local_testing/test_get_optional_params_embeddings.py @@ -163,3 +163,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 + + From eb0ddd0e67ddeeef0e021af34e076d61247a533a Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Wed, 12 Aug 2026 23:12:04 +0500 Subject: [PATCH 2/9] test(utils): cover provider-specific dimension dropping Signed-off-by: Hasnaat Hussain --- .../test_get_optional_params_embeddings.py | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/tests/local_testing/test_get_optional_params_embeddings.py b/tests/local_testing/test_get_optional_params_embeddings.py index 3b54c6bf95d..17625ee03c1 100644 --- a/tests/local_testing/test_get_optional_params_embeddings.py +++ b/tests/local_testing/test_get_optional_params_embeddings.py @@ -168,11 +168,8 @@ def test_openai_non_text_embedding_3_drop_params_global(): 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. + when drop_params is True (either per-call or globally), while preserving it otherwise. """ - from litellm.exceptions import UnsupportedParamsError - prev_drop_params = litellm.drop_params # 1. Test Azure drop_params=True (per-call) @@ -242,3 +239,21 @@ def test_azure_and_openai_compatible_drop_params(): litellm.drop_params = prev_drop_params +@pytest.mark.parametrize("provider", ["nvidia_nim", "lm_studio", "fireworks_ai"]) +def test_dedicated_openai_compatible_providers_drop_dimensions(provider): + """Keep dedicated provider mappings reachable when dimensions is dropped.""" + prev_drop_params = litellm.drop_params + litellm.drop_params = False + try: + model, custom_llm_provider, _, _ = get_llm_provider( + model=f"{provider}/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 + finally: + litellm.drop_params = prev_drop_params From de5cae31d6e3c5d544a0aaf6b3a2d4957c2fbc9f Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Wed, 12 Aug 2026 23:43:31 +0500 Subject: [PATCH 3/9] test(utils): cover embedding drop params in CI Signed-off-by: Hasnaat Hussain --- litellm/utils.py | 4 - tests/llm_translation/test_optional_params.py | 32 +++++++ .../test_get_optional_params_embeddings.py | 94 ------------------- 3 files changed, 32 insertions(+), 98 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 27778f3e33b..65ae1f861df 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -3248,14 +3248,10 @@ 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 diff --git a/tests/llm_translation/test_optional_params.py b/tests/llm_translation/test_optional_params.py index 814f5a235e1..fc5edc58463 100644 --- a/tests/llm_translation/test_optional_params.py +++ b/tests/llm_translation/test_optional_params.py @@ -1123,6 +1123,38 @@ def test_lm_studio_embedding_params(): assert len(optional_params) == 0 +@pytest.mark.parametrize("provider", ["azure", "together_ai"]) +def test_embedding_dimensions_drop_params_for_openai_compatible_provider(provider): + previous_drop_params = litellm.drop_params + try: + litellm.drop_params = False + dropped = get_optional_params_embeddings( + model=f"{provider}/dummy-model", + custom_llm_provider=provider, + dimensions=512, + drop_params=True, + ) + assert "dimensions" not in dropped + + litellm.drop_params = True + dropped_globally = get_optional_params_embeddings( + model=f"{provider}/dummy-model", + custom_llm_provider=provider, + dimensions=512, + ) + assert "dimensions" not in dropped_globally + + litellm.drop_params = False + preserved = get_optional_params_embeddings( + model=f"{provider}/dummy-model", + custom_llm_provider=provider, + dimensions=512, + ) + assert preserved["dimensions"] == 512 + finally: + litellm.drop_params = previous_drop_params + + def test_ollama_pydantic_obj(): from pydantic import BaseModel diff --git a/tests/local_testing/test_get_optional_params_embeddings.py b/tests/local_testing/test_get_optional_params_embeddings.py index 17625ee03c1..667207de789 100644 --- a/tests/local_testing/test_get_optional_params_embeddings.py +++ b/tests/local_testing/test_get_optional_params_embeddings.py @@ -163,97 +163,3 @@ 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), while preserving it otherwise. - """ - 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 - - -@pytest.mark.parametrize("provider", ["nvidia_nim", "lm_studio", "fireworks_ai"]) -def test_dedicated_openai_compatible_providers_drop_dimensions(provider): - """Keep dedicated provider mappings reachable when dimensions is dropped.""" - prev_drop_params = litellm.drop_params - litellm.drop_params = False - try: - model, custom_llm_provider, _, _ = get_llm_provider( - model=f"{provider}/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 - finally: - litellm.drop_params = prev_drop_params From 1bbd86943e65472cfff93c57540e9f67ebfc8301 Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Wed, 12 Aug 2026 23:58:52 +0500 Subject: [PATCH 4/9] test(utils): exercise embedding drop params in CI Signed-off-by: Hasnaat Hussain --- tests/llm_translation/test_optional_params.py | 32 ------------------- tests/test_litellm/test_utils.py | 32 +++++++++++++++++++ 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/tests/llm_translation/test_optional_params.py b/tests/llm_translation/test_optional_params.py index fc5edc58463..814f5a235e1 100644 --- a/tests/llm_translation/test_optional_params.py +++ b/tests/llm_translation/test_optional_params.py @@ -1123,38 +1123,6 @@ def test_lm_studio_embedding_params(): assert len(optional_params) == 0 -@pytest.mark.parametrize("provider", ["azure", "together_ai"]) -def test_embedding_dimensions_drop_params_for_openai_compatible_provider(provider): - previous_drop_params = litellm.drop_params - try: - litellm.drop_params = False - dropped = get_optional_params_embeddings( - model=f"{provider}/dummy-model", - custom_llm_provider=provider, - dimensions=512, - drop_params=True, - ) - assert "dimensions" not in dropped - - litellm.drop_params = True - dropped_globally = get_optional_params_embeddings( - model=f"{provider}/dummy-model", - custom_llm_provider=provider, - dimensions=512, - ) - assert "dimensions" not in dropped_globally - - litellm.drop_params = False - preserved = get_optional_params_embeddings( - model=f"{provider}/dummy-model", - custom_llm_provider=provider, - dimensions=512, - ) - assert preserved["dimensions"] == 512 - finally: - litellm.drop_params = previous_drop_params - - def test_ollama_pydantic_obj(): from pydantic import BaseModel diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index 8e9e6167fb9..cdab7a9c50f 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -647,6 +647,38 @@ def test_cohere_embedding_optional_params(): assert optional_params is not None +@pytest.mark.parametrize("provider", ["azure", "together_ai"]) +def test_embedding_dimensions_drop_params_for_openai_compatible_provider(provider): + previous_drop_params = litellm.drop_params + try: + litellm.drop_params = False + dropped = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/dummy-model", + custom_llm_provider=provider, + dimensions=512, + drop_params=True, + ) + assert "dimensions" not in dropped + + litellm.drop_params = True + dropped_globally = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/dummy-model", + custom_llm_provider=provider, + dimensions=512, + ) + assert "dimensions" not in dropped_globally + + litellm.drop_params = False + preserved = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/dummy-model", + custom_llm_provider=provider, + dimensions=512, + ) + assert preserved["dimensions"] == 512 + finally: + litellm.drop_params = previous_drop_params + + def validate_model_cost_values(model_data, exceptions=None): """ Validates that cost values in model data do not exceed 1. From 9e10a509e5c376b005335ef91f574419dedf2abc Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Thu, 13 Aug 2026 00:40:26 +0500 Subject: [PATCH 5/9] test(utils): cover embedding dimension guard branches Signed-off-by: Hasnaat Hussain --- litellm/utils.py | 14 +++++--------- tests/test_litellm/test_utils.py | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 65ae1f861df..bcf0c64b9e2 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -3584,15 +3584,11 @@ def get_optional_params_embeddings( 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) + if litellm.drop_params is True or drop_params is True: + if custom_llm_provider == "azure" or custom_llm_provider in litellm.openai_compatible_providers: + is_legacy_model = model is not None and "text-embedding-3" not in model + if is_legacy_model and "dimensions" not in (allowed_openai_params or []): + final_params.pop("dimensions", None) return final_params diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index cdab7a9c50f..5b2ec2db89c 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -675,6 +675,22 @@ def test_embedding_dimensions_drop_params_for_openai_compatible_provider(provide dimensions=512, ) assert preserved["dimensions"] == 512 + + litellm.drop_params = True + model_supported = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/text-embedding-3-small", + custom_llm_provider=provider, + dimensions=512, + ) + assert model_supported["dimensions"] == 512 + + explicitly_allowed = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/legacy-model", + custom_llm_provider=provider, + dimensions=512, + allowed_openai_params=["dimensions"], + ) + assert explicitly_allowed["dimensions"] == 512 finally: litellm.drop_params = previous_drop_params From a3d0789e3028afcd4fcb5d106af52939b6a4e492 Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Thu, 13 Aug 2026 00:52:27 +0500 Subject: [PATCH 6/9] test(utils): simplify dimension guard coverage Signed-off-by: Hasnaat Hussain --- litellm/utils.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index bcf0c64b9e2..2e220879dd3 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -3248,8 +3248,7 @@ 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 = litellm.drop_params or False + drop_params = litellm.drop_params or False if drop_params is None else drop_params additional_drop_params = passed_params.pop("additional_drop_params", None) @@ -3584,11 +3583,14 @@ def get_optional_params_embeddings( 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: - if custom_llm_provider == "azure" or custom_llm_provider in litellm.openai_compatible_providers: - is_legacy_model = model is not None and "text-embedding-3" not in model - if is_legacy_model and "dimensions" not in (allowed_openai_params or []): - final_params.pop("dimensions", None) + 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) + and 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 From 56969ca9b44330d0bfbc418679be84c0358cc4e9 Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Thu, 13 Aug 2026 01:17:50 +0500 Subject: [PATCH 7/9] test(utils): cover embedding dimensions in core-utils shard Signed-off-by: Hasnaat Hussain --- .../test_embedding_optional_params.py | 51 +++++++++++++++++++ tests/test_litellm/test_utils.py | 48 ----------------- 2 files changed, 51 insertions(+), 48 deletions(-) create mode 100644 tests/test_litellm/litellm_core_utils/test_embedding_optional_params.py diff --git a/tests/test_litellm/litellm_core_utils/test_embedding_optional_params.py b/tests/test_litellm/litellm_core_utils/test_embedding_optional_params.py new file mode 100644 index 00000000000..6a044a5680a --- /dev/null +++ b/tests/test_litellm/litellm_core_utils/test_embedding_optional_params.py @@ -0,0 +1,51 @@ +import pytest + +import litellm + + +@pytest.mark.parametrize("provider", ["azure", "together_ai"]) +def test_embedding_dimensions_drop_params_for_openai_compatible_provider(provider): + previous_drop_params = litellm.drop_params + try: + litellm.drop_params = False + dropped = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/dummy-model", + custom_llm_provider=provider, + dimensions=512, + drop_params=True, + ) + assert "dimensions" not in dropped + + litellm.drop_params = True + dropped_globally = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/dummy-model", + custom_llm_provider=provider, + dimensions=512, + ) + assert "dimensions" not in dropped_globally + + litellm.drop_params = False + preserved = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/dummy-model", + custom_llm_provider=provider, + dimensions=512, + ) + assert preserved["dimensions"] == 512 + + litellm.drop_params = True + model_supported = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/text-embedding-3-small", + custom_llm_provider=provider, + dimensions=512, + ) + assert model_supported["dimensions"] == 512 + + explicitly_allowed = litellm.utils.get_optional_params_embeddings( + model=f"{provider}/legacy-model", + custom_llm_provider=provider, + dimensions=512, + allowed_openai_params=["dimensions"], + ) + assert explicitly_allowed["dimensions"] == 512 + finally: + litellm.drop_params = previous_drop_params diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index 5b2ec2db89c..8e9e6167fb9 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -647,54 +647,6 @@ def test_cohere_embedding_optional_params(): assert optional_params is not None -@pytest.mark.parametrize("provider", ["azure", "together_ai"]) -def test_embedding_dimensions_drop_params_for_openai_compatible_provider(provider): - previous_drop_params = litellm.drop_params - try: - litellm.drop_params = False - dropped = litellm.utils.get_optional_params_embeddings( - model=f"{provider}/dummy-model", - custom_llm_provider=provider, - dimensions=512, - drop_params=True, - ) - assert "dimensions" not in dropped - - litellm.drop_params = True - dropped_globally = litellm.utils.get_optional_params_embeddings( - model=f"{provider}/dummy-model", - custom_llm_provider=provider, - dimensions=512, - ) - assert "dimensions" not in dropped_globally - - litellm.drop_params = False - preserved = litellm.utils.get_optional_params_embeddings( - model=f"{provider}/dummy-model", - custom_llm_provider=provider, - dimensions=512, - ) - assert preserved["dimensions"] == 512 - - litellm.drop_params = True - model_supported = litellm.utils.get_optional_params_embeddings( - model=f"{provider}/text-embedding-3-small", - custom_llm_provider=provider, - dimensions=512, - ) - assert model_supported["dimensions"] == 512 - - explicitly_allowed = litellm.utils.get_optional_params_embeddings( - model=f"{provider}/legacy-model", - custom_llm_provider=provider, - dimensions=512, - allowed_openai_params=["dimensions"], - ) - assert explicitly_allowed["dimensions"] == 512 - finally: - litellm.drop_params = previous_drop_params - - def validate_model_cost_values(model_data, exceptions=None): """ Validates that cost values in model data do not exceed 1. From 310db32134626b8e73d4a0b4d0680ac7a02629ca Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Thu, 13 Aug 2026 01:28:29 +0500 Subject: [PATCH 8/9] fix(utils): avoid mutable fallback in dimension guard Signed-off-by: Hasnaat Hussain --- litellm/utils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 2e220879dd3..14fb44d54c5 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -3582,13 +3582,12 @@ 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) and model is not None and "text-embedding-3" not in model - and "dimensions" not in (allowed_openai_params or []) + and "dimensions" not in (allowed_openai_params or ()) ): final_params.pop("dimensions", None) From 2b2af8cc20a6a3c473b89fb1430f9d41670f725c Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Thu, 13 Aug 2026 01:45:25 +0500 Subject: [PATCH 9/9] fix(utils): preserve optional drop params type Signed-off-by: Hasnaat Hussain --- litellm/utils.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 14fb44d54c5..35f40cc6f81 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -3248,7 +3248,7 @@ def get_optional_params_embeddings( special_params: Final = passed_params.pop("kwargs") drop_params = passed_params.pop("drop_params", None) - drop_params = litellm.drop_params or False if drop_params is None else drop_params + resolved_drop_params = litellm.drop_params or False if drop_params is None else drop_params additional_drop_params = passed_params.pop("additional_drop_params", None) @@ -3296,7 +3296,7 @@ def get_optional_params_embeddings( non_default_params=non_default_params, optional_params={}, model=model, - drop_params=drop_params if drop_params is not None else False, + drop_params=resolved_drop_params, ) # Provider-only params (e.g. Cohere input_type) are not in # OPENAI_EMBEDDING_PARAMS, so embedding_pre_process drops them from @@ -3583,9 +3583,8 @@ def get_optional_params_embeddings( final_params.pop("extra_body", None) if ( - (litellm.drop_params is True or drop_params is True) + (litellm.drop_params is True or resolved_drop_params is True) and (custom_llm_provider == "azure" or custom_llm_provider in litellm.openai_compatible_providers) - and model is not None and "text-embedding-3" not in model and "dimensions" not in (allowed_openai_params or ()) ):