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); }
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 }); }
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; } }
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); }); }); }
public Task <ReplaceOneResult> UpdateAsync(string id, IReasoningTask document) => collection.ReplaceOneAsync(doc => doc.Id == id, (ReasoningTask)document);
public void Update(string id, IReasoningTask document) => collection.ReplaceOne(doc => doc.Id == id, (ReasoningTask)document);
public Task <DeleteResult> RemoveAsync(IReasoningTask document) => collection.DeleteOneAsync(doc => doc.Id == document.Id);
public void Create(IReasoningTask document) => collection.InsertOneAsync((ReasoningTask)document);