BerriAI/litellm · error · ValueError

Nested input list must not be empty

Error message

Nested input list must not be empty

What it means

Gemini batch-embed input guard: a nested list element (a combined-embedding group) is empty, so no parts could be produced for that content and the request is rejected rather than sending an empty content block.

Source

Thrown at litellm/llms/vertex_ai/gemini_embeddings/batch_embed_content_transformation.py:240

    into a single content with multiple parts, producing one combined
    embedding for the group.

    Examples:
        input=["text", "image"]         → 2 separate embeddings
        input=[["text", "image"]]       → 1 combined embedding
        input=[["text", "image"], "x"]  → 2 embeddings (1 combined + 1 separate)
    """
    gemini_model_name: Final = f"models/{model}"

    gemini_params: Final = _filter_embed_params(optional_params)

    input_list: Final = [input] if isinstance(input, str) else input
    requests: Final[list[EmbedContentRequest]] = []

    for element in input_list:
        if isinstance(element, list):
            if not element:
                raise ValueError("Nested input list must not be empty")
            for sub in element:
                if not isinstance(sub, str):
                    raise ValueError(f"Elements inside a nested input list must be strings, got {type(sub)}")
            parts = [_build_part_for_input(sub, resolved_files=resolved_files) for sub in element]
        else:
            parts = [_build_part_for_input(element, resolved_files=resolved_files)]
        request = EmbedContentRequest(
            model=gemini_model_name,
            content=ContentType(parts=parts),
            **gemini_params,
        )
        requests.append(request)

    return VertexAIBatchEmbeddingsRequestBody(requests=requests)


def transform_openai_input_gemini_embed_content(
    input: GeminiEmbeddingInput,

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Pass a non-empty list of strings inside the nested input list; remove empty inner lists before calling the API.
  2. Filter the input, e.g. input = [lst for lst in input if lst], or ensure each inner list contains at least one string.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/llms/vertex_ai/gemini_embeddings/batch_embed_content_transformation.py:240 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/ca18910bc9953ff4. Report an issue: GitHub.