BerriAI/litellm · error · ValueError

Elements inside a nested input list must be strings, got {ty

Error message

Elements inside a nested input list must be strings, got {type(sub)}

What it means

Validation while flattening embedding input lists: a nested list (which requests one combined multi-part embedding) contains a non-string element; combined embedding parts must be strings (text or file/data references).

Source

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

    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,
    model: str,
    optional_params: dict,
    resolved_files: dict[str, dict[str, str]] | None = None,

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Ensure every element inside the nested input list is a string; convert numbers or other objects with str() before passing them.
  2. If you meant to pass images or dicts, pass them at the top level rather than nested inside a list of strings.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/llms/vertex_ai/gemini_embeddings/batch_embed_content_transformation.py:243 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/24fee4a595e3fa2e. Report an issue: GitHub.