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
This commit is contained in:
Chesars 2026-03-23 11:01:15 -03:00
parent f5194b5ce3
commit 7805f38cce
3 changed files with 40 additions and 2 deletions

View file

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

View file

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

View file

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