Better handling missing SYS in llama conversation tokenizer
The existing code failed to add SYS if the conversation has history without SYS, but does modify the passed conversation to include it.

Rearrange the code so modification to the conversation object are taken into account for token id generation.
cc @ArthurZucker <|||||>Hey! Could you elaborate on 
> failed to add SYS if the conv has history without SYS? 

The SYSTEM prompting should always go at the start of the whole conversation, thus we only check whether a system prompt is in the first prompt or not, because if you go through the conversational API, you should add the system prompt at the beginning. 

Is the usecase that you are requesting to be able to add a system prompt in the middle of the conversation ? <|||||>Lets look at 2 use cases:
- **history (i.e more than 1 user message), no SYS in first message**: the code adds SYS to conversation, but then proceeds to use `dialogue` where SYS is not added. So model doesn't see SYS (incorrect). If the conversation is used again, then there will be SYS present (OK, I guess)
- **single (user) message in conversation (no `past_user_inputs`), no SYS in it**: the code adds SYS to `dialogue`, and the SYS ends up in the model input (correct), but the message/conversation is not modified (i.e if used again there will be no sys)

So there is discrepancy between what the model sees at this iteration and what would happen in the next iteration. So I changed the code to 1) first modify the conversation object, before `dialogue` is computed and 2) modify both the `past_user_inputs` and `new_user_input`, so no case will be left unhandled.

So now the model would see SYS in both cases, and the conversation is modified (for future use) in both cases.

An alternative is to modify the `dialogue` object only (it's just an array so that's even simpler - no difference between history and no history), then the conversation object would stay without SYS, but the model will see SYS every time.<|||||>@ArthurZucker ready for approval<|||||>_The documentation is not available anymore as the PR was closed or merged._