Ejemplo n.º 1
0
        public Scanner Create()
        {
            LexSettings settings = new LexSettings();
            Scanner     reader   = new Scanner("abcd1234'	a \\b   k", '\\', settings.QuotesChars, settings.WhiteSpaceChars);

            return(reader);
        }
        public ITokenReader Create()
        {
            LexSettings  settings = new LexSettings();
            ITokenReader reader   = new TokenReader("abcd1234'	a \\b   k", "\\", settings.QuotesChars, settings.WhiteSpaceChars, settings.EolChars);

            return(reader);
        }
Ejemplo n.º 3
0
        public static async Task ReplacesCorrectTokensInSampleUtterances(
            string text,
            string entityMatch,
            string entityTypeName,
            int matchIndex,
            string sampleUtterance)
        {
            var intent      = Guid.NewGuid().ToString();
            var mockClient  = new MockLexClient();
            var slot        = CreateSlot(entityTypeName, entityTypeName);
            var lexSettings = new LexSettings(new JArray {
                slot
            });

            using (var lex = new LexNLUService(string.Empty, string.Empty, lexSettings, mockClient))
            {
                var entity    = new Entity(entityTypeName, string.Empty, entityMatch, matchIndex);
                var utterance = new LabeledUtterance(text, intent, new[] { entity });

                await lex.TrainAsync(new[] { utterance }).ConfigureAwait(false);

                var startImportRequest = mockClient.Requests.OfType <StartImportRequest>().FirstOrDefault();
                var payloadJson        = GetPayloadJson(startImportRequest.Payload);
                var payload            = JObject.Parse(payloadJson);

                // assert template utterance is set
                payload.SelectToken(".resource.intents[0].sampleUtterances").Count().Should().Be(1);
                payload.SelectToken(".resource.intents[0].sampleUtterances[0]").Value <string>().Should().Be(sampleUtterance);
            }
        }
Ejemplo n.º 4
0
        public static async Task CreatesBot()
        {
            var text           = "hello world";
            var intent         = Guid.NewGuid().ToString();
            var entityTypeName = "Planet";
            var botName        = Guid.NewGuid().ToString();

            var payload    = default(JObject);
            var mockClient = CreateLexTrainClientMock();

            mockClient.Setup(lex => lex.StartImportAsync(
                                 It.IsAny <StartImportRequest>(),
                                 It.IsAny <CancellationToken>()))
            .Callback <StartImportRequest, CancellationToken>((request, cancellationToken) =>
                                                              payload = GetPayloadJson(request.Payload));

            var slot        = CreateSlot(entityTypeName, entityTypeName);
            var lexSettings = new LexSettings(new JArray {
                slot
            });

            using (var lex = new LexNLUTrainClient(botName, string.Empty, lexSettings, mockClient.Object))
            {
                var entity    = new Entity(entityTypeName, "Earth", "world", 0);
                var utterance = new LabeledUtterance(text, intent, new[] { entity });

                await lex.TrainAsync(new[] { utterance }).ConfigureAwait(false);

                // assert payload
                payload.Should().NotBeNull();

                // assert name is set
                payload.SelectToken(".resource.name").Value <string>().Should().Be(botName);

                // assert intent is created
                payload.SelectToken(".resource.intents").Count().Should().Be(1);
                payload.SelectToken(".resource.intents[0].name").Value <string>().Should().Be(intent);

                // assert template utterance is set
                payload.SelectToken(".resource.intents[0].sampleUtterances").Count().Should().Be(1);
                payload.SelectToken(".resource.intents[0].sampleUtterances[0]").Value <string>().Should().Be("hello {Planet}");

                // assert slot is created in intent
                payload.SelectToken(".resource.intents[0].slots").Count().Should().Be(1);
                payload.SelectToken(".resource.intents[0].slots[0].name").Value <string>().Should().Be(entityTypeName);
                payload.SelectToken(".resource.intents[0].slots[0].slotType").Value <string>().Should().Be(entityTypeName);
            }
        }
Ejemplo n.º 5
0
        public static async Task CreatesBot()
        {
            var text           = "hello world";
            var intent         = Guid.NewGuid().ToString();
            var entityTypeName = "Planet";
            var botName        = Guid.NewGuid().ToString();
            var mockClient     = new MockLexClient();
            var slot           = CreateSlot(entityTypeName, entityTypeName);
            var lexSettings    = new LexSettings(new JArray {
                slot
            });

            using (var lex = new LexNLUService(botName, string.Empty, lexSettings, mockClient))
            {
                var entity    = new Entity(entityTypeName, "Earth", "world", 0);
                var utterance = new LabeledUtterance(text, intent, new[] { entity });

                await lex.TrainAsync(new[] { utterance }).ConfigureAwait(false);

                // get StartImport request
                var startImportRequest = mockClient.Requests.OfType <StartImportRequest>().FirstOrDefault();
                startImportRequest.Should().NotBeNull();

                // get payload
                var payloadJson = GetPayloadJson(startImportRequest.Payload);
                payloadJson.Should().NotBeNull().And.NotBeEmpty();
                var payload = JObject.Parse(payloadJson);

                // assert name is set
                payload.SelectToken(".resource.name").Value <string>().Should().Be(botName);

                // assert intent is created
                payload.SelectToken(".resource.intents").Count().Should().Be(1);
                payload.SelectToken(".resource.intents[0].name").Value <string>().Should().Be(intent);

                // assert template utterance is set
                payload.SelectToken(".resource.intents[0].sampleUtterances").Count().Should().Be(1);
                payload.SelectToken(".resource.intents[0].sampleUtterances[0]").Value <string>().Should().Be("hello {Planet}");

                // assert slot is created in intent
                payload.SelectToken(".resource.intents[0].slots").Count().Should().Be(1);
                payload.SelectToken(".resource.intents[0].slots[0].name").Value <string>().Should().Be(entityTypeName);
                payload.SelectToken(".resource.intents[0].slots[0].slotType").Value <string>().Should().Be(entityTypeName);
            }
        }
Ejemplo n.º 6
0
        public static async Task ReplacesCorrectTokensInSampleUtterances(
            string text,
            string entityMatch,
            string entityTypeName,
            int matchIndex,
            string sampleUtterance)
        {
            var intent = Guid.NewGuid().ToString();

            var payload    = default(JObject);
            var mockClient = CreateLexTrainClientMock();

            mockClient.Setup(lex => lex.StartImportAsync(
                                 It.IsAny <StartImportRequest>(),
                                 It.IsAny <CancellationToken>()))
            .Callback <StartImportRequest, CancellationToken>((request, cancellationToken) =>
                                                              payload = GetPayloadJson(request.Payload));

            var slot        = CreateSlot(entityTypeName, entityTypeName);
            var lexSettings = new LexSettings(new JArray {
                slot
            });

            using (var lex = new LexNLUTrainClient(string.Empty, string.Empty, lexSettings, mockClient.Object))
            {
                var entity    = new Entity(entityTypeName, null, entityMatch, matchIndex);
                var utterance = new LabeledUtterance(text, intent, new[] { entity });

                await lex.TrainAsync(new[] { utterance }).ConfigureAwait(false);

                // assert template utterance is set
                payload.Should().NotBeNull();
                payload.SelectToken(".resource.intents[0].sampleUtterances").Count().Should().Be(1);
                payload.SelectToken(".resource.intents[0].sampleUtterances[0]").Value <string>().Should().Be(sampleUtterance);
            }
        }
Ejemplo n.º 7
0
        public static async Task DoesNotOverwriteIntent()
        {
            var canary            = Guid.NewGuid().ToString();
            var intentName        = Guid.NewGuid().ToString();
            var entityTypeName    = Guid.NewGuid().ToString();
            var existingUtterance = Guid.NewGuid().ToString();

            var existingSlot = new JObject
            {
                { "name", entityTypeName },
                { "slotType", canary },
            };

            var existingIntent = new JObject
            {
                { "name", intentName },
                { "canary", canary },
                { "sampleUtterances", new JArray {
                      existingUtterance
                  } },
                { "slots", new JArray {
                      existingSlot
                  } },
            };

            var importBotTemplate = new JObject
            {
                {
                    "resource",
                    new JObject
                    {
                        { "intents", new JArray {
                              existingIntent
                          } },
                    }
                }
            };

            var payload    = default(JObject);
            var mockClient = CreateLexTrainClientMock();

            mockClient.Setup(lex => lex.StartImportAsync(
                                 It.IsAny <StartImportRequest>(),
                                 It.IsAny <CancellationToken>()))
            .Callback <StartImportRequest, CancellationToken>(
                (request, cancellationToken) => payload = GetPayloadJson(request.Payload));

            var slot        = CreateSlot(entityTypeName, Guid.NewGuid().ToString());
            var lexSettings = new LexSettings(new JArray {
                slot
            }, importBotTemplate);

            using (var lex = new LexNLUTrainClient(string.Empty, string.Empty, lexSettings, mockClient.Object))
            {
                var text      = Guid.NewGuid().ToString();
                var entity    = new Entity(entityTypeName, null, text, 0);
                var utterance = new LabeledUtterance(text, intentName, new[] { entity });
                await lex.TrainAsync(new[] { utterance }).ConfigureAwait(false);

                // get StartImport request
                var startImportRequest = mockClient.Invocations.Select(i => i.Arguments[0]).OfType <StartImportRequest>().FirstOrDefault();
                startImportRequest.Should().NotBeNull();

                // assert payload
                payload.Should().NotBeNull();

                // get intent
                var intents = payload.SelectTokens($".resource.intents[?(@.name == '{intentName}')]");
                intents.Count().Should().Be(1);
                intents.First().Value <string>("canary").Should().Be(canary);
                intents.First().SelectToken(".sampleUtterances").Count().Should().Be(2);
                intents.First().SelectToken(".sampleUtterances").Should().Contain(u => u.Value <string>() == existingUtterance);
                intents.First().SelectToken(".sampleUtterances").Should().Contain(u => u.Value <string>() == $"{{{entityTypeName}}}");
                intents.First().SelectToken(".slots").Count().Should().Be(1);
                intents.First().SelectToken(".slots").First().Value <string>("slotType").Should().Be(canary);
                intents.First().SelectToken(".slots").First().Value <string>("slotConstraint").Should().Be("Optional");
            }
        }
Ejemplo n.º 8
0
        public static async Task DoesNotOverwriteIntent()
        {
            var canary            = Guid.NewGuid().ToString();
            var intentName        = Guid.NewGuid().ToString();
            var entityTypeName    = Guid.NewGuid().ToString();
            var existingUtterance = Guid.NewGuid().ToString();

            var existingSlot = new JObject
            {
                { "name", entityTypeName },
                { "slotType", canary },
            };

            var existingIntent = new JObject
            {
                { "name", intentName },
                { "canary", canary },
                { "sampleUtterances", new JArray {
                      existingUtterance
                  } },
                { "slots", new JArray {
                      existingSlot
                  } },
            };

            var importBotTemplate = new JObject
            {
                {
                    "resource",
                    new JObject
                    {
                        { "intents", new JArray {
                              existingIntent
                          } },
                    }
                }
            };

            var mockClient  = new MockLexClient();
            var slot        = CreateSlot(entityTypeName, Guid.NewGuid().ToString());
            var lexSettings = new LexSettings(new JArray {
                slot
            }, importBotTemplate);

            using (var lex = new LexNLUService(string.Empty, string.Empty, lexSettings, mockClient))
            {
                var text      = Guid.NewGuid().ToString();
                var entity    = new Entity(entityTypeName, null, text, 0);
                var utterance = new LabeledUtterance(text, intentName, new[] { entity });
                await lex.TrainAsync(new[] { utterance }).ConfigureAwait(false);

                // get StartImport request
                var startImportRequest = mockClient.Requests.OfType <StartImportRequest>().FirstOrDefault();
                startImportRequest.Should().NotBeNull();

                // get payload
                var payloadJson = GetPayloadJson(startImportRequest.Payload);
                payloadJson.Should().NotBeNull().And.NotBeEmpty();
                var payload = JObject.Parse(payloadJson);

                // get intent
                var intents = payload.SelectTokens($".resource.intents[?(@.name == '{intentName}')]");
                intents.Count().Should().Be(1);
                intents.First().Value <string>("canary").Should().Be(canary);
                intents.First().SelectToken(".sampleUtterances").Count().Should().Be(2);
                intents.First().SelectToken(".sampleUtterances").Should().Contain(u => u.Value <string>() == existingUtterance);
                intents.First().SelectToken(".sampleUtterances").Should().Contain(u => u.Value <string>() == $"{{{entityTypeName}}}");
                intents.First().SelectToken(".slots").Count().Should().Be(1);
                intents.First().SelectToken(".slots").First().Value <string>("slotType").Should().Be(canary);
                intents.First().SelectToken(".slots").First().Value <string>("slotConstraint").Should().Be("Optional");
            }
        }