!7 static new L thoughtBots; p { long time = sysNow(); db(); autoRestart(); serveHttp(4678); typicalDownload(); bot("Smart Bot."); loadPage_forcedTimeout = 70000; loadBots(#1010753, #1010821, #1010825, #1001951); thoughtBots.add(mc()); stefansChat_onLine_lookback = 2; stefansChat_onLine_safe(voidfunc(S text) { print("> " + text); S answer = scanMultipleBots(thoughtBots, text); if (nempty(answer)) postToStefansChat(answer); }); //stefansChat_post("Smart Bot Upgraded! Boot took: " + formatDouble(fromMS(sysNow()-time), 1) + " s"); runInNewThread(#1010793); // Post on UAIP } answer { bool authed = isTrue(stefansChat_onLine_fullParams->get('auth)); s = ai_dropLeadingAdditions(s); int safety = 0; replaceloop: while (safety++ < 10) { s = trim(s); if (authed) { if (eqic(s, "!restart")) { restart(); ret "Yo"; } if "unlearn * *" ret "OK, was: " + uniq(MatchLearner, pattern := $1).examples.put($2, 'rejected); } if "Are you online?" ret "Yes"; if (eqic(s, "!question")) ret random_gac36k(); if "cache size" ret n(keys(cachedNodeIndex()), "different term") + ", " + n(web_countNodes(allWebs_cached()), "node") + ", " + n(allWebs_cached(), "web"); if "give me subtypes of ..." ret ai_renderList(ai_subtypesOf(m.rest())); if (flexMatch("give me some *", s, m)) { S query = singular($1); ret ai_renderNodesList(concatLists( webs_search_dollarX(webFromTriples("$X", "is a", query), indexedWebs(query)), webs_search_dollarX(webFromTriples("$X", "is", a(query)), indexedWebs(a(query))))); } if "authed?" ret authed ? "You are authed." : "You are not authed."; if "what is the singular of *" ret singular($1); if "show me the ..." ret "What " + $1 + "?"; if (flexMatch("What do * have?", s, m)) ret ai_renderNodesList(webs_search_dollarX(webFromTriples($1, "have", "$X"), indexedWebs($1))); if (learnedFlexMatch("What is *", s, m)) try answer ai_renderNodesList(webs_search_dollarX(webFromTriples($1, "is", "$X"), indexedWebs($1)), ""); S sf = web_text(first(webs_search_dollarX(webFromTriples("$X", "implements", quote(s)), indexedWebs(quote(s))))); if (startsWith(sf, "sf ", m)) ret str(makeAndCall($1)); if (learnedFlexMatch("how many visitors", s)) ret ai_cookiesToday(); // Once more with generated webs (replacing $ vars) if (learnedFlexMatch("What is *", s, m)) { L extendedWebs = indexedWebsAfterVariableSubstitution($1); print("Have " + n(extendedWebs, "extended web") + " for " + quote($1)); ret ai_renderNodesList(webs_search_dollarX(webFromTriples($1, "is", "$X"), extendedWebs), "I don't know"); } S match; if (learnedFlexMatch(match = "* is *", s, m)) { postSoftwareMadeWeb(webFromTriples($1, "is", $2), +match, input := s); ret "OK, stored."; } for (WebNode node : indexedNodes(s)) { S x = web_operandText(node, "replace with"); if (x != null) { print("Replacing with " + x); s = x; continue replaceloop; } } break; } } svoid loadBots(S... botIDs) { for (S id : botIDs) pcall { thoughtBots.add(runSubBot(id)); } } // s = uri static NanoHTTPD.Response html(S s) { if "log" ret serveText_direct(printLog()); ret serveText_direct(renderConcepts(list(MatchLearner))); }