!7 set flag DynModule. cmodule TestBot > DynObjectTable { InputChooser inputChooser = new(this); S source, facts, rules; S inputAs = "Input:"; // "Input:" or "Fact:" bool allowUnsafeEvals; start { dm_useLocalMechListCopies(); set transpileRaw_useDiskCache; inputChooser.delay = 1000; itemToMap = itemToMap_ExecutedRule_v2(); } visualize { ret withMargin(northCenterAndSouth(vstackWithSpacing( westCenterAndEast(dm_fieldComboBox('inputAs, ll("Input:", "Fact:")), wrap(inputChooser), withLeftMargin(jbutton("Compute", rThread compute))) ), jvsplit(super.visualize(), jhsplit( withTitle("Facts", jLiveValueWordWrapTypeWriterTextArea_bothWays(dm_fieldLiveValue('facts))), withTitle("Rules", jLiveValueWordWrapTypeWriterTextArea_bothWays(dm_fieldLiveValue('rules))), 0.5, 100), 0.2, 100 ), dm_fieldCheckBox('allowUnsafeEvals))); } void compute { update(inputChooser.input()); } void update { if (inputChooser.update()) update(inputChooser.input()); } void update(S input) { temp enter(); bool inputAsFact = cic(inputAs, 'fact); NLLogicChecker_v2.staticVerbose = true; L theRules = ai_parseRulesWithMacros(rules); theRules = map nlLogic_rawSentencesToFacts(theRules); LS theFacts = tlft(facts); NLLogicChecker_v2.staticVerbose = true; temp tempSetTL(nlLogic_processInputOrFact_allowUnsafeEvals, allowUnsafeEvals); setData(nlLogic_processInputOrFact(input, inputAsFact, pair(theRules, theFacts))); } }