{"record":{"id":"152f490434d2dec2","repo":"langchain-ai/langchain","slug":"invalid-input-type-type-model-input-must-be-a-152f49","errorCode":null,"errorMessage":"Invalid input type {type(model_input)}. Must be a PromptValue, str, or list of BaseMessages.","messagePattern":"Invalid input type (.+?)\\. Must be a PromptValue, str, or list of BaseMessages\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"libs/core/langchain_core/language_models/llms.py","lineNumber":332,"sourceCode":"\n    @property\n    @override\n    def OutputType(self) -> type[str]:\n        \"\"\"Get the output type for this `Runnable`.\"\"\"\n        return str\n\n    def _convert_input(self, model_input: LanguageModelInput) -> PromptValue:\n        if isinstance(model_input, PromptValue):\n            return model_input\n        if isinstance(model_input, str):\n            return StringPromptValue(text=model_input)\n        if isinstance(model_input, Sequence):\n            return ChatPromptValue(messages=convert_to_messages(model_input))\n        msg = (  # type: ignore[unreachable]\n            f\"Invalid input type {type(model_input)}. \"\n            \"Must be a PromptValue, str, or list of BaseMessages.\"\n        )\n        raise ValueError(msg)\n\n    def _get_ls_params(\n        self,\n        stop: list[str] | None = None,\n        **kwargs: Any,\n    ) -> LangSmithParams:\n        \"\"\"Get standard params for tracing.\"\"\"\n        # get default provider from class name\n        default_provider = self.__class__.__name__\n        default_provider = default_provider.removesuffix(\"LLM\")\n        default_provider = default_provider.lower()\n\n        ls_params = LangSmithParams(ls_provider=default_provider, ls_model_type=\"llm\")\n        if stop:\n            ls_params[\"ls_stop\"] = stop\n\n        # model\n        if \"model\" in kwargs and isinstance(kwargs[\"model\"], str):","sourceCodeStart":314,"sourceCodeEnd":350,"githubUrl":"https://github.com/langchain-ai/langchain/blob/e32fa9a52eab3b61ad7a45399bfde59b3e580fc4/libs/core/langchain_core/language_models/llms.py#L314-L350","documentation":"`ValueError` from `BaseLLM._convert_input`: completion-style LLMs accept a `str` prompt, a `PromptValue`, or a `Sequence` of messages (converted via `convert_to_messages`). Any other type — dict, single `BaseMessage`, generator, `None`, int — is rejected before the request is built.","triggerScenarios":"Calling `llm.invoke(msg)` with a bare message instead of `[msg]`; passing `None`; passing a dict prompt; passing a generator of prompts; passing an int/float from a data bug.","commonSituations":"Reusing chat-model call patterns on `LLM` objects; dynamic pipelines where a variable can be `None`; refactors that changed the input type without updating call sites.","solutions":["Pass a plain string for completion LLMs: `llm.invoke(\"hello\")`.","Wrap single messages in a list, or use a `ChatModel` for message-based flows.","Add explicit `None` checks upstream for optional prompt variables.","Type call sites as `LanguageModelInput` for static verification."],"exampleFix":"# before\nresp = llm.invoke(HumanMessage(content=\"hi\"))  # ValueError\n\n# after\nresp = llm.invoke(\"hi\")\n# or\nresp = llm.invoke([HumanMessage(content=\"hi\")])","handlingStrategy":"type-guard","validationCode":"from collections.abc import Sequence\nfrom langchain_core.prompt_values import PromptValue\nif not isinstance(prompt, (str, PromptValue, Sequence)):\n    prompt = [prompt]  # or raise with a clear message","typeGuard":"def is_valid_llm_input(value: object) -> bool:\n    return isinstance(value, (str, PromptValue)) or isinstance(value, Sequence)","tryCatchPattern":"try:\n    out = llm.invoke(prompt)\nexcept ValueError as e:\n    if \"Invalid input type\" in str(e):\n        out = llm.invoke(str(prompt))\n    else:\n        raise","preventionTips":["Pass plain strings to completion LLMs; wrap single messages in lists.","Guard optional prompt variables against `None` upstream.","Annotate call sites with `LanguageModelInput`."],"tags":["input-validation","llm","type-mismatch"],"backgroundTag":null,"analyzedSha":"e32fa9a52eab3b61ad7a45399bfde59b3e580fc4","analyzedAt":"2026-08-14T18:42:09.092Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}