// Token: 0x0600118E RID: 4494 RVA: 0x000668D4 File Offset: 0x00064AD4
        public override AssistantTaskContext InitialStep(AssistantTaskContext context)
        {
            DateTime             utcNow    = DateTime.UtcNow;
            DateTime?            dateTime  = null;
            DateTime?            dateTime2 = null;
            DateTime?            dateTime3 = null;
            DateTime?            dateTime4 = null;
            Guid                 guid      = Guid.Empty;
            AssistantTaskContext result;

            try
            {
                this.ValidateContext(context);
                guid = context.Args.StoreSession.MailboxGuid;
                ExDateTime?valueOrDefault = context.Args.StoreSession.Mailbox.GetValueOrDefault <ExDateTime?>(MailboxSchema.InferenceTrainingLastAttemptTimestamp, null);
                if (valueOrDefault != null)
                {
                    dateTime = new DateTime?(valueOrDefault.Value.UniversalTime);
                }
                valueOrDefault = context.Args.StoreSession.Mailbox.GetValueOrDefault <ExDateTime?>(MailboxSchema.InferenceTrainingLastSuccessTimestamp, null);
                if (valueOrDefault != null)
                {
                    dateTime2 = new DateTime?(valueOrDefault.Value.UniversalTime);
                }
                valueOrDefault = context.Args.StoreSession.Mailbox.GetValueOrDefault <ExDateTime?>(MailboxSchema.InferenceTruthLoggingLastAttemptTimestamp, null);
                if (valueOrDefault != null)
                {
                    dateTime3 = new DateTime?(valueOrDefault.Value.UniversalTime);
                }
                valueOrDefault = context.Args.StoreSession.Mailbox.GetValueOrDefault <ExDateTime?>(MailboxSchema.InferenceTruthLoggingLastSuccessTimestamp, null);
                if (valueOrDefault != null)
                {
                    dateTime4 = new DateTime?(valueOrDefault.Value.UniversalTime);
                }
                MailboxSession mailboxSession = context.Args.StoreSession as MailboxSession;
                if (mailboxSession == null)
                {
                    string text = "Reason=NonMailboxSession";
                    this.trainingStatusLogger.LogStatus(guid, 4, new DateTime?(utcNow), dateTime, dateTime2, text);
                    this.truthLabelsStatusLogger.LogStatus(mailboxSession.MailboxGuid, 4, new DateTime?(utcNow), dateTime3, dateTime4, text);
                    this.groupingModelTrainingStatusLogger.LogStatus(guid, 4, text);
                    result = null;
                }
                else if (mailboxSession.MailboxOwner.RecipientTypeDetails != RecipientTypeDetails.UserMailbox && mailboxSession.MailboxOwner.RecipientTypeDetails != RecipientTypeDetails.LinkedMailbox)
                {
                    string text2 = string.Format("Reason=NonUserMailbox#Name={0}#Type={1}", mailboxSession.MailboxOwner.MailboxInfo.DisplayName, mailboxSession.MailboxOwner.RecipientTypeDetails.ToString());
                    this.trainingStatusLogger.LogStatus(mailboxSession.MailboxGuid, 4, new DateTime?(utcNow), dateTime, dateTime2, text2);
                    this.truthLabelsStatusLogger.LogStatus(mailboxSession.MailboxGuid, 4, new DateTime?(utcNow), dateTime3, dateTime4, text2);
                    this.groupingModelTrainingStatusLogger.LogStatus(mailboxSession.MailboxGuid, 4, text2);
                    result = null;
                }
                else
                {
                    VariantConfigurationSnapshot flightFeatures = FlightModule.GetFlightFeatures(mailboxSession);
                    Exception           ex;
                    OrganizationContext organizationInformation = this.orgContentExtractor.GetOrganizationInformation(mailboxSession.MailboxOwner, new ADRecipientInfo.TraceDelegate(this.DiagnosticsSession.TraceDebug), new ADRecipientInfo.TraceDelegate(this.DiagnosticsSession.TraceError), ref ex);
                    FolderDataSelectionConfig.RefreshSettings();
                    List <Exception> list = new List <Exception>();
                    if (ex != null)
                    {
                        list.Add(ex);
                    }
                    OutlookActivityManager.SafeProcess(mailboxSession);
                    ActivityHistory      activityHistory      = new ActivityHistory(mailboxSession, utcNow);
                    ModelVersionSelector modelVersionSelector = InferenceXsoUtil.CreateModelVersionSelector(ServerModelConfigurationWrapper.CurrentWrapper, mailboxSession, delegate(string str)
                    {
                        this.DiagnosticsSession.TraceDebug(str, new object[0]);
                    });
                    result = new InferenceTrainingTaskContext(context.MailboxData, context.Job, new AssistantStep(this.TrainStep), new MailboxTrainingState(modelVersionSelector, organizationInformation, activityHistory, utcNow, dateTime, dateTime2, flightFeatures, list), new MailboxTruthLoggingState(utcNow, dateTime3, dateTime4, activityHistory));
                }
            }
            catch (Exception ex2)
            {
                string text3 = string.Format("Reason=InitialStepFailed#Exception={0}", InferenceCommonUtility.StringizeException(ex2));
                this.trainingStatusLogger.LogStatus(guid, 3, new DateTime?(utcNow), dateTime, dateTime2, text3);
                this.truthLabelsStatusLogger.LogStatus(guid, 3, new DateTime?(utcNow), dateTime3, dateTime4, text3);
                this.groupingModelTrainingStatusLogger.LogStatus(guid, 3, text3);
                throw;
            }
            return(result);
        }
示例#2
0
        internal bool RunClassificationPipeline(StoreDriverDeliveryEventArgsImpl argsImpl, InferencePropertyBag classificationDiagnostics, VariantConfigurationSnapshot flightFeatures, out MdbDocument document, out bool isClutter, out ConversationClutterInformation conversationClutterInformation)
        {
            document  = null;
            isClutter = false;
            conversationClutterInformation = null;
            InferenceClassificationAgent.tracer.TraceDebug((long)this.GetHashCode(), "Processing incoming message");
            ModelVersionBreadCrumb breadCrumb      = ClutterUtilities.GetModelVersionBreadCrumb(argsImpl.MailboxSession);
            ModelVersionSelector   versionSelector = new ModelVersionSelector(this.modelConfiguration, breadCrumb, delegate(string str)
            {
                this.diagnosticsSession.TraceDebug(str, new object[0]);
            });

            if (versionSelector.ClassificationModelVersion.Version == -2147483648)
            {
                classificationDiagnostics.Add(InferenceSchema.ClassificationStatus, InferenceClassificationAgentLogger.Status.Skipped);
                classificationDiagnostics.Add(InferenceSchema.ClassificationStatusMessage, "ClassificationModelNotFound");
                return(false);
            }
            MdbInferenceRecipient ownerAsInferenceRecipient;

            if (string.Equals(argsImpl.MailboxSession.MailboxOwner.MailboxInfo.DisplayName, argsImpl.MailboxSession.MailboxOwner.LegacyDn, StringComparison.OrdinalIgnoreCase))
            {
                ownerAsInferenceRecipient = new MdbInferenceRecipient(argsImpl.MailboxSession.MailboxOwner, argsImpl.MailboxSession.Culture, argsImpl.MailboxOwner.DisplayName);
            }
            else
            {
                ownerAsInferenceRecipient = new MdbInferenceRecipient(argsImpl.MailboxSession.MailboxOwner, argsImpl.MailboxSession.Culture, null);
            }
            bool?conversationLoadRequired = null;

            if (argsImpl.SharedPropertiesBetweenAgents != null && argsImpl.SharedPropertiesBetweenAgents.ContainsKey(ItemSchema.ConversationLoadRequiredByInference))
            {
                conversationLoadRequired = new bool?((bool)argsImpl.SharedPropertiesBetweenAgents[ItemSchema.ConversationLoadRequiredByInference]);
            }
            DocumentProcessingContext  processingContext          = new DocumentProcessingContext(argsImpl.MailboxSession);
            MdbCompositeItemIdentity   mdbCompositeItemIdentity   = new MdbCompositeItemIdentity(argsImpl.MailboxSession.MdbGuid, argsImpl.MailboxSession.MailboxGuid, StoreObjectId.DummyId, 1);
            MdbInMemoryDocumentAdapter mdbInMemoryDocumentAdapter = new MdbInMemoryDocumentAdapter(mdbCompositeItemIdentity, argsImpl.ReplayItem, MdbInferencePropertyMap.Instance);

            document = new MdbDocument(mdbCompositeItemIdentity, DocumentOperation.Insert, mdbInMemoryDocumentAdapter);
            object uniqueBodyWords;

            document.TryGetProperty(InferenceSchema.UniqueBodyWordsFromProvider, out uniqueBodyWords);
            this.ProcessClassificationDocument(document, classificationDiagnostics, versionSelector.ClassificationModelVersion, processingContext, ownerAsInferenceRecipient, breadCrumb, flightFeatures, uniqueBodyWords, conversationLoadRequired);
            IItem inMemoryItem = mdbInMemoryDocumentAdapter.InMemoryItem;

            if (inMemoryItem == null)
            {
                InferenceClassificationAgent.tracer.TraceError((long)this.GetHashCode(), "The InMemoryItem of the inMemDocAdapter was null");
                classificationDiagnostics.Add(InferenceSchema.ClassificationStatus, InferenceClassificationAgentLogger.Status.Skipped);
                classificationDiagnostics.Add(InferenceSchema.ClassificationStatusMessage, "InMemoryItemNull");
                return(false);
            }
            object obj;

            if (document.TryGetProperty(InferenceSchema.ConversationClutterInformation, out obj))
            {
                conversationClutterInformation = (obj as ConversationClutterInformation);
            }
            classificationDiagnostics.Add(InferenceSchema.ConversationClutterInformation, conversationClutterInformation);
            classificationDiagnostics.Add(InferenceSchema.MarkedAsBulk, InferenceClassificationAgent.IsBulkMail(argsImpl, argsImpl.MailboxOwner));
            isClutter = document.GetProperty <bool>(InferenceSchema.ComputedClutterValue);
            foreach (StorePropertyDefinition propertyDefinition in InferenceClassificationAgent.PropertiesToReplicate)
            {
                InferenceClassificationAgent.CopyIfValid(propertyDefinition, inMemoryItem, argsImpl.PropertiesForAllMessageCopies);
            }
            if (this.classificationComparisonLogger != null && flightFeatures != null && flightFeatures.Inference.InferenceModelComparison.Enabled)
            {
                IEnumerable <int> enumerable = from entry in versionSelector.TrainingModelVersions
                                               where entry.Version != versionSelector.ClassificationModelVersion.Version && (breadCrumb.Contains((short)entry.Version, ModelVersionBreadCrumb.VersionType.Ready) || breadCrumb.Contains((short)entry.Version, ModelVersionBreadCrumb.VersionType.NotReady))
                                               select entry.Version;
                if (enumerable != null && enumerable.Any <int>())
                {
                    Dictionary <OrderedFeatureSet, FeatureValues> dictionary = new Dictionary <OrderedFeatureSet, FeatureValues>();
                    dictionary.Add(ModelConfiguration.GetModelVersionConfiguration(versionSelector.ClassificationModelVersion.Version).FeatureSet, document.GetProperty <FeatureValues>(InferenceSchema.ImportanceFeatureValues));
                    this.classificationComparisonLogger.LogModelComparisonData(document, classificationDiagnostics);
                    foreach (int comparisonVersion in enumerable)
                    {
                        MdbDocument          mdbDocument          = new MdbDocument(mdbCompositeItemIdentity, DocumentOperation.Insert, mdbInMemoryDocumentAdapter);
                        InferencePropertyBag inferencePropertyBag = new InferencePropertyBag();
                        this.ProcessClassificationDocumentForComparisonModel(mdbDocument, inferencePropertyBag, comparisonVersion, document, classificationDiagnostics, dictionary, processingContext, ownerAsInferenceRecipient, breadCrumb, flightFeatures, uniqueBodyWords, conversationLoadRequired);
                        this.classificationComparisonLogger.LogModelComparisonData(mdbDocument, inferencePropertyBag);
                    }
                }
            }
            return(true);
        }