Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }