Concerns about the implementation of `end_of_generation_condition()`
The code of `end_of_generation_condition()` https://github.com/NVIDIA/NeMo/blob/13791d27ec8b322da11e8324ff07124aa4e6c55f/nemo/collections/nlp/modules/common/text_generation_strategy.py#L138 seems weird to me => opening an issue to clarify whether it is working as intended (cc @gshennvm @yidong72)

I have two concerns:

1. I find it weird to see `<extra_id_1>` hardcoded in this function -- I thought that the goal of providing `end_strings` as argument would be to avoid having to hardcode special strings
2. I am confused by something that is best explained through an example. Let's say I want to use `end_strings = ["abc"]`, which is tokenized into [1, 2, 3] (tokens for "a", "b", "c"), while `<extra_id_1>` is tokenized into [0]. It seems to me that this code will lead to `ids_1 = tokenizer.text_to_ids(f'<extra_id_1>abc') = [0, 1, 2, 3]`, `ids_2 = [0]`, and `token_id = ids_1[len(ids_2) :][0] = 1`. As a result, as soon as `p` (the last token generated) is equal to 1 (i.e., as soon as an `"a"` is generated), we consider that the generation has ended. Am I missing something?