{"record":{"id":"4873087697b3797c","repo":"huggingface/transformers","slug":"bad-words-ids-has-to-be-a-non-empty-list-but-is","errorCode":null,"errorMessage":"`bad_words_ids` has to be a non-empty list, but is {bad_words_ids}.","messagePattern":"`bad_words_ids` has to be a non-empty list, but is (.+?)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/transformers/generation/logits_process.py","lineNumber":1472,"sourceCode":"        # Filter EOS token from bad_words_ids\n        if eos_token_id is not None:\n            if not isinstance(eos_token_id, torch.Tensor):\n                if isinstance(eos_token_id, int):\n                    eos_token_id = [eos_token_id]\n                eos_token_id = torch.tensor(eos_token_id)\n\n            eos_token_id_list = eos_token_id.tolist()  # convert to python list before\n            bad_words_ids = list(\n                filter(lambda bad_token_seq: all(bad_token_seq != [i] for i in eos_token_id_list), bad_words_ids)\n            )\n        # Forbidding a sequence is equivalent to setting its bias to -inf\n        sequence_bias = {tuple(sequence): float(\"-inf\") for sequence in bad_words_ids}\n        super().__init__(sequence_bias=sequence_bias)\n\n    def _validate_arguments(self):\n        bad_words_ids = self.bad_word_ids\n        if not isinstance(bad_words_ids, list) or len(bad_words_ids) == 0:\n            raise ValueError(f\"`bad_words_ids` has to be a non-empty list, but is {bad_words_ids}.\")\n        if any(not isinstance(bad_word_ids, list) for bad_word_ids in bad_words_ids):\n            raise ValueError(f\"`bad_words_ids` has to be a list of lists, but is {bad_words_ids}.\")\n        if any(\n            any((not isinstance(token_id, (int, np.integer)) or token_id < 0) for token_id in bad_word_ids)\n            for bad_word_ids in bad_words_ids\n        ):\n            raise ValueError(\n                f\"Each list in `bad_words_ids` has to be a list of positive integers, but is {bad_words_ids}.\"\n            )\n\n\nclass PrefixConstrainedLogitsProcessor(LogitsProcessor):\n    r\"\"\"\n    [`LogitsProcessor`] that enforces constrained generation and is useful for prefix-conditioned constrained\n    generation. See [Autoregressive Entity Retrieval](https://huggingface.co/papers/2010.00904) for more information.\n\n    Args:\n        prefix_allowed_tokens_fn (`Callable[[int, torch.Tensor], list[int]]`):","sourceCodeStart":1454,"sourceCodeEnd":1490,"githubUrl":"https://github.com/huggingface/transformers/blob/a597f974857b3d92939971296bc0deb93d33d780/src/transformers/generation/logits_process.py#L1454-L1490","documentation":"Error \"`bad_words_ids` has to be a non-empty list, but is {bad_words_ids}.\" thrown in huggingface/transformers.","triggerScenarios":"Raised in NoBadWordsLogitsProcessor.__init__ when bad_words_ids is None or an empty list.","commonSituations":"Calling generate() with bad_words_ids=[] or constructing the processor without any banned phrases.","solutions":["Pass `bad_words_ids` as a non-empty list of token-id lists, e.g. `[[tok1, tok2]]`.","If no words should be blocked, omit the argument instead of passing an empty list."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a597f974857b3d92939971296bc0deb93d33d780","analyzedAt":"2026-08-14T18:24:08.354Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}