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

  1. Convert to a list: `llm.generate(list(prompts))` or `prompts.tolist()` for pandas/numpy.
  2. For a single prompt use `llm.generate([prompt])` or better `llm.invoke(prompt)`.
  3. 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

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


AI-assisted analysis of langchain-ai/langchain@e32fa9a52e (2026-08-14). Data as JSON: /api/errors/7a528c6ba1d1b4fa. Report an issue: GitHub.