{"record":{"id":"410a66ea320fb6e7","repo":"langchain-ai/langchain","slug":"number-of-manually-provided-run-id-s-does-not-matc","errorCode":null,"errorMessage":"Number of manually provided run_id's does not match batch length. {len(run_id)} != {len(prompts)}","messagePattern":"Number of manually provided run_id's does not match batch length\\. (.+?) != (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"libs/core/langchain_core/language_models/llms.py","lineNumber":1088,"sourceCode":"        else:\n            llm_output = {}\n            run_info = None\n        generations = [existing_prompts[i] for i in range(len(prompts))]\n        return LLMResult(generations=generations, llm_output=llm_output, run=run_info)\n\n    @staticmethod\n    def _get_run_ids_list(\n        run_id: uuid.UUID | list[uuid.UUID | None] | None, prompts: list[str]\n    ) -> list[uuid.UUID | None]:\n        if run_id is None:\n            return [None] * len(prompts)\n        if isinstance(run_id, list):\n            if len(run_id) != len(prompts):\n                msg = (\n                    \"Number of manually provided run_id's does not match batch length.\"\n                    f\" {len(run_id)} != {len(prompts)}\"\n                )\n                raise ValueError(msg)\n            return run_id\n        return [run_id] + [None] * (len(prompts) - 1)\n\n    async def _agenerate_helper(\n        self,\n        prompts: list[str],\n        stop: list[str] | None,\n        run_managers: list[AsyncCallbackManagerForLLMRun],\n        *,\n        new_arg_supported: bool,\n        **kwargs: Any,\n    ) -> LLMResult:\n        try:\n            output = (\n                await self._agenerate(\n                    prompts,\n                    stop=stop,\n                    run_manager=run_managers[0] if run_managers else None,","sourceCodeStart":1070,"sourceCodeEnd":1106,"githubUrl":"https://github.com/langchain-ai/langchain/blob/e32fa9a52eab3b61ad7a45399bfde59b3e580fc4/libs/core/langchain_core/language_models/llms.py#L1070-L1106","documentation":"Raised by BaseLLM._get_run_ids_list when run_id is passed as a list to generate but its length differs from the number of prompts. Manually supplied run IDs must map one-to-one onto the batch so each LLM run gets a deterministic UUID.","triggerScenarios":"llm.generate([p1, p2, p3], run_id=[uuid1, uuid2]) — 2 IDs for 3 prompts. A single UUID (not in a list) is accepted and applied to the first prompt only; only a mismatched list raises.","commonSituations":"Replaying or resuming batched requests with fixed run IDs (e.g. for LangSmith trace correlation or idempotent caching) and forgetting to regenerate the ID list after changing batch size.","solutions":["Build one UUID per prompt: run_id=[uuid.uuid4() for _ in prompts]","Or pass a single uuid.UUID to apply it to the first prompt only","Or pass run_id=None to let LangChain generate IDs"],"exampleFix":"# before\nllm.generate(prompts, run_id=[uuid.uuid4()])\n# after\nllm.generate(prompts, run_id=[uuid.uuid4() for _ in prompts])","handlingStrategy":"validation","validationCode":"if isinstance(run_id, list):\n    assert len(run_id) == len(prompts), f'{len(run_id)} run_ids for {len(prompts)} prompts'","typeGuard":"def valid_run_ids(run_id: object, n: int) -> bool:\n    import uuid\n    if run_id is None or isinstance(run_id, uuid.UUID):\n        return True\n    return isinstance(run_id, list) and len(run_id) == n and all(i is None or isinstance(i, uuid.UUID) for i in run_id)","tryCatchPattern":"try:\n    llm.generate(prompts, run_id=run_ids)\nexcept ValueError as e:\n    if 'run_id' in str(e) and len(run_ids) < len(prompts):\n        run_ids = run_ids + [uuid.uuid4() for _ in range(len(prompts) - len(run_ids))]\n        llm.generate(prompts, run_id=run_ids)\n    else:\n        raise","preventionTips":["Always derive the run_id list from the prompts: [uuid.uuid4() for _ in prompts]","Persist one UUID per prompt when replaying batches for LangSmith correlation"],"tags":["llm","batch","run-id","uuid","validation"],"backgroundTag":null,"analyzedSha":"e32fa9a52eab3b61ad7a45399bfde59b3e580fc4","analyzedAt":"2026-08-14T18:42:09.092Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}