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 DataContainer Add(string[] patterns, string question, string answer)
 {
     foreach (var pattern in patterns)
     {
         Add(SemanticItem.From(question, answer, Constraints.WithInput(pattern)));
     }
     return(this);
 }
Esempio n. 3
0
        internal SemanticItem ChooseOption(string question, IEnumerable <string> columns)
        {
            if (columns.Contains(_inputValue))
            {
                return(SemanticItem.Entity(_inputValue));
            }

            //TODO many strategies can be here
            var result = EvaluationContext.Query(SemanticItem.AnswerQuery(question, Constraints.WithInput(_inputValue)));

            return(result.FirstOrDefault());
        }
Esempio n. 4
0
        private bool executeCommand(SemanticItem command)
        {
            var priorQuestions = Db.CurrentLogRoot.GetQuestions();

            var commandQuery           = SemanticItem.AnswerQuery(Question.HowToDo, Constraints.WithInput(command));
            var commandInterpretations = Db.SpanQuery(commandQuery).ToArray();


            foreach (var interpretation in commandInterpretations)
            {
                if (executeCall(interpretation))
                {
                    //we found a way how to execute the command
                    return(true);
                }
            }

            var postQuestions      = Db.CurrentLogRoot.GetQuestions();
            var executionQuestions = postQuestions.Except(priorQuestions).ToArray();

            _executionQuestions.AddRange(executionQuestions);

            return(false);
        }
Esempio n. 5
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);
        }
Esempio n. 6
0
        internal SemanticItem GetAnswer(string question, string input)
        {
            var query = SemanticItem.AnswerQuery(question, Constraints.WithInput(input));

            return(EvaluationContext.Query(query).LastOrDefault());
        }