public RestaurantDomainKnowledge()
        {
            DefineConcept("hello")
            .Description("hi")
            .Description("good morning")
            .Description("good day")
            ;

            DefineConcept("bye")
            .Description("cheers")
            .Description("cya")
            .Description("see you")
            ;

            DefineConcept("thank")
            .Description("thank you")
            .Description("thanks")
            ;

            DefineConcept("name", out _nameProperty);
            DefineConcept("address", out _addressProperty);
            DefineConcept("pricerange", out _pricerangeProperty)
            .Description("price")
            .Description("pricing")
            .Description("prices")
            .Description("money")
            .Description("priced")
            .Description("pricy");

            DefineConcept("restaurant", out _restaurantClass)
            .Description("restaurants")
            .Description("place to eat")
            .Description("venue to eat");

            DefineConcept("food", out var foodConcept)
            .Description("stuff to eat");

            //DefineConcept("pizza", out var pizzaConcept)
            //    .Property(Concept2.InstanceOf, foodConcept);

            DefineConcept("cheap", out var cheapConcept)
            .Property(Concept2.InstanceOf, _pricerangeProperty);
            DefineConcept("expensive", out var expensiveConcept)
            .Property(Concept2.InstanceOf, _pricerangeProperty);
            DefineConcept("moderate", out var moderateConcept)
            .Property(Concept2.InstanceOf, _pricerangeProperty)
            .Description("medium")
            .Description("mid")
            .Description("midrange")
            .Description("middle")
            ;

            SetValues(_pricerangeProperty, Concept2.HasPropertyValue, expensiveConcept, moderateConcept, cheapConcept);
            SetValues(_restaurantClass, Concept2.HasProperty, _pricerangeProperty);

            DefineRestaurant("Caesar Palace", expensiveConcept, Concept2.From("Balleary Street"));
            DefineRestaurant("Bombay", null, Concept2.From("V Parku"));
            //DefineRestaurant("Vapiano", moderateConcept, Concept2.From("Chodov Avenue"));
            DefineRestaurant("Chinese Bistro", cheapConcept, Concept2.From("Montreal"));
        }
        internal static ConceptInstance Create(BeamGenerator generator, Concept2 subject, string description)
        {
            var instance = new ConceptInstance(Concept2.RememberConceptDescription);

            generator.SetValue(instance, Concept2.Subject, new ConceptInstance(subject));
            generator.SetValue(instance, Concept2.Description, new ConceptInstance(Concept2.From(description)));
            return(instance);
        }
Ejemplo n.º 3
0
        internal static ConceptInstance Create(ConceptInstance instanceToRefine, string unknown, BeamGenerator generator)
        {
            var assignUnknownProperty    = new ConceptInstance(Concept2.AssignUnknownProperty);
            var unknownPropertyCandidate = new ConceptInstance(Concept2.From(unknown));

            generator.SetValue(assignUnknownProperty, Concept2.Subject, unknownPropertyCandidate);
            generator.SetValue(assignUnknownProperty, Concept2.Target, instanceToRefine);
            return(assignUnknownProperty);
        }
Ejemplo n.º 4
0
        internal static void GenerateActivationRequest(string unknown, BeamGenerator generator)
        {
            var newConcept         = Concept2.From(unknown);
            var newConceptInstance = new ConceptInstance(newConcept);

            var learnInstance = new ConceptInstance(Concept2.LearnNewConcept);

            generator.SetValue(learnInstance, Concept2.Unknown, newConceptInstance);
            generator.Push(new InstanceActivationRequestEvent(learnInstance));
        }
Ejemplo n.º 5
0
        internal AbilityBase DefineConcept(string conceptName, out Concept2 concept, bool fireConceptDefinedEvt = true)
        {
            _currentInstance = null;
            _currentConcept  = concept = Concept2.From(conceptName);

            if (fireConceptDefinedEvt)
            {
                AddInitializationEvent(new ConceptDefinedEvent(concept));
            }

            return(this);
        }
Ejemplo n.º 6
0
        protected override IEnumerable <string> execute(BeamGenerator generator)
        {
            var unknownPhrases = GetUnknownPhrases(generator).ToArray();

            var substitutionRequest = Get <IncompleteRelationEvent>(p => !p.IsFilled, searchInsideTurnOnly: false);

            if (PreviousPolicy <LearnNewPhrase>(out _) || unknownPhrases.Count() != 1 || substitutionRequest == null || substitutionRequest.Subject == null)
            {
                yield break;
            }

            var unknownPhrase = unknownPhrases.FirstOrDefault();

            var unknownPropertyCandidate = new ConceptInstance(Concept2.From(unknownPhrase));
            var newPropertyAssignment    = Find <PropertySetEvent>(p => p.Target.Property == Concept2.HasProperty && p.SubstitutedValue?.Concept == substitutionRequest.Property, precedingTurns: 1);

            if (newPropertyAssignment != null)
            {
                //in the previous turn, new property was registered - this might be its value
                var remember = RememberPropertyValue.Create(generator, new PropertySetTarget(substitutionRequest.Subject, substitutionRequest.Property), unknownPropertyCandidate);
                YesNoPrompt.Generate(generator, remember, new ConceptInstance(Concept2.Nothing));

                yield return($"So, you think {singular(substitutionRequest.Subject)} {singular(substitutionRequest.Property)} {unknownPhrase} ?");

                yield break;
            }

            /*// Unknown value when substitution is required was observed
             * // TODO detect whether request is for parameter (then nothing to do here)
             * // or try to learn new property value
             *
             * var assignUnknownProperty = new ConceptInstance(Concept2.AssignUnknownProperty);
             * generator.SetValue(assignUnknownProperty, Concept2.Subject, unknownPropertyCandidate);
             *
             * //TODO incorporate target property
             * generator.SetValue(assignUnknownProperty, Concept2.Target, substitutionRequest.Subject);
             * generator.Push(new InstanceActivationRequestEvent(assignUnknownProperty));
             *
             * yield return $"What does {unknownPhrase} mean?";*/
        }
Ejemplo n.º 7
0
        protected override IEnumerable <string> execute(BeamGenerator generator)
        {
            var unknownPhrases = GetUnknownPhrases(generator).ToArray();

            if (unknownPhrases.Length != 1)
            {
                yield break;
            }

            var phraseToAsk = unknownPhrases.First();

            if (phraseToAsk.Split(' ').Length > 2)
            {
                yield break;
            }

            var newConcept         = Concept2.From(phraseToAsk);
            var newConceptInstance = new ConceptInstance(newConcept);

            var handlePropertyInstance = new ConceptInstance(Concept2.AcceptNewProperty);

            generator.SetValue(handlePropertyInstance, Concept2.Property, newConceptInstance);

            var handleConceptInstance = new ConceptInstance(Concept2.Nothing);
            var options = new Dictionary <Concept2, ConceptInstance>()
            {
                { Concept2.Property, handlePropertyInstance },
                { Concept2.ConceptName, handleConceptInstance },
            };

            var prompt = OptionPrompt.CreatePrompt(options, generator);

            //remember runtime info so others can use it
            generator.SetValue(TagInstance, Concept2.Unknown, newConceptInstance);
            generator.SetValue(TagInstance, Concept2.Prompt, prompt);

            generator.Push(new InstanceActivationRequestEvent(prompt));

            yield return($"What does '{unknownPhrases.First()}' mean?");
        }
Ejemplo n.º 8
0
 protected Concept2 AsConcept(Type policy)
 {
     return(Concept2.From(policy.Name));
 }
Ejemplo n.º 9
0
        public Concept2 DefineConcept(string conceptName)
        {
            var concept = Concept2.From(conceptName);

            return(DefineConcept(concept));
        }