Chat: Consider expiration time for response loadmask
When the last message in chat history is from user, then a loading icon is shown in AI Chat - we just assume that if there is missing response for user's question, it means it's being processed.
This loading icon is shown until a response is received and during that time user can not use chat's prompt to type in other questions.
The problem is that there can be some edge cases when response never arrives (sidekiq is restarted, process fails...). In such cases user's chat is blocked forever.
Reproducer:
- emulate question w/o answer - from rails console add a message to chat history:
uuid = SecureRandom.uuid;Gitlab::Llm::Cache.new(user).add({request_id: uuid, role: 'assistant', content: 'response'})
- open chat window in UI, at this point user can't type in the prompt
- you can add response for the fake question to "unblock" your chat again:
Gitlab::Llm::Cache.new(user).add({request_id: uuid, role: 'assistant', content: 'response'})
Possible solution: before showing loading icon, check if last message is from user and is newer than 2 minutes. If it's older, we could just consider it as expired and allow user to type a new question.
What the user sees
Edited by Katie Macoy