static MasterResult GetSubResult(String prefix, Request prevRequest, User user, AltBot mybot, Request subRequest, bool showDebug, out Unifiable subResultOutput, out string subQueryRawOutput1, OutputDelegate writeToLog) { var prev = subRequest.GraphsAcceptingUserInput; var prevSO = user.SuspendAddResultToUser; MasterResult subResult = subRequest.CreateResult(subRequest); try { Dictionary <Unifiable, Unifiable> sraiMark = null; var originalSalientRequest = Request.GetOriginalSalientRequest(prevRequest); if (ChatOptions.UseSraiLimitersBasedOnTextContent) { sraiMark = originalSalientRequest.CreateSRAIMark(); } subRequest.GraphsAcceptingUserInput = true; //var newresult = new AIMLbot.Result(request.user, Proc, request); //subRequest.result = newresult; user.SuspendAddResultToUser = true; if (prevRequest.IsTraced) { subRequest.IsTraced = !showDebug; } subRequest.IsTraced = true; subResult = (MasterResult)mybot.ChatWithToplevelResults(subRequest, subResult, false, RequestKind.TagHandler | RequestKind.SraiTag); subResultOutput = subResult.RawOutput; int resultCount = subResult.OutputSentences.Count; if (AltBot.BE_COMPLETE_NOT_FAST && resultCount == 0) { subRequest.ResetValues(false); if (ChatOptions.UseSraiLimitersBasedOnTextContent) { originalSalientRequest.ResetSRAIResults(sraiMark); } if (Unifiable.IsNullOrEmpty(subResultOutput)) { subResult = (MasterResult)mybot.ChatFor1Result(subRequest, subResult, RequestKind.TagHandler | RequestKind.SraiTag); subResultOutput = subResult.Output; if (!IsNullOrEmpty(subResultOutput)) { writeToLog(prefix + "RESCUED RETURN " + subResultOutput); // subQueryRawOutput = "" + subResultOutput; } } } } finally { user.SuspendAddResultToUser = prevSO; subRequest.GraphsAcceptingUserInput = prev; } subQueryRawOutput1 = subResultOutput;//.Trim(); return(subResult); }