示例#1
0
 public OpenShift(CUIController controller, CancellationToken ct) : base("OpenShift", new SnipsNLUEngine(Path.Combine("Engines", "openshift")), controller, ct)
 {
     Intents.Add("list", List);
     Intents.Add("page", Page);
     MenuHandlers["OPENSHIFT_OBJECTS"]              = GetOpenShiftMenuSelection;
     MenuIndexes["OPENSHIFT_OBJECTS"]               = 5;
     ItemsDescriptionHandlers["OPENSHIFT_PODS"]     = DescribePods;
     ItemsDescriptionHandlers["OPENSHIFT_PROJECTS"] = DescribeProjects;
     ItemsDescriptionHandlers["OPENSHIFT_BUILDS"]   = DescribeBuilds;
     ApiUrl   = Config("CUI_VISH_OPENSHIFT_URL");
     ApiToken = Config("CUI_VISH_OPENSHIFT_TOKEN");
     if (!string.IsNullOrEmpty(ApiToken) && !string.IsNullOrEmpty(ApiUrl))
     {
         var handler = new HttpClientHandler {
         };
         Client      = new OpenShiftAPIwithKubernetes(new Uri(ApiUrl), new TokenCredentials(ApiToken), handler);
         Initialized = true;
     }
     else if (string.IsNullOrEmpty(ApiUrl))
     {
         SayErrorLine("I could not determine your OpenShift API URL. Please ensure the value exists in your config.json configuration file or as the environment variable {0}.", "CUI_VISH_OPENSHIFT_URL");
     }
     else if (string.IsNullOrEmpty(ApiToken))
     {
         SayErrorLine("I could not determine your OpenShift service API token. Please ensure the value exists in your config.json configuration file or as the environment variable {0}.", "CUI_VISH_OPENSHIFT_TOKENs");
     }
 }
示例#2
0
 public Package(string name, NLUEngine engine, Controller controller, CancellationToken ct, params Package[] subPackages) : base(ct)
 {
     Name       = name;
     NLUEngine  = engine;
     Controller = controller;
     Intents.Add("info", Info);
     Intents.Add("help", Help);
     Intents.Add("menu", Menu);
     Intents.Add("enable", Enable);
     Intents.Add("disable", Disable);
     Intents.Add("back", Back);
     Intents.Add("page", Page);
     Intents.Add("list", List);
     if (subPackages != null && subPackages.Length > 0)
     {
         SubPackages = subPackages.ToList();
     }
     foreach (var vn in VariableNames)
     {
         Variables.Add(Prefixed(vn), null);
     }
     foreach (var i in ItemNames)
     {
         Items.Add(Prefixed(i), null);
     }
     foreach (var m in MenuNames)
     {
         Menus.Add(Prefixed(m), null);
     }
 }
示例#3
0
 public CUIPackage(string name, NLUEngine engine, CUIController controller, CancellationToken ct, params CUIPackage[] subPackages) : base(ct)
 {
     Name       = name;
     NLUEngine  = engine;
     Controller = controller;
     Intents.Add("help", Help);
     Intents.Add("menu", Menu);
     if (subPackages != null && subPackages.Length > 0)
     {
         SubPackages = subPackages.ToList();
     }
     foreach (var vn in VariableNames)
     {
         Variables.Add(Prefixed(vn), null);
     }
     foreach (var i in ItemNames)
     {
         Items.Add(Prefixed(i), null);
         ItemsPageSize.Add(Prefixed(i), 10);
         ItemsCurrentPage.Add(Prefixed(i), 1);
         ItemsSelection.Add(Prefixed(i), -1);
         ItemsDescriptionHandlers.Add(Prefixed(i), null);
     }
     foreach (var m in MenuNames)
     {
         MenuHandlers.Add(Prefixed(m), null);
         MenuIndexes.Add(Prefixed(m), 0);
     }
 }
示例#4
0
 public MedTracker(CUIController controller, CancellationToken ct) : base("Vish", new SnipsNLUEngine(Path.Combine("Engines", "vish")), controller, ct)
 {
     Intents.Add("launch", Launch);
     MenuIndexes["VISH_PACKAGES"]  = 3;
     MenuHandlers["VISH_PACKAGES"] = GetPackagesMenuItem;
     Initialized = NLUEngine.Initialized;
 }
 internal void AddIntent(MatchIntentAndEntities intent, DialogVariablesSimulator dialogVariables)
 {
     if (!Intents.ContainsKey(intent.Name))
     {
         Intents.Add(intent.Name, intent);
         dialogVariables.AddMatchIntentAndEntities(intent);
     }
     else
     {
         var otherIntent = Intents[intent.Name];
         LogMessage(intent.LineNumber, MessageType.DuplicateKey, "Two intent matching nodes found for intent \"" + intent.Name + "\" : line " + intent.LineNumber + " and line " + otherIntent.LineNumber);
     }
 }
示例#6
0
        internal void Optimize()
        {
            var thisHash       = GetHashCode();
            var allContexts    = GetChildContexts();
            var defsByHashCode = allContexts.Where(g => g.Value.Count > 1 &&
                                                   (g.Value.Context.Intents.Count != 1 ||
                                                    !(g.Value.Context.Intents[0] is TypeIntent)))
                                 .ToDictionary(g => g.Key, g => g.Value.Context);

            var currentNames      = new List <string>();
            var defs              = new Dictionary <string, SchemaGeneratorContext>();
            var contextContainers = GetNestedContainers().ToList();

            foreach (var def in defsByHashCode)
            {
                var name       = def.Value.GetDefName(currentNames);
                var refIntent  = new RefIntent(new Uri(def.Key == thisHash ? "#" : $"#/$defs/{name}", UriKind.Relative));
                var refContext = new SchemaGeneratorContext(def.Value.Type, null !, Configuration);
                refContext.Intents.Add(refIntent);
                foreach (var intent in contextContainers)
                {
                    intent.Replace(def.Key, refContext);
                }
                if (def.Key == thisHash)
                {
                    continue;
                }
                defs[name] = def.Value;
            }

            if (defs.Any())
            {
                var defsIntent = new DefsIntent(defs);
                Intents.Add(defsIntent);
            }
        }
示例#7
0
        private (Intent intent, double score) ProcessUserInput()
        {
            var intentScore = new Microsoft.Bot.Builder.IntentScore
            {
                Score      = 0.9909704,
                Properties = new Dictionary <string, object>()
            };

            switch (UserInput.ToLower())
            {
            case "set temperature to 21 degrees":
                Entities.SETTING = new string[] { "temperature" };
                Entities.AMOUNT  = new string[] { "21" };
                Entities.UNIT    = new string[] { "degrees" };
                break;

            case "increase temperature by 2":
                Entities.VALUE   = new string[] { "increase" };
                Entities.SETTING = new string[] { "temperature" };
                Entities.TYPE    = new string[] { "by" };
                Entities.AMOUNT  = new string[] { "2" };
                break;

            case "increase temperature to 24":
                Entities.VALUE   = new string[] { "increase" };
                Entities.SETTING = new string[] { "temperature" };
                Entities.AMOUNT  = new string[] { "24" };
                break;

            case "change the temperature":
                Entities.SETTING = new string[] { "temperature" };
                break;

            case "turn lane assist off":
                Entities.SETTING = new string[] { "lane assist" };
                Entities.VALUE   = new string[] { "off" };
                break;

            case "warm up the back of the car":
                Entities.SETTING = new string[] { "back" };
                Entities.VALUE   = new string[] { "warm up" };
                break;

            case "defog my windshield":
                Entities.VALUE = new string[] { "defog" };
                break;

            case "put the air on my feet":
                Entities.SETTING = new string[] { "air" };
                Entities.VALUE   = new string[] { "feet" };
                break;

            case "turn off the ac":
                Entities.SETTING = new string[] { "ac" };
                Entities.VALUE   = new string[] { "off" };
                break;

            case "increase forward automatic braking to 50%":
                Entities.SETTING = new string[] { "forward automatic braking" };
                Entities.VALUE   = new string[] { "increase" };
                Entities.AMOUNT  = new string[] { "50" };
                Entities.UNIT    = new string[] { "%" };
                break;

            case "i'm feeling cold":
                Entities.VALUE = new string[] { "cold" };
                Intents.Add(Intent.VEHICLE_SETTINGS_DECLARATIVE, intentScore);
                break;

            case "it's feeling cold in the back":
                Entities.SETTING = new string[] { "back" };
                Entities.VALUE   = new string[] { "cold" };
                Intents.Add(Intent.VEHICLE_SETTINGS_DECLARATIVE, intentScore);
                break;

            case "adjust equalizer":
                Entities.SETTING = new string[] { "equalizer" };
                break;

            case "change pedestrian detection":
                Entities.SETTING = new string[] { "pedestrian detection" };
                break;

            default:
                return(Intent.None, 0.0);
            }

            // Default is setting change apart from declarative used occasionally above
            if (Intents.Count == 0)
            {
                Intents.Add(Intent.VEHICLE_SETTINGS_CHANGE, intentScore);
            }

            return(TopIntent());
        }
        // update constants in Suggestion database to current version defined in WorkflowConstants
        public bool VersionConstants(string me)
        {
            try
            {
                bool updateDB = false;
                if (Versions.Any(v => v.VersionType == DatabaseVersion.Constants && v.VersionString == WorkflowConstants.ConstantsVersion) == false)
                {   // no database - create and lock the new version entry
                    TraceLog.TraceInfo(String.Format("Suggestions database version {0} not found", WorkflowConstants.ConstantsVersion));

                    // remove any existing database version (there should never be more than one)
                    foreach (var existingVersion in Versions.Where(v => v.VersionType == DatabaseVersion.Constants).ToList())
                    {
                        Versions.Remove(existingVersion);
                    }
                    SaveChanges();

                    // create the new version entry
                    DatabaseVersion ver = new DatabaseVersion()
                    {
                        VersionType   = DatabaseVersion.Constants,
                        VersionString = WorkflowConstants.ConstantsVersion,
                        Status        = me
                    };
                    Versions.Add(ver);
                    SaveChanges();
                    updateDB = true;
                }
                else
                {
                    var dbVersion = Versions.Single(v => v.VersionType == DatabaseVersion.Constants && v.VersionString == WorkflowConstants.ConstantsVersion);
                    if (dbVersion.Status == DatabaseVersion.Corrupted)
                    {   // try to update the database again - take a lock
                        TraceLog.TraceInfo("Suggestions database corrupted");
                        dbVersion.Status = me;
                        SaveChanges();
                        updateDB = true;
                    }
                }
                if (updateDB == false)
                {
                    TraceLog.TraceInfo(String.Format("Suggestions database version {0} is up to date", WorkflowConstants.ConstantsVersion));
                    return(true);
                }
            }
            catch (Exception ex)
            {
                TraceLog.TraceException("Could not find database version", ex);
                return(false);
            }

            // update the default database values
            DatabaseVersion           version        = null;
            SuggestionsStorageContext versionContext = Storage.NewSuggestionsContext;

            try
            {   // verify that this unit of execution owns the update lock for the database version
                version = versionContext.Versions.Single(v => v.VersionType == DatabaseVersion.Constants && v.VersionString == WorkflowConstants.ConstantsVersion);
                if (version.Status != me)
                {
                    return(true);
                }

                TraceLog.TraceInfo(String.Format("{0} updating Suggestions database to version {1}", me, WorkflowConstants.ConstantsVersion));

                // remove existing intents
                foreach (var entity in Intents.ToList())
                {
                    Intents.Remove(entity);
                }
                var intents = WorkflowConstants.DefaultIntents();
                if (intents == null)
                {
                    TraceLog.TraceError("Could not find or load intents");
                    version.Status = DatabaseVersion.Corrupted;
                    versionContext.SaveChanges();
                    return(false);
                }
                // add current intents
                foreach (var entity in intents)
                {
                    Intents.Add(entity);
                }
                SaveChanges();
                TraceLog.TraceInfo("Replaced intents");

                // remove existing workflow types
                foreach (var entity in WorkflowTypes.ToList())
                {
                    WorkflowTypes.Remove(entity);
                }
                var workflowTypes = WorkflowConstants.DefaultWorkflowTypes();
                if (workflowTypes == null)
                {
                    TraceLog.TraceError("Could not find or load workflow definitions");
                    version.Status = DatabaseVersion.Corrupted;
                    versionContext.SaveChanges();
                    return(false);
                }
                // add current workflow types
                foreach (var entity in workflowTypes)
                {
                    WorkflowTypes.Add(entity);
                }
                SaveChanges();
                TraceLog.TraceInfo("Replaced workflow types");

                // save the new version number
                version.Status = DatabaseVersion.OK;
                versionContext.SaveChanges();

                return(true);
            }
            catch (Exception ex)
            {
                TraceLog.TraceException("VersionConstants failed", ex);
                // mark the version as corrupted
                version.Status = DatabaseVersion.Corrupted;
                versionContext.SaveChanges();
                return(false);
            }
        }