internal static void ModuleTesting() { var externalDatabase = RestaurantAgent.CreateRestaurantDatabase(); var module = new ExternalDatabaseProviderModule("restaurant", externalDatabase); var database = new EvaluatedDatabase(); database.Container .Pattern("luxury") .WhatItSpecifies("pricerange") .HowToEvaluate("expensive") ; database.StartQueryLog(); module.AttachTo(database); var result = database.Query(SemanticItem.AnswerQuery(Question.HowToDo, Constraints.WithInput("set restaurant specifier luxury"))); //var result = database.Query(SemanticItem.AnswerQuery(Question.IsItTrue, Constraints.WithInput("restaurant database has 1 result"))); var actionId = result.FirstOrDefault().Answer; var action = database.GetNativeAction(actionId); action(result.FirstOrDefault()); var log = database.FinishLog(); Log.Questions(log.GetQuestions()); Log.Result(result); Log.Dump(database); }
internal Body() { Db.Container .Pattern("print $something") .HowToDo("Print", Db.Container.EvaluateCallArgsSpan("Print", _print, "$something")) .Pattern("$something is a command") .IsTrue("$something has how to do question specified") .Pattern("the $something") .HowToEvaluate("The", _the) .Pattern("one") .HowToConvertToNumber("1") .Pattern("user input") .HowToEvaluate("UserInput", _userInput) .Pattern("history contains $something") .IsTrue("HistoryContains", _historyContains) .Pattern("write $value into $slot slot") .HowToDo("WriteSlot", Db.Container.EvaluateCallArgsSpan("WriteSlot", _writeSlot, "$value", "$slot")) .Pattern("$slot slot is filled") .IsTrue("IsSlotFilled", _isSlotFilled) .Pattern("use $replacement instead of $pattern in output") .HowToDo("OutputChanger", _outputChanger) .Pattern("$something can be an answer") .IsTrue("CanBeAnswer", e => { var result = e.Query("$something", Question.CanItBeAnswer).FirstOrDefault(); var canBeAnswer = result == null || result.Answer == Database.YesAnswer; return(canBeAnswer ? SemanticItem.Yes : SemanticItem.No); }) .Pattern("execute $something") .HowToDo("Execute", e => { var something = e.EvaluateOne("$something"); return(something); }) .Pattern("~ $something") .IsTrue("Not", _notCond) .Pattern("$value1 or $value2") .IsTrue("Or", _orCond) .Pattern("$action1 and $action2") .HowToDo("And", _and) .Pattern("$value1 and $value2") .IsTrue("And", _andCond) .Pattern("$something has $question question specified") .IsTrue("IsQuestionSpecified", e => { var something = e.EvaluateOne("$something"); var question = e.GetSubstitutionValue("$question"); var normalizedQuestion = question + " $@ ?"; var queryItem = SemanticItem.AnswerQuery(normalizedQuestion, Constraints.WithInput(something.Answer)); var result = Db.Query(queryItem); var answer = result.Any() ? Database.YesAnswer : Database.NoAnswer; return(SemanticItem.Entity(answer)); }) .Pattern("add $action to trigger $trigger") .HowToDo("TriggerAdd", _triggerAdd) .Pattern("fire event $event") .HowToDo("FireEvent", _fireEvent) .Pattern("$something joined with $something2") .HowToEvaluate("JoinPhrases", _joinPhrases) .Pattern("dump database") .HowToDo("DumpDatabase", c => { Log.Dump(Db); Print("ok"); return(true); }) ; _commandControl = new CommandControlModule(this); _adviceModule = new AdviceModule(this); AddModule(_commandControl); AddModule(_adviceModule); }