From 9df6e2a1de00a7e77fb40641a3de9d4916dadb7d Mon Sep 17 00:00:00 2001 From: s-zx <2575376715@qq.com> Date: Tue, 10 Mar 2026 08:26:31 +0100 Subject: [PATCH] test(embeddings): add parametrized tests for dimensions drop_params behaviour MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cover six scenarios for openai_compatible_providers: - non-text-embedding-3 model + drop_params=True → dimensions dropped - non-text-embedding-3 model + drop_params=False → dimensions forwarded - text-embedding-3-* model (any drop_params) → dimensions always kept Regression test for #23119. --- tests/test_litellm/test_utils.py | 46 ++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index c2df3db0e30..5929a445a30 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -474,6 +474,52 @@ def test_cohere_embedding_optional_params(): assert optional_params is not None +@pytest.mark.parametrize( + "model,custom_llm_provider,drop_params,expect_dimensions", + [ + # hosted_vllm with a non-text-embedding-3 model and drop_params=True → drop + ("intfloat/e5-large-v2", "hosted_vllm", True, False), + # hosted_vllm with a non-text-embedding-3 model and drop_params=False → keep + ("intfloat/e5-large-v2", "hosted_vllm", False, True), + # text-embedding-3 model should always keep dimensions + ("text-embedding-3-small", "openai_compatible_providers", True, True), + ("text-embedding-3-small", "openai_compatible_providers", False, True), + # openrouter with a non-text-embedding-3 model and drop_params=True → drop + ("jina-embeddings-v3", "openai_compatible_providers", True, False), + # openrouter without drop_params → keep (don't block providers that support dimensions) + ("jina-embeddings-v3", "openai_compatible_providers", False, True), + ], +) +def test_openai_compatible_embedding_dimensions_drop_params( + model, custom_llm_provider, drop_params, expect_dimensions +): + """dimensions should only be dropped for non-text-embedding-3 models when drop_params=True. + + Regression test for https://github.com/BerriAI/litellm/issues/23119 — hosted_vllm + endpoints return 422 when `dimensions` is forwarded, but other compatible providers + (Jina AI, Cohere via OpenRouter) legitimately support the parameter. + """ + from litellm import get_optional_params_embeddings + + result = get_optional_params_embeddings( + model=model, + custom_llm_provider=custom_llm_provider, + input="hello", + dimensions=512, + drop_params=drop_params, + ) + if expect_dimensions: + assert "dimensions" in result, ( + f"Expected 'dimensions' to be present for model={model!r}, " + f"drop_params={drop_params}" + ) + else: + assert "dimensions" not in result, ( + f"Expected 'dimensions' to be dropped for model={model!r}, " + f"drop_params={drop_params}" + ) + + def validate_model_cost_values(model_data, exceptions=None): """ Validates that cost values in model data do not exceed 1.