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); }
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); }
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)); }
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); }
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?";*/ }
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?"); }
protected Concept2 AsConcept(Type policy) { return(Concept2.From(policy.Name)); }
public Concept2 DefineConcept(string conceptName) { var concept = Concept2.From(conceptName); return(DefineConcept(concept)); }