private void addActionsToConversationMemory(IConversationMemory memory, List<BehaviorRule> successRules) { List<String> allCurrentActions = new LinkedList<>(); successRules.forEach(successRule -> successRule.getActions().stream(). filter(action -> !allCurrentActions.contains(action)).forEach(allCurrentActions::add)); var currentStep = memory.getCurrentStep(); List<String> actions = new LinkedList<>(); if (appendActions || allCurrentActions.isEmpty()) { IData<List<String>> latestActions = currentStep.getLatestData(KEY_ACTIONS); if (latestActions != null && latestActions.getResult() != null) { actions.addAll(latestActions.getResult()); } } actions.addAll(allCurrentActions.stream(). filter(action -> !actions.contains(action)).collect(Collectors.toList())); Data actionsData = new Data<>(KEY_ACTIONS, actions); actionsData.setPublic(true); currentStep.storeData(actionsData); currentStep.resetConversationOutput(KEY_ACTIONS); currentStep.addConversationOutputList(KEY_ACTIONS, actions); }
IData data = memory.getCurrentStep().getLatestData("result_size"); List result; if (data != null) {
private void storeResultInMemory(IConversationMemory.IWritableConversationStep currentStep, List<RawSolution> parsedSolutions) { if (!parsedSolutions.isEmpty()) { Solution solution = extractExpressions(parsedSolutions, includeUnused, includeUnknown).get(0); String expressions = solution.getExpressions(); if (appendExpressions && !expressions.isEmpty()) { IData<String> latestExpressions = currentStep.getLatestData(KEY_EXPRESSIONS_PARSED); if (latestExpressions != null) { expressions = StringUtilities.joinStrings(", ", latestExpressions.getResult(), expressions); } IData<String> expressionsData = new Data<>(KEY_EXPRESSIONS_PARSED, expressions); currentStep.storeData(expressionsData); currentStep.addConversationOutputString(KEY_EXPRESSIONS, expressions); List<String> intents = expressionProvider.parseExpressions(expressions).stream(). map(Expression::getExpressionName). collect(Collectors.toList()); Data<List<String>> intentData = new Data<>(KEY_INTENT, intents); currentStep.storeData(intentData); currentStep.addConversationOutputList(KEY_INTENT, intents); } } }
@Override public void executeTask(IConversationMemory memory) throws LifecycleException { IConversationMemory.IWritableConversationStep currentStep = memory.getCurrentStep(); IData<List<String>> latestData = currentStep.getLatestData(ACTION_KEY); if (latestData == null) { return;
@Override public void executeTask(IConversationMemory memory) throws LifecycleException { IConversationMemory.IWritableConversationStep currentStep = memory.getCurrentStep(); IData<String> expressionsData = currentStep.getLatestData(EXPRESSIONS_PARSED_IDENTIFIER); List<IData<Context>> contextDataList = currentStep.getAllData(CONTEXT_IDENTIFIER); IData<List<String>> actionsData = currentStep.getLatestData(ACTIONS_IDENTIFIER); List<String> actions = actionsData.getResult(); if (actions != null && actions.contains(CATCH_ANY_INPUT_AS_PROPERTY_ACTION)) { IData<String> initialInputData = currentStep.getLatestData(INPUT_INITIAL_IDENTIFIER); String initialInput = initialInputData.getResult(); if (!initialInput.isEmpty()) {
IData<List<String>> actionData = currentStep.getLatestData(KEY_ACTIONS); if (actionData != null) { List<String> result = actionData.getResult();
@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; }
@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 void executeTask(IConversationMemory memory) { //parse user input to meanings final IData<String> inputData = memory.getCurrentStep().getLatestData(KEY_INPUT); if (inputData == null) { return; } List<IDictionary> temporaryDictionaries = prepareTemporaryDictionaries(memory); List<RawSolution> parsedSolutions; try { String userInput = inputData.getResult(); String normalizedUserInput = sentenceParser.normalize(userInput); storeNormalizedResultInMemory(memory.getCurrentStep(), normalizedUserInput); parsedSolutions = sentenceParser.parse(normalizedUserInput, temporaryDictionaries); } catch (InterruptedException e) { log.warn(e.getLocalizedMessage(), e); return; } storeResultInMemory(memory.getCurrentStep(), parsedSolutions); }
@Override public void executeTask(IConversationMemory memory) { IWritableConversationStep currentStep = memory.getCurrentStep(); List<IData<Context>> contextDataList = currentStep.getAllData("context"); storeContextQuickReplies(currentStep, contextDataList); IData<List<String>> latestData = currentStep.getLatestData(KEY_ACTIONS); if (latestData == null) { return; } List<String> actions = latestData.getResult(); List<IOutputFilter> outputFilters = createOutputFilters(memory, actions); Map<String, List<OutputEntry>> outputs = outputGeneration.getOutputs(outputFilters); outputs.forEach((action, outputEntries) -> outputEntries.forEach(outputEntry -> { List<OutputValue> outputValues = outputEntry.getOutputs(); selectAndStoreOutput(currentStep, action, outputValues); storeQuickReplies(currentStep, outputEntry.getQuickReplies(), outputEntry.getAction()); })); }
@Override public void executeTask(IConversationMemory memory) { IData<List<String>> actionData = memory.getCurrentStep().getLatestData(KEY_ACTIONS); if (!executeCallback(actionData)) { return; } var request = new ConversationDataRequest(); request.setConversationMemorySnapshot(convertConversationMemory(memory)); var response = conversationCallback.doExternalCall(callback, request, timeoutInMillis); if (String.valueOf(response.getHttpCode()).startsWith("2")) { //check for success, http code 2xx mergeConversationMemory(memory, response.getConversationMemorySnapshot()); } else { String msg = "ConversationCallback was (%s) but should have been 2xx. Return value as been ignored"; msg = String.format(msg, response.getHttpCode()); log.warn(msg); } }
@Override public void executeTask(IConversationMemory memory) { IConversationMemory.IWritableConversationStep currentStep = memory.getCurrentStep(); IData<String> latestInput = currentStep.getLatestData(KEY_INPUT); if (latestInput == null) { return; } String input = latestInput.getResult(); String formattedInput = normalizer.normalizeInput(input, allowedChars, true, convertSpecialCharacter); currentStep.storeData(new Data<>("input:formatted", formattedInput)); currentStep.addConversationOutputString(KEY_INPUT, formattedInput); }