/// <inheritdoc/> public async Task <QnAMakerResponse> AwaitOperationCompletionResponse(QnAMakerResponse response) { int delay = 1000; // ms QnAMakerResponse getOperationDetailsResponse = response; while (!this.IsOperationComplete(getOperationDetailsResponse)) { await Task.Delay(delay); getOperationDetailsResponse = await this.GetOperationDetails(response.OperationId); } return(getOperationDetailsResponse); }
// Delete existing sources from the knowledge base private async Task <bool> DeleteExistingKnowledgeBaseSourcesAsync(string kbId, Guid correlationId) { GetKnowledgeBaseDetailsResponse kbDetails = await this.qnaMakerService.GetKnowledgeBaseDetails(kbId); UpdateKBRequest deleteSourcesRequest = new UpdateKBRequest() { Delete = new Delete() { Sources = kbDetails.Sources, }, }; QnAMakerResponse deleteSourcesResult = await this.qnaMakerService.UpdateKB(kbId, deleteSourcesRequest); string deleteSourcesResultState = await this.qnaMakerService.AwaitOperationCompletionState(deleteSourcesResult); this.logProvider.LogDebug($"Delete operation completed with status {deleteSourcesResultState} ({kbDetails.Sources?.Count} sources)", correlationId: correlationId); return(this.qnaMakerService.IsOperationSuccessful(deleteSourcesResultState)); }
public Answer Answer(Question question) { QnAMakerRequest request = new QnAMakerRequest() { Question = question.Text, ApiUrl = this.envInfo.ApiUrl, Method = HttpPostMethod, ContentType = ApplicationJsonContentType, Encoding = this.envInfo.Encoding, OcpApimSubscriptionKey = this.envInfo.OcpApimSubscriptionKey }; QnAMakerResponse response = this.DoGetAnswer(request); return(new Answer() { Text = response.Answer, Relevance = response.Score }); }
/// <summary> /// Check if operation is completed. /// </summary> /// <param name="response">Response to be checked if completed.</param> /// <returns><see cref="bool"/> that represents if operation is complete.</returns> private bool IsOperationComplete(QnAMakerResponse response) { if (response?.OperationState == QnAMakerOperationStates.Succeeded) { return(true); } else if (response?.OperationState == QnAMakerOperationStates.Running || response?.OperationState == QnAMakerOperationStates.NotStarted) { return(false); } else { var details = new StringBuilder(); if (response?.ErrorResponse?.Error?.Details != null) { foreach (var detail in response.ErrorResponse.Error.Details) { details.AppendLine(detail.Message); } } throw new Exception($"Error Code: {response?.ErrorResponse?.Error?.Code}\nError Message: {response?.ErrorResponse?.Error?.Message}\nError Details: {details.ToString()}"); } }
/// <inheritdoc/> public async Task <string> AwaitOperationCompletionState(QnAMakerResponse response) { var completedResponse = await this.AwaitOperationCompletionResponse(response); return(completedResponse.OperationState); }