Exemple #1
0
        public void QnAMakerTraceInfo_Serialization()
        {
            var qnaMakerTraceInfo = new QnAMakerTraceInfo
            {
                QueryResults = new QueryResult[]
                {
                    new QueryResult
                    {
                        Questions = new string[] { "What's your name?" },
                        Answer    = "My name is Mike",
                        Score     = 0.9F,
                    },
                },
                KnowledgeBaseId = Guid.NewGuid().ToString(),
                ScoreThreshold  = 0.5F,
                Top             = 1,
            };

            var serializerSettings = new JsonSerializerSettings {
                TypeNameHandling = TypeNameHandling.Auto
            };
            var serialized   = JsonConvert.SerializeObject(qnaMakerTraceInfo, serializerSettings);
            var deserialized = JsonConvert.DeserializeObject <QnAMakerTraceInfo>(serialized, serializerSettings);

            Assert.NotNull(deserialized);
            Assert.NotNull(deserialized.QueryResults);
            Assert.NotNull(deserialized.KnowledgeBaseId);
            Assert.Equal(0.5, deserialized.ScoreThreshold);
            Assert.Equal(1, deserialized.Top);
            Assert.Equal(qnaMakerTraceInfo.QueryResults[0].Questions[0], deserialized.QueryResults[0].Questions[0]);
            Assert.Equal(qnaMakerTraceInfo.QueryResults[0].Answer, deserialized.QueryResults[0].Answer);
            Assert.Equal(qnaMakerTraceInfo.KnowledgeBaseId, deserialized.KnowledgeBaseId);
            Assert.Equal(qnaMakerTraceInfo.ScoreThreshold, deserialized.ScoreThreshold);
            Assert.Equal(qnaMakerTraceInfo.Top, deserialized.Top);
        }
Exemple #2
0
 private async Task EmitTraceInfoAsync(ITurnContext turnContext, Activity messageActivity, QueryResult[] result, QnAMakerOptions options)
 {
     var traceInfo = new QnAMakerTraceInfo
     {
         Message                    = messageActivity,
         QueryResults               = result,
         KnowledgeBaseId            = _endpoint.KnowledgeBaseId,
         ScoreThreshold             = options.ScoreThreshold,
         Top                        = options.Top,
         StrictFilters              = options.StrictFilters,
         Context                    = options.Context,
         QnAId                      = options.QnAId,
         IsTest                     = options.IsTest,
         RankerType                 = options.RankerType,
         Filters                    = options.Filters,
         EnablePreciseAnswer        = options.EnablePreciseAnswer,
         IncludeUnstructuredSources = options.IncludeUnstructuredSources
     };
     var traceActivity = Activity.CreateTraceActivity(QnAMaker.QnAMakerName, QnAMaker.QnAMakerTraceType, traceInfo, QnAMaker.QnAMakerTraceLabel);
     await turnContext.SendActivityAsync(traceActivity).ConfigureAwait(false);
 }
Exemple #3
0
        public async Task QnaMaker_TraceActivity()
        {
            // Mock Qna
            var mockHttp = new MockHttpMessageHandler();

            mockHttp.When(HttpMethod.Post, GetRequestUrl())
            .Respond("application/json", GetResponse("QnaMaker_ReturnsAnswer.json"));
            var qna = GetQnAMaker(mockHttp,
                                  new QnAMakerEndpoint
            {
                KnowledgeBaseId = _knowlegeBaseId,
                EndpointKey     = _endpointKey,
                Host            = _hostname
            },
                                  new QnAMakerOptions
            {
                Top = 1
            });

            // Invoke flow which uses mock
            var         transcriptStore = new MemoryTranscriptStore();
            TestAdapter adapter         = new TestAdapter()
                                          .Use(new TranscriptLoggerMiddleware(transcriptStore));
            string conversationId = null;

            await new TestFlow(adapter, async(context, ct) =>
            {
                // Simulate Qna Lookup
                if (context?.Activity?.Text.CompareTo("how do I clean the stove?") == 0)
                {
                    var results = await qna.GetAnswersAsync(context);
                    Assert.IsNotNull(results);
                    Assert.AreEqual(results.Length, 1, "should get one result");
                    StringAssert.StartsWith(results[0].Answer, "BaseCamp: You can use a damp rag to clean around the Power Pack");
                }

                conversationId     = context.Activity.Conversation.Id;
                var typingActivity = new Activity
                {
                    Type      = ActivityTypes.Typing,
                    RelatesTo = context.Activity.RelatesTo
                };
                await context.SendActivityAsync(typingActivity);
                await Task.Delay(500);
                await context.SendActivityAsync("echo:" + context.Activity.Text);
            })
            .Send("how do I clean the stove?")
            .AssertReply((activity) => Assert.AreEqual(activity.Type, ActivityTypes.Typing))
            .AssertReply("echo:how do I clean the stove?")
            .Send("bar")
            .AssertReply((activity) => Assert.AreEqual(activity.Type, ActivityTypes.Typing))
            .AssertReply("echo:bar")
            .StartTestAsync();

            // Validate Trace Activity created
            var pagedResult = await transcriptStore.GetTranscriptActivitiesAsync("test", conversationId);

            Assert.AreEqual(7, pagedResult.Items.Length);
            Assert.AreEqual("how do I clean the stove?", pagedResult.Items[0].AsMessageActivity().Text);
            Assert.IsTrue(pagedResult.Items[1].Type.CompareTo(ActivityTypes.Trace) == 0);
            QnAMakerTraceInfo traceInfo = ((JObject)((ITraceActivity)pagedResult.Items[1]).Value).ToObject <QnAMakerTraceInfo>();

            Assert.IsNotNull(traceInfo);
            Assert.IsNotNull(pagedResult.Items[2].AsTypingActivity());
            Assert.AreEqual("echo:how do I clean the stove?", pagedResult.Items[3].AsMessageActivity().Text);
            Assert.AreEqual("bar", pagedResult.Items[4].AsMessageActivity().Text);
            Assert.IsNotNull(pagedResult.Items[5].AsTypingActivity());
            Assert.AreEqual("echo:bar", pagedResult.Items[6].AsMessageActivity().Text);
            foreach (var activity in pagedResult.Items)
            {
                Assert.IsTrue(!string.IsNullOrWhiteSpace(activity.Id));
                Assert.IsTrue(activity.Timestamp > default(DateTimeOffset));
            }
        }