private static Map<String, Object> convertMemoryItems(IConversationMemory memory) { Map<String, Object> props = new HashMap<>(); IWritableConversationStep currentStep; IConversationStep lastStep; currentStep = memory.getCurrentStep(); var current = currentStep.getConversationOutput(); props.put(KEY_CURRENT, current); var last = new ConversationOutput(); if (memory.getPreviousSteps().size() > 0) { lastStep = memory.getPreviousSteps().get(0); last = lastStep.getConversationOutput(); } props.put(KEY_LAST, last); var past = memory.getConversationOutputs(); if (past.size() > 1) { past = past.subList(1, past.size()); } else { past = new LinkedList<>(); } props.put(KEY_PAST, past); return props; } }
private int countActionOccurrences(IConversationStepStack conversationStepStack, String action) { int count = 0; for (int i = 0; i < conversationStepStack.size(); i++) { IConversationStep conversationStep = conversationStepStack.get(i); IData<List<String>> latestData = conversationStep.getLatestData(KEY_ACTIONS); if (latestData != null) { List<String> actions = latestData.getResult(); if (actions.contains(action)) { count++; } } } return count; }
actionsData = previousSteps.get(0).getLatestData(ACTIONS_IDENTIFIER); if (actionsData != null) { List<String> actions = actionsData.getResult();
@Override public ExecutionState execute(IConversationMemory memory, List<BehaviorRule> trace) { IData<List<String>> data; switch (occurrence) { case currentStep: data = memory.getCurrentStep().getLatestData(KEY_ACTIONS); state = evaluateActions(data); break; case lastStep: IConversationMemory.IConversationStepStack previousSteps = memory.getPreviousSteps(); if (previousSteps.size() > 0) { data = previousSteps.get(0).getLatestData(KEY_ACTIONS); state = evaluateActions(data); } else { state = FAIL; } break; case anyStep: state = occurredInAnyStep(memory, KEY_ACTIONS, this::evaluateActions) ? SUCCESS : FAIL; break; case never: state = occurredInAnyStep(memory, KEY_ACTIONS, this::evaluateActions) ? FAIL : SUCCESS; break; } return state; }
@Override public ExecutionState execute(IConversationMemory memory, List<BehaviorRule> trace) { IData<String> data; switch (occurrence) { case currentStep: data = memory.getCurrentStep().getLatestData(KEY_EXPRESSIONS); state = evaluateInputExpressions(data); break; case lastStep: IConversationStepStack previousSteps = memory.getPreviousSteps(); if (previousSteps.size() > 0) { data = previousSteps.get(0).getLatestData(KEY_EXPRESSIONS); state = evaluateInputExpressions(data); } else { state = FAIL; } break; case anyStep: state = occurredInAnyStep(memory, KEY_EXPRESSIONS, this::evaluateInputExpressions) ? SUCCESS : FAIL; break; case never: state = occurredInAnyStep(memory, KEY_EXPRESSIONS, this::evaluateInputExpressions) ? FAIL : SUCCESS; break; } return state; }
public static ConversationMemorySnapshot convertConversationMemory(IConversationMemory conversationMemory) { ConversationMemorySnapshot snapshot = new ConversationMemorySnapshot(); if (conversationMemory.getUserId() != null) { snapshot.setUserId(conversationMemory.getUserId()); } if (conversationMemory.getConversationId() != null) { snapshot.setConversationId(conversationMemory.getConversationId()); } snapshot.setBotId(conversationMemory.getBotId()); snapshot.setBotVersion(conversationMemory.getBotVersion()); snapshot.setConversationState(conversationMemory.getConversationState()); for (IConversationMemory.IConversationStep redoStep : conversationMemory.getRedoCache()) { ConversationMemorySnapshot.ConversationStepSnapshot redoStepSnapshot = iterateConversationStep(redoStep); snapshot.getRedoCache().push(redoStepSnapshot); } for (int i = conversationMemory.getAllSteps().size() - 1; i >= 0; i--) { IConversationMemory.IConversationStep conversationStep = conversationMemory.getAllSteps().get(i); snapshot.getConversationSteps().add(iterateConversationStep(conversationStep)); } snapshot.getConversationOutputs().addAll(conversationMemory.getConversationOutputs()); snapshot.getConversationProperties().putAll(conversationMemory.getConversationProperties()); return snapshot; }
private List<IDictionary> prepareTemporaryDictionaries(IConversationMemory memory) { IConversationMemory.IConversationStepStack previousSteps = memory.getPreviousSteps(); List<IDictionary> temporaryDictionaries = Collections.emptyList(); if (previousSteps.size() > 0) { List<IData<List<Map<String, String>>>> data = previousSteps.get(0).getAllData("quickReplies"); if (data != null) { List<QuickReply> quickReplies = extractQuickReplies(data); temporaryDictionaries = convertQuickReplies(quickReplies, expressionProvider); } } return temporaryDictionaries; }