From 7805f38ccebfa571d996eddbb2766d6edaf92778 Mon Sep 17 00:00:00 2001 From: Chesars Date: Mon, 23 Mar 2026 11:01:15 -0300 Subject: [PATCH] fix(vertex_ai): forward dimensions parameter in multimodalembedding requests The `dimensions` parameter was correctly mapped to `outputDimensionality` in `optional_params` but never placed in the request body. The Vertex AI predict endpoint expects it under a `parameters` field. Add `parameters` dict to `VertexMultimodalEmbeddingRequest` TypedDict and populate it from `optional_params` in `transform_embedding_request`. Fixes #24392 --- .../multimodal_embeddings/transformation.py | 5 +++ litellm/types/llms/vertex_ai.py | 5 +-- ..._ai_multimodal_embedding_transformation.py | 32 +++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/litellm/llms/vertex_ai/multimodal_embeddings/transformation.py b/litellm/llms/vertex_ai/multimodal_embeddings/transformation.py index d82c2bebb7f..d5cfca96812 100644 --- a/litellm/llms/vertex_ai/multimodal_embeddings/transformation.py +++ b/litellm/llms/vertex_ai/multimodal_embeddings/transformation.py @@ -201,6 +201,11 @@ class VertexAIMultimodalEmbeddingConfig(BaseEmbeddingConfig): request_data["instances"] = [vertex_request_instance] + if "outputDimensionality" in optional_params: + request_data["parameters"] = { + "outputDimensionality": optional_params["outputDimensionality"] + } + return cast(dict, request_data) def transform_embedding_response( diff --git a/litellm/types/llms/vertex_ai.py b/litellm/types/llms/vertex_ai.py index c49fc96a65b..e5442e692b9 100644 --- a/litellm/types/llms/vertex_ai.py +++ b/litellm/types/llms/vertex_ai.py @@ -514,8 +514,9 @@ class Instance(TypedDict, total=False): video: InstanceVideo -class VertexMultimodalEmbeddingRequest(TypedDict): - instances: List[Instance] +class VertexMultimodalEmbeddingRequest(TypedDict, total=False): + instances: Required[List[Instance]] + parameters: dict class VideoEmbedding(TypedDict): diff --git a/tests/test_litellm/llms/vertex_ai/multimodal_embeddings/test_vertex_ai_multimodal_embedding_transformation.py b/tests/test_litellm/llms/vertex_ai/multimodal_embeddings/test_vertex_ai_multimodal_embedding_transformation.py index 63677c0f5f1..e060e2a7e1a 100644 --- a/tests/test_litellm/llms/vertex_ai/multimodal_embeddings/test_vertex_ai_multimodal_embedding_transformation.py +++ b/tests/test_litellm/llms/vertex_ai/multimodal_embeddings/test_vertex_ai_multimodal_embedding_transformation.py @@ -135,3 +135,35 @@ class TestVertexMultimodalEmbedding: ] result = self.config.process_openai_embedding_input(input_data) assert result == expected_output, f"Expected {expected_output}, but got {result}" + + def test_dimensions_parameter_forwarded_as_output_dimensionality(self): + """Test that the dimensions parameter is forwarded as outputDimensionality + in the request body parameters field. + + Fixes: https://github.com/BerriAI/litellm/issues/24392 + """ + optional_params = {} + optional_params = self.config.map_openai_params( + non_default_params={"dimensions": 128}, + optional_params=optional_params, + model="multimodalembedding", + drop_params=False, + ) + request = self.config.transform_embedding_request( + model="multimodalembedding", + input="Hello world", + optional_params=optional_params, + headers={}, + ) + assert "parameters" in request, "Request should contain 'parameters' field" + assert request["parameters"]["outputDimensionality"] == 128 + + def test_no_parameters_field_when_dimensions_not_set(self): + """Test that no parameters field is added when dimensions is not set.""" + request = self.config.transform_embedding_request( + model="multimodalembedding", + input="Hello world", + optional_params={}, + headers={}, + ) + assert "parameters" not in request