From 26f54520601db6f30b8525f906ea3c2c039c7b4c Mon Sep 17 00:00:00 2001 From: cmodi-meta <98582575+cmodi-meta@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:41:26 -0700 Subject: [PATCH] Fix out of OOB error for ConversationHistory (#5770) Summary: When user clears chat history and then give a prompt, there is a OOB error. This occurs since `getRecentSavedTextMessages()` didn't check for an empty Message Arraylist. Pull Request resolved: https://github.com/pytorch/executorch/pull/5770 Reviewed By: Riandy Differential Revision: D63659827 Pulled By: cmodi-meta fbshipit-source-id: 1e3157a8f1c17cb1e4b94f9ff7287b53a2b4f2af (cherry picked from commit f0662bba13152213fc598157b5e80194e8730c69) --- .../executorchllamademo/MessageAdapter.java | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/MessageAdapter.java b/examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/MessageAdapter.java index 2538c852e48..31aaa9a1d5f 100644 --- a/examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/MessageAdapter.java +++ b/examples/demo-apps/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/MessageAdapter.java @@ -95,28 +95,32 @@ public ArrayList getSavedMessages() { public ArrayList getRecentSavedTextMessages(int numOfLatestPromptMessages) { ArrayList recentMessages = new ArrayList(); int lastIndex = savedMessages.size() - 1; - Message messageToAdd = savedMessages.get(lastIndex); - int oldPromptID = messageToAdd.getPromptID(); - - for (int i = 0; i < savedMessages.size(); i++) { - messageToAdd = savedMessages.get(lastIndex - i); - if (messageToAdd.getMessageType() != MessageType.SYSTEM) { - if (messageToAdd.getPromptID() != oldPromptID) { - numOfLatestPromptMessages--; - oldPromptID = messageToAdd.getPromptID(); - } - if (numOfLatestPromptMessages > 0) { - if (messageToAdd.getMessageType() == MessageType.TEXT) { - recentMessages.add(messageToAdd); + // In most cases lastIndex >=0 . + // A situation where the user clears chat history and enters prompt. Causes lastIndex=-1 . + if (lastIndex >= 0) { + Message messageToAdd = savedMessages.get(lastIndex); + int oldPromptID = messageToAdd.getPromptID(); + + for (int i = 0; i < savedMessages.size(); i++) { + messageToAdd = savedMessages.get(lastIndex - i); + if (messageToAdd.getMessageType() != MessageType.SYSTEM) { + if (messageToAdd.getPromptID() != oldPromptID) { + numOfLatestPromptMessages--; + oldPromptID = messageToAdd.getPromptID(); + } + if (numOfLatestPromptMessages > 0) { + if (messageToAdd.getMessageType() == MessageType.TEXT) { + recentMessages.add(messageToAdd); + } + } else { + break; } - } else { - break; } } + // To place the order in [input1, output1, input2, output2...] + Collections.reverse(recentMessages); } - // To place the order in [input1, output1, input2, output2...] - Collections.reverse(recentMessages); return recentMessages; }