Пример #1
0
        private async Task <IReasoningTask> ContinueReasoningStepByStep(IReasoningTask reasoningTask)
        {
            reasoningTask.ReasoningProcess = _reasoningService.ContinueReasoning(reasoningTask.ReasoningProcess);

            IList <IVariableSource> sources          = reasoningTask.Sources?.ToList() ?? new List <IVariableSource>();
            IList <string>          missingVariables = _reasoningService.GetAllMissingVariableIds(reasoningTask.ReasoningProcess).ToList();

            while (CanContinueReasoning(reasoningTask.ReasoningProcess, sources, missingVariables))
            {
                var missingVariableId = missingVariables.First();

                var source            = sources.FirstOrDefault(src => src.VariableIds.Contains(missingVariableId));
                var variablesResource = await _httpClientService.ExecuteTaskAsync <VariablesResource>(source?.Request);

                sources.Remove(source);

                if (variablesResource?.Variables == null)
                {
                    _logger.LogError($"Couldn't parse values from {source.Request.Uri}");
                    continue;
                }

                variablesResource.Variables.ToList().ForEach(variable => missingVariables.Remove(variable.Id));

                reasoningTask.ReasoningProcess = _reasoningService.SetValues(reasoningTask.ReasoningProcess, variablesResource.Variables);
                reasoningTask.ReasoningProcess = _reasoningService.ContinueReasoning(reasoningTask.ReasoningProcess);
            }

            return(reasoningTask);
        }
Пример #2
0
 private ReasoningTaskResource GetReasoningTaskResource(IReasoningTask reasoningTask)
 {
     return(new ReasoningTaskResource
     {
         Id = reasoningTask.Id,
         Description = reasoningTask.Description,
         KnowledgeBaseId = reasoningTask.KnowledgeBaseId,
         ReasoningMethod = reasoningTask.ReasoningMethod,
         Status = reasoningTask.Status,
         EvaluationMessage = reasoningTask.ReasoningProcess.EvaluationMessage,
         MissingVariableIds = reasoningTask.Status == ReasoningTaskStatus.STOPPED
             ? _reasoningService.GetAllMissingVariableIds(reasoningTask.ReasoningProcess)
             : null,
         ReasonedItems = reasoningTask.ReasoningProcess.ReasonedItems
     });
 }
Пример #3
0
        private void SetTaskState(ref IReasoningTask reasoningTask)
        {
            var reasoningProcess = reasoningTask.ReasoningProcess;

            _logger.LogInformation($"Reasoning has been finished with result {reasoningProcess.State} {reasoningProcess.EvaluationMessage}");

            switch (reasoningProcess.State)
            {
            case ReasoningState.FINISHED:
                reasoningTask.Status = ReasoningTaskStatus.FINISHED;
                break;

            case ReasoningState.STOPPED:
                reasoningTask.Status = ReasoningTaskStatus.STOPPED;
                break;
            }
        }
Пример #4
0
        private void ExecuteReasoningTasks(IReasoningTask reasoningTask)
        {
            _logger.LogInformation($"Analyzing reasoning results");

            reasoningTask.Actions?.ToList().ForEach(action =>
            {
                if (!reasoningTask.ReasoningProcess.ReasonedItems.Any(item => action.ReasoningItems.Contains(item)))
                {
                    return;
                }

                _logger.LogInformation($"Reasoning actions execution has started");

                action.ReasoningRequests?.ToList().ForEach(request =>
                {
                    _httpClientService.ExecuteTaskAsync(request);
                });
            });
        }
Пример #5
0
 public Task <ReplaceOneResult> UpdateAsync(string id, IReasoningTask document) =>
 collection.ReplaceOneAsync(doc => doc.Id == id, (ReasoningTask)document);
Пример #6
0
 public void Update(string id, IReasoningTask document) =>
 collection.ReplaceOne(doc => doc.Id == id, (ReasoningTask)document);
Пример #7
0
 public Task <DeleteResult> RemoveAsync(IReasoningTask document) =>
 collection.DeleteOneAsync(doc => doc.Id == document.Id);
Пример #8
0
 public void Create(IReasoningTask document) =>
 collection.InsertOneAsync((ReasoningTask)document);