static L dm_gazelle_reasonAboutChatInput_v2(S userName, S content, O... _) { bool debug = boolPar debug(_); LS preContext = optPar preContext(_); GazelleEvalContext ctx = optPar ctx(_); if (ctx == null) ctx = dm_gazelle_stdEvalContext(dm_gazelle_allRulesWithComment(optPar requiredComment(_, "discord"))); if (debug) print(" == PROCESSING INPUT: " + content); // Need input as first condition ctx.engine.dropRulesWhere(r -> cicOneOf(r.comments, "in 1 = statement", "in = statement", "disable")); if (debug) print("Have rules: " + collect globalID(ctx.engine.rules)); gazelle_addHelperTablesToRules(ctx.engine); gazelle_addVarSplittersToRules(ctx.engine, _); O[] params = litobjectarray(firstConditionOnly := true, dialogHistory := preContext, +debug); GazelleTree tree1 = new(ctx, content); L l = dm_gazelle_getChildren(tree1, params); //if (debug) print("Tree size: " + l(l)); dm_gazelle_matchAdditionalInput2(l, preContext); if (nempty(userName)) { GazelleTree tree2 = new(ctx, optCurly(userName) + " says: " + content); if (debug) print("Tree2: " + tree2); l.addAll(dm_gazelle_getChildren(tree2, params)); } if (boolPar skipBad(_, true)) l = [GazelleTree t : l | neq(t.prediction, 'bad)]; gazelle_sortChildren(l); dm_gazelle_matchStatements(l); for (GazelleTree t : l) t.flush(); l = gazelle_dropUnsatisfiedEntries(l); gazelle_dropMatchedDefaultRules(l); ret l; }