{"record":{"id":"24fee4a595e3fa2e","repo":"BerriAI/litellm","slug":"elements-inside-a-nested-input-list-must-be-string","errorCode":null,"errorMessage":"Elements inside a nested input list must be strings, got {type(sub)}","messagePattern":"Elements inside a nested input list must be strings, got (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/vertex_ai/gemini_embeddings/batch_embed_content_transformation.py","lineNumber":243,"sourceCode":"    Examples:\n        input=[\"text\", \"image\"]         → 2 separate embeddings\n        input=[[\"text\", \"image\"]]       → 1 combined embedding\n        input=[[\"text\", \"image\"], \"x\"]  → 2 embeddings (1 combined + 1 separate)\n    \"\"\"\n    gemini_model_name: Final = f\"models/{model}\"\n\n    gemini_params: Final = _filter_embed_params(optional_params)\n\n    input_list: Final = [input] if isinstance(input, str) else input\n    requests: Final[list[EmbedContentRequest]] = []\n\n    for element in input_list:\n        if isinstance(element, list):\n            if not element:\n                raise ValueError(\"Nested input list must not be empty\")\n            for sub in element:\n                if not isinstance(sub, str):\n                    raise ValueError(f\"Elements inside a nested input list must be strings, got {type(sub)}\")\n            parts = [_build_part_for_input(sub, resolved_files=resolved_files) for sub in element]\n        else:\n            parts = [_build_part_for_input(element, resolved_files=resolved_files)]\n        request = EmbedContentRequest(\n            model=gemini_model_name,\n            content=ContentType(parts=parts),\n            **gemini_params,\n        )\n        requests.append(request)\n\n    return VertexAIBatchEmbeddingsRequestBody(requests=requests)\n\n\ndef transform_openai_input_gemini_embed_content(\n    input: GeminiEmbeddingInput,\n    model: str,\n    optional_params: dict,\n    resolved_files: dict[str, dict[str, str]] | None = None,","sourceCodeStart":225,"sourceCodeEnd":261,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/llms/vertex_ai/gemini_embeddings/batch_embed_content_transformation.py#L225-L261","documentation":"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).","triggerScenarios":"Thrown at litellm/llms/vertex_ai/gemini_embeddings/batch_embed_content_transformation.py:243 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure every element inside the nested input list is a string; convert numbers or other objects with str() before passing them.","If you meant to pass images or dicts, pass them at the top level rather than nested inside a list of strings."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}