langchain-ai/langchain · error · ValueError
Argument 'prompts' is expected to be of type list[str], rece
Error message
Argument 'prompts' is expected to be of type list[str], received argument of type {type(prompts)}. What it means
`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.
Source
Thrown at libs/core/langchain_core/language_models/llms.py:913
**kwargs: Arbitrary additional keyword arguments.
These are usually passed to the model provider API call.
Raises:
ValueError: If prompts is not a list.
ValueError: If the length of `callbacks`, `tags`, `metadata`, or
`run_name` (if provided) does not match the length of prompts.
Returns:
An `LLMResult`, which contains a list of candidate `Generations` for each
input prompt and additional model provider-specific output.
"""
if not isinstance(prompts, list):
msg = ( # type: ignore[unreachable]
"Argument 'prompts' is expected to be of type list[str], received"
f" argument of type {type(prompts)}."
)
raise ValueError(msg) # noqa: TRY004
# Create callback managers
if isinstance(metadata, list):
metadata = [
{
**(meta or {}),
**self._get_ls_params_with_defaults(stop=stop, **kwargs),
}
for meta in metadata
]
elif isinstance(metadata, dict):
metadata = {
**(metadata or {}),
**self._get_ls_params_with_defaults(stop=stop, **kwargs),
}
if (
isinstance(callbacks, list)
and callbacks
and (View on GitHub (pinned to e32fa9a52e)
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.
Example fix
# before
llm.generate("single prompt") # not a list
llm.generate((p for p in prompts)) # generator
# after
llm.invoke("single prompt")
llm.generate(list(prompts)) Defensive patterns
Strategy: validation
Validate before calling
if not isinstance(prompts, list):
prompts = list(prompts) if not isinstance(prompts, str) else [prompts] Type guard
def is_prompt_list(prompts: object) -> bool:
return isinstance(prompts, list) Try / catch
try:
result = llm.generate(prompts)
except ValueError as e:
if "expected to be of type list[str]" in str(e):
result = llm.generate(list(prompts))
else:
raise Prevention
- 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.
When it happens
Trigger: 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]`.
Common situations: 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()`.
Related errors
- Invalid input type {type(model_input)}. Must be a PromptValu
- Invalid input type {type(model_input)}. Must be a PromptValu
- Unsupported cache value {cache}
- callbacks must be the same length as prompts
- tags must be a list of the same length as prompts
AI-assisted analysis of langchain-ai/langchain@e32fa9a52e (2026-08-14).
Data as JSON: /api/errors/7a528c6ba1d1b4fa.
Report an issue: GitHub.