Пример #1
0
        /// <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);
        }
Пример #2
0
        // 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
            });
        }
Пример #4
0
        /// <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()}");
            }
        }
Пример #5
0
        /// <inheritdoc/>
        public async Task <string> AwaitOperationCompletionState(QnAMakerResponse response)
        {
            var completedResponse = await this.AwaitOperationCompletionResponse(response);

            return(completedResponse.OperationState);
        }