{"record":{"id":"7a528c6ba1d1b4fa","repo":"langchain-ai/langchain","slug":"argument-prompts-is-expected-to-be-of-type-list","errorCode":null,"errorMessage":"Argument 'prompts' is expected to be of type list[str], received argument of type {type(prompts)}.","messagePattern":"Argument 'prompts' is expected to be of type list\\[str\\], received argument of type (.+?)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"libs/core/langchain_core/language_models/llms.py","lineNumber":913,"sourceCode":"            **kwargs: Arbitrary additional keyword arguments.\n\n                These are usually passed to the model provider API call.\n\n        Raises:\n            ValueError: If prompts is not a list.\n            ValueError: If the length of `callbacks`, `tags`, `metadata`, or\n                `run_name` (if provided) does not match the length of prompts.\n\n        Returns:\n            An `LLMResult`, which contains a list of candidate `Generations` for each\n                input prompt and additional model provider-specific output.\n        \"\"\"\n        if not isinstance(prompts, list):\n            msg = (  # type: ignore[unreachable]\n                \"Argument 'prompts' is expected to be of type list[str], received\"\n                f\" argument of type {type(prompts)}.\"\n            )\n            raise ValueError(msg)  # noqa: TRY004\n        # Create callback managers\n        if isinstance(metadata, list):\n            metadata = [\n                {\n                    **(meta or {}),\n                    **self._get_ls_params_with_defaults(stop=stop, **kwargs),\n                }\n                for meta in metadata\n            ]\n        elif isinstance(metadata, dict):\n            metadata = {\n                **(metadata or {}),\n                **self._get_ls_params_with_defaults(stop=stop, **kwargs),\n            }\n        if (\n            isinstance(callbacks, list)\n            and callbacks\n            and (","sourceCodeStart":895,"sourceCodeEnd":931,"githubUrl":"https://github.com/langchain-ai/langchain/blob/e32fa9a52eab3b61ad7a45399bfde59b3e580fc4/libs/core/langchain_core/language_models/llms.py#L895-L931","documentation":"`ValueError` from `BaseLLM.generate`: the `prompts` parameter must be a `list` of strings. The batch-generate API pre-validates because it zips prompts against per-prompt callback managers, tags, and metadata; passing a tuple, generator, single string, or other iterable triggers this guard.","triggerScenarios":"Calling `llm.generate(prompts)` where `prompts` is a tuple, a generator expression, a plain string (treated as one prompt but not a list), or a `map` object. Note `llm.invoke` accepts strings; `generate` strictly requires `list[str]`.","commonSituations":"Passing a tuple from config constants; feeding `df[\"prompt\"].iterrows()`-style generators; passing a single prompt string to `generate` instead of `[prompt]`; pandas Series not converted with `.tolist()`.","solutions":["Convert to a list: `llm.generate(list(prompts))` or `prompts.tolist()` for pandas/numpy.","For a single prompt use `llm.generate([prompt])` or better `llm.invoke(prompt)`.","Materialize generators before the call."],"exampleFix":"# before\nllm.generate(\"single prompt\")            # not a list\nllm.generate((p for p in prompts))      # generator\n\n# after\nllm.invoke(\"single prompt\")\nllm.generate(list(prompts))","handlingStrategy":"validation","validationCode":"if not isinstance(prompts, list):\n    prompts = list(prompts) if not isinstance(prompts, str) else [prompts]","typeGuard":"def is_prompt_list(prompts: object) -> bool:\n    return isinstance(prompts, list)","tryCatchPattern":"try:\n    result = llm.generate(prompts)\nexcept ValueError as e:\n    if \"expected to be of type list[str]\" in str(e):\n        result = llm.generate(list(prompts))\n    else:\n        raise","preventionTips":["Convert tuples/generators/Series to `list(...)` / `.tolist()` before `generate`.","Use `llm.invoke(prompt)` for single prompts.","Type-annotate batch APIs as `list[str]` in your wrappers."],"tags":["input-validation","llm","batch","type-mismatch"],"backgroundTag":null,"analyzedSha":"e32fa9a52eab3b61ad7a45399bfde59b3e580fc4","analyzedAt":"2026-08-14T18:42:09.092Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}