{"record":{"id":"f56e94f9d48ae5bf","repo":"huggingface/transformers","slug":"you-passed-inputs-embeds-and-input-ids-to-ge","errorCode":null,"errorMessage":"You passed `inputs_embeds` and `input_ids` to `.generate()`. Please pick one.","messagePattern":"You passed `inputs_embeds` and `input_ids` to `\\.generate\\(\\)`\\. Please pick one\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/transformers/generation/utils.py","lineNumber":704,"sourceCode":"            elif not self.config.is_encoder_decoder:\n                has_inputs_embeds_forwarding = \"inputs_embeds\" in set(\n                    inspect.signature(self.prepare_inputs_for_generation).parameters.keys()\n                )\n                if not has_inputs_embeds_forwarding:\n                    raise ValueError(\n                        f\"You passed `inputs_embeds` to `.generate()`, but the model class {self.__class__.__name__} \"\n                        \"doesn't have its forwarding implemented. See the GPT2 implementation for an example \"\n                        \"(https://github.com/huggingface/transformers/pull/21405), and feel free to open a PR with it!\"\n                    )\n                # In this case, `input_ids` is moved to the `model_kwargs`, so a few automations (like the creation of\n                # the attention mask) can rely on the actual model input.\n                model_kwargs[\"input_ids\"] = self._maybe_initialize_input_ids_for_generation(\n                    inputs, bos_token_id, model_kwargs=model_kwargs\n                )\n                inputs, input_name = model_kwargs[\"inputs_embeds\"], \"inputs_embeds\"\n            else:\n                if inputs is not None:\n                    raise ValueError(\"You passed `inputs_embeds` and `input_ids` to `.generate()`. Please pick one.\")\n                inputs, input_name = model_kwargs[\"inputs_embeds\"], \"inputs_embeds\"\n\n        # 4. if `inputs` is still None, try to create `input_ids` from BOS token\n        inputs = self._maybe_initialize_input_ids_for_generation(inputs, bos_token_id, model_kwargs)\n        return inputs, input_name, model_kwargs\n\n    def _maybe_initialize_input_ids_for_generation(\n        self: \"GenerativePreTrainedModel\",\n        inputs: torch.Tensor | None,\n        bos_token_id: torch.Tensor | None,\n        model_kwargs: dict[str, torch.Tensor],\n    ) -> torch.LongTensor:\n        \"\"\"Initializes input ids for generation, if necessary.\"\"\"\n        if inputs is not None:\n            return inputs\n\n        encoder_outputs = model_kwargs.get(\"encoder_outputs\")\n        last_hidden_state = getattr(encoder_outputs, \"last_hidden_state\", None)","sourceCodeStart":686,"sourceCodeEnd":722,"githubUrl":"https://github.com/huggingface/transformers/blob/a597f974857b3d92939971296bc0deb93d33d780/src/transformers/generation/utils.py#L686-L722","documentation":"ValueError for encoder-decoder models: both inputs_embeds and input_ids were supplied to .generate(). For encoder-decoder models inputs_embeds replaces the encoder inputs (input_ids), so passing both is ambiguous and generate asks you to pick exactly one.","triggerScenarios":"model.generate(input_ids=enc_ids, inputs_embeds=enc_embeds, decoder_start_token_id=...) on an encoder-decoder model; helper code that always sets input_ids and then conditionally adds inputs_embeds.","commonSituations":"Soft-prompt/continuous-encoder experiments on T5/BART-style models; merging default kwargs with user kwargs producing both keys.","solutions":["Remove one of the two: pass inputs_embeds alone (it becomes the encoder input) or input_ids alone.","Sanitize kwargs: if 'inputs_embeds' in kwargs: kwargs.pop('input_ids', None) before generate.","Check that a default-generation wrapper is not auto-inserting input_ids."],"exampleFix":"# before\nout = model.generate(input_ids=ids, inputs_embeds=embeds, max_new_tokens=10)\n\n# after\nout = model.generate(inputs_embeds=embeds, max_new_tokens=10)","handlingStrategy":"validation","validationCode":"if model.config.is_encoder_decoder and \"inputs_embeds\" in kwargs:\n    kwargs.pop(\"input_ids\", None)  # embeds replaces encoder input_ids","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Enforce mutual exclusion of input_ids and inputs_embeds in your generate wrapper.","Log which encoder input route is active before calling generate."],"tags":["generate","encoder-decoder","inputs-embeds","api-misuse"],"backgroundTag":null,"analyzedSha":"a597f974857b3d92939971296bc0deb93d33d780","analyzedAt":"2026-08-14T18:24:08.354Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}