public async Task TestIntentRecognize()
        {
            var mockResult = new Result
            {
                Score = 0.9,
                Label = new Label {
                    Name = "mockLabel"
                }
            };

            var mockScore = new List <Result> {
                mockResult
            };
            var mockResolver = new MockResolver(mockScore);
            var recognizer   = new OrchestratorRecognizer(string.Empty, string.Empty, mockResolver)
            {
                ModelFolder  = new StringExpression("fakePath"),
                SnapshotFile = new StringExpression("fakePath")
            };

            var adapter  = new TestAdapter(TestAdapter.CreateConversation("ds"));
            var activity = MessageFactory.Text("hi");
            var context  = new TurnContext(adapter, activity);

            var dc     = new DialogContext(new DialogSet(), context, new DialogState());
            var result = await recognizer.RecognizeAsync(dc, activity, default);

            Assert.Equal(1, result.Intents.Count);
            Assert.True(result.Intents.ContainsKey("mockLabel"));
            Assert.Equal(0.9, result.Intents["mockLabel"].Score);
        }
        public async Task TestEntityRecognize()
        {
            var mockResult = new Result
            {
                Score = 0.9,
                Label = new Label {
                    Name = "mockLabel"
                }
            };

            var mockScore = new List <Result> {
                mockResult
            };
            var mockEntityResult = new Result
            {
                Score = 0.75,
                Label = new Label {
                    Name = "mockEntityLabel", Type = LabelType.Entity, Span = new Span {
                        Offset = 17, Length = 7
                    }
                },
            };

            var mockEntityScore = new List <Result> {
                mockEntityResult
            };
            var mockResolver = new MockResolver(mockScore, mockEntityScore);
            var recognizer   = new OrchestratorRecognizer(string.Empty, string.Empty, mockResolver)
            {
                ModelFolder              = new StringExpression("fakePath"),
                SnapshotFile             = new StringExpression("fakePath"),
                ScoreEntities            = true,
                ExternalEntityRecognizer = new NumberEntityRecognizer()
            };

            var adapter  = new TestAdapter(TestAdapter.CreateConversation("ds"));
            var activity = MessageFactory.Text("turn on light in room 12");
            var context  = new TurnContext(adapter, activity);

            var dc     = new DialogContext(new DialogSet(), context, new DialogState());
            var result = await recognizer.RecognizeAsync(dc, activity, default);

            Assert.NotNull(result.Entities);
            Assert.Equal(new JValue("12"), result.Entities["number"][0]);
            var resolution = result.Entities["$instance"]["number"][0]["resolution"];

            Assert.Equal(new JValue("integer"), resolution["subtype"]);
            Assert.Equal(new JValue("12"), resolution["value"]);

            Assert.True(result.Entities.ContainsKey("mockEntityLabel"));
            Assert.Equal(0.75, result.Entities["mockEntityLabel"][0]["score"]);
            Assert.Equal("room 12", result.Entities["mockEntityLabel"][0]["text"]);
            Assert.Equal(17, result.Entities["mockEntityLabel"][0]["start"]);
            Assert.Equal(24, result.Entities["mockEntityLabel"][0]["end"]);
        }
예제 #3
0
        private OrchestratorRecognizer InitializeOrchestrator()
        {
            string modelFolder         = Path.GetFullPath(OrchestratorConfig.ModelFolder);
            string snapshotFile        = Path.GetFullPath(OrchestratorConfig.SnapshotFile);
            OrchestratorRecognizer orc = new OrchestratorRecognizer()
            {
                ModelFolder  = modelFolder,
                SnapshotFile = snapshotFile
            };

            return(orc);
        }
예제 #4
0
        private OrchestratorRecognizer InitializeOrchestrator()
        {
            string modelPath           = Path.GetFullPath(OrchestratorConfig.ModelPath);
            string snapshotPath        = Path.GetFullPath(OrchestratorConfig.SnapshotPath);
            OrchestratorRecognizer orc = new OrchestratorRecognizer()
            {
                ModelPath    = modelPath,
                SnapshotPath = snapshotPath
            };

            return(orc);
        }
        public async Task TestIntentRecognizeLogsTelemetry(bool?logPersonalInformation)
        {
            var mockResult1 = new Result
            {
                Score = 0.9,
                Label = new Label {
                    Name = "mockLabel"
                }
            };
            var mockResult2 = new Result
            {
                Score = 0.8,
                Label = new Label {
                    Name = "mockLabel2"
                }
            };

            var mockScore = new List <Result> {
                mockResult1, mockResult2
            };
            var mockResolver    = new MockResolver(mockScore);
            var telemetryClient = new Mock <IBotTelemetryClient>();
            var recognizer      = new OrchestratorRecognizer(string.Empty, string.Empty, mockResolver)
            {
                ModelFolder     = new StringExpression("fakePath"),
                SnapshotFile    = new StringExpression("fakePath"),
                TelemetryClient = telemetryClient.Object,
            };

            if (logPersonalInformation != null)
            {
                recognizer.LogPersonalInformation = logPersonalInformation;
            }

            var adapter  = new TestAdapter(TestAdapter.CreateConversation("ds"));
            var activity = MessageFactory.Text("hi");
            var context  = new TurnContext(adapter, activity);

            var dc     = new DialogContext(new DialogSet(), context, new DialogState());
            var result = await recognizer.RecognizeAsync(dc, activity, default);

            if (logPersonalInformation == null)
            {
                // Should be false by default, when not specified by user.
                var(logPersonalInfo, _) = recognizer.LogPersonalInformation.TryGetValue(dc.State);
                Assert.False(logPersonalInfo);
            }

            Assert.Equal(2, result.Intents.Count);
            Assert.True(result.Intents.ContainsKey("mockLabel"));
            Assert.Equal(0.9, result.Intents["mockLabel"].Score);
            ValidateTelemetry(recognizer, telemetryClient, dc, activity, result, callCount: 1);
        }
        public async Task TestIntentNoneRecognize()
        {
            var mockResult1 = new Result
            {
                Score = 0.3,
                Label = new Label {
                    Name = "mockLabel"
                }
            };
            var mockResultNone = new Result
            {
                Score = 0.8,
                Label = new Label {
                    Name = "None"
                }
            };
            var mockResult2 = new Result
            {
                Score = 0.6,
                Label = new Label {
                    Name = "mockLabel2"
                }
            };

            var mockScore = new List <Result> {
                mockResult1, mockResultNone, mockResult2
            }.AsReadOnly();
            var mockResolver = new MockResolver(mockScore);
            var recognizer   = new OrchestratorRecognizer(string.Empty, string.Empty, mockResolver)
            {
                ModelFolder  = new StringExpression("fakePath"),
                SnapshotFile = new StringExpression("fakePath")
            };

            var adapter  = new TestAdapter(TestAdapter.CreateConversation("ds"));
            var activity = MessageFactory.Text("hi");
            var context  = new TurnContext(adapter, activity);

            var dc     = new DialogContext(new DialogSet(), context, new DialogState());
            var result = await recognizer.RecognizeAsync(dc, activity, default);

            Assert.Equal(3, result.Intents.Count);
            List <Result> results = (List <Result>)result.Properties[OrchestratorRecognizer.ResultProperty];

            Assert.Equal(AdaptiveRecognizer.NoneIntent, results[0].Label.Name);
            Assert.Equal(3, results.Count);
            Assert.True(result.Intents.ContainsKey("mockLabel"));
            Assert.Equal(0.3, result.Intents["mockLabel"].Score);
            Assert.True(result.Intents.ContainsKey(AdaptiveRecognizer.NoneIntent));
            Assert.Equal(1.0, result.Intents[AdaptiveRecognizer.NoneIntent].Score);
            Assert.True(result.Intents.ContainsKey("mockLabel2"));
            Assert.Equal(0.6, result.Intents["mockLabel2"].Score);
        }
예제 #7
0
        public BotServices(IConfiguration configuration, OrchestratorRecognizer dispatcher)
        {
            // Read the setting for cognitive services (LUIS, QnA) from the appsettings.json
            // If includeApiResults is set to true, the full response from the LUIS api (LuisResult)
            // will be made available in the properties collection of the RecognizerResult
            LuisHomeAutomationRecognizer = CreateLuisRecognizer(configuration, "LuisHomeAutomationAppId");
            LuisWeatherRecognizer        = CreateLuisRecognizer(configuration, "LuisWeatherAppId");

            Dispatch = dispatcher;

            SampleQnA = new QnAMaker(new QnAMakerEndpoint
            {
                KnowledgeBaseId = configuration["QnAKnowledgebaseId"],
                EndpointKey     = configuration["QnAEndpointKey"],
                Host            = configuration["QnAEndpointHostName"]
            });
        }
        public async Task TestAmbiguousResults()
        {
            var mockResult1 = new Result
            {
                Score = 0.61,
                Label = new Label {
                    Name = "mockLabel1"
                }
            };

            var mockResult2 = new Result
            {
                Score = 0.62,
                Label = new Label {
                    Name = "mockLabel2"
                }
            };

            var mockScore = new List <Result>
            {
                mockResult1,
                mockResult2
            };
            var mockResolver = new MockResolver(mockScore);
            var recognizer   = new OrchestratorRecognizer(string.Empty, string.Empty, mockResolver)
            {
                ModelFolder                  = new StringExpression("fakePath"),
                SnapshotFile                 = new StringExpression("fakePath"),
                DetectAmbiguousIntents       = new BoolExpression(true),
                DisambiguationScoreThreshold = new NumberExpression(0.5)
            };

            var adapter  = new TestAdapter(TestAdapter.CreateConversation("ds"));
            var activity = MessageFactory.Text("12");
            var context  = new TurnContext(adapter, activity);

            var dc     = new DialogContext(new DialogSet(), context, new DialogState());
            var result = await recognizer.RecognizeAsync(dc, activity, default);

            Assert.True(result.Intents.ContainsKey("ChooseIntent"));
        }