예제 #1
0
        private async void lnLabelTrainData_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (neuralTree.SelectedNode != null)
            {
                bool isNew     = false;
                var  nodeID    = neuralTree.SelectedNode.Name;
                var  trainData = await DbTrainDataCollection.FindOneById(nodeID);

                if (trainData == null)
                {
                    trainData = new NeuraTrainDataModel {
                        _id = nodeID, Dataset = new List <string> {
                        }
                    };
                    isNew = true;
                }
                var editor = new ListEditor("Neural train data editor", trainData.Dataset);
                var res    = editor.ShowDialog();
                if (res == DialogResult.OK)
                {
                    trainData.Dataset = editor.Result;
                    if (isNew)
                    {
                        await DbTrainDataCollection.InsertNew(trainData);
                    }
                    else
                    {
                        await DbTrainDataCollection.ReplaceOneById(nodeID, trainData);
                    }
                    lnkTrainData.Text = $"Train data ({trainData.Dataset.Count})";
                }
            }
        }
예제 #2
0
        private async Task FillForm()
        {
            if (neuralTree.SelectedNode != null)
            {
                gbNeuralNodeConfiguration.Enabled = true;

                var node = (NeuralLinkModel)neuralTree.SelectedNode.Tag;
                tbId.Text            = node._id;
                tbName.Text          = node.Name;
                tbTitle.Text         = node.Title;
                tbQuestionTitle.Text = node.QuestionTitle;
                tbDescription.Text   = node.Description;

                SetExpressionType(node);

                var nodeID    = neuralTree.SelectedNode.Name;
                var trainData = await DbTrainDataCollection.FindOneById(nodeID);

                string state = (trainData != null ? trainData.Dataset.Count.ToString() : "NA");

                lnkTrainData.Text           = $"Train data ({state})";
                lnkLabels.Text              = $"Edit labels ({(node.Labels == null ? 0 : node.Labels.Count)})";
                lnkNotes.Text               = $"Edit notes ({(node.Notes == null ? 0 : node.Notes.Count)})";
                lnkNeuralExpression.Enabled = node.NeuralExp != null;
            }
            else
            {
                ResetForm();
            }
        }
예제 #3
0
        private async Task UpdateTrainModelLabelTextAsync()
        {
            lnkTrainModel.Text = await GetTrainModelText();

            var trainDataCount = await DbTrainDataCollection.Find(i => true).CountDocumentsAsync();

            lnkTrainModel.Enabled = trainDataCount > 1;
        }
        /// <summary>
        /// Load data from DB.
        /// </summary>
        /// <returns></returns>
        public override List <NeuralTrainInput> LoadData()
        {
            List <NeuralTrainInput> result = new List <NeuralTrainInput>();

            DbTrainDataCollection.Find(exp => true).ToList()
            .ForEach(trainData => trainData.Dataset
                     .ForEach(text => result.Add(new NeuralTrainInput {
                _id = trainData._id, Text = text
            })
                              ));
            return(result);
        }
예제 #5
0
        private async void lnkTrainModel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            var count = await DbTrainDataCollection.Find(i => true).CountDocumentsAsync();

            if (count > 1)
            {
                cbxDataBases.Enabled            = false;
                cbxChatProfiles.Enabled         = false;
                lnkProgressResultAction.Visible = true;
                lnkProgressResultAction.Enabled = false;
                lnkProgressResultAction.Text    = $"Trainig the model for profile {cbxChatProfiles.SelectedItem}";
                lnkTrainModel.Enabled           = false;
                var location = new FormLocation {
                    Location = Location, Height = Height, Width = Width
                };
                await Task.Run(() =>
                {
                    var loader = new Dialog("Training your data model", "Good things take time!", "Cancel", "Continue editing",
                                            () => new NeuralTrainingEngine().BuildAndSaveModel(), location);
                    loader.ShowDialog();
                }).ConfigureAwait(true);

                lnkTrainModel.Text = await GetTrainModelText();

                var traindataCreated = await CurrentModelFileExists();

                if (traindataCreated)
                {
                    lnkProgressResultAction.Enabled = true;
                    lnkProgressResultAction.Text    = ActionResultDeleteProfile;
                }
                else
                {
                    lnkProgressResultAction.Visible = false;
                }
                lnkTrainModel.Enabled   = true;
                cbxChatProfiles.Enabled = true;
                cbxDataBases.Enabled    = true;
            }
        }
예제 #6
0
        /// <summary>
        /// Call this to create and feed test database
        /// </summary>
        /// <param name="botId"></param>
        /// <param name="dropDatabase"></param>
        /// <param name="profileName"></param>
        /// <returns></returns>
        public async static Task Feed(string botId, bool dropDatabase, string profileName = BotChatProfile.DefaultProfile)
        {
            #region Load Db from Code
            if (dropDatabase)
            {
                await MongoDbProvider.DropDatabase();

                await DbBotCollection.InsertNewOrUpdate(new BotModel { _id = BotAlphaName, Configuration = new BotConfiguration {
                                                                           ActiveProfile = profileName, ChatProfiles = new List <BotChatProfile> {
                                                                           }
                                                                       } });
            }

            await DbBotCollection.AddOrUpdateChatProfileById(BotAlphaName, new BotChatProfile { Name = profileName });

            await DbBotCollection.SetActiveChatProfileById(BotAlphaName, profileName);

            await SyncChatProfile();


            var superRootNode = await DbLinkCollection.InsertNew(new NeuralLinkModel
            {
                Name  = "SuperRoot",
                Notes = new List <string> {
                    "Welcome to philips chatbot mobile device assistant beta version!"
                },
                NeuralExp = new DecisionExpression
                {
                    QuestionTitle  = "Choose the conversation mode:",
                    Hint           = $"Simple:simple,Advanced:{BotResourceKeyConstants.CommandAdvanceChat}",
                    ExpressionTree = ExpressionBuilder.Build().EQ("simple")
                }
            });


            //configure it as bot root node
            await DbBotCollection.SetRootNodeById(botId, superRootNode._id, profileName);



            var nodeSimpleChatMode = await DbLinkCollection.InsertChildById(superRootNode._id, new NeuralLinkModel
            {
                Name  = "SimpleChatNode",
                Title = $"[{BotResourceKeyConstants.WhatIssue}]"
            });

            //Link super root forward action to simple chat mode
            await DbLinkCollection.SetNeuralExpForwardLinkById(superRootNode._id, new ActionLink { Type = LinkType.NeuralLink, LinkId = nodeSimpleChatMode._id });



            var nodeSound = await DbLinkCollection.InsertChildById(nodeSimpleChatMode._id, new NeuralLinkModel
            {
                Name  = "Sound/Speaker",
                Title = $"[{BotResourceKeyConstants.SelectedIssue}]",
                Notes = new List <string> {
                    $"[{BotResourceKeyConstants.WeHelpYou}]", $"[{BotResourceKeyConstants.WhatIssue}]"
                }
            });

            #region sound


            var resourceMute = await DbResourceCollection.InsertNew(new NeuralResourceModel
            {
                Name     = "NoSound",
                IsLocal  = false,
                Type     = ResourceType.Video,
                Location = "https://www.youtube.com/watch?v=8Y8HzSBMujQ",
                Title    = "How to fix sound problem on any android"
            });

            var actionMute = await DbActionCollection.InsertNew(new NeuralActionModel
            {
                Name      = "NoSoundAction",
                Title     = $"[{BotResourceKeyConstants.FoundSolution}]",
                Resources = new List <string> {
                    $"{resourceMute._id}"
                }
            });

            var resourceUnpleasantSound = await DbResourceCollection.InsertNew(new NeuralResourceModel
            {
                Name     = "UnpleasantSound0",
                IsLocal  = false,
                Type     = ResourceType.Video,
                Location = "https://www.youtube.com/watch?v=Y_hEEEt-Rb0",
                Title    = "[Solution] Mobile speaker producing noisy (crackling) sound fixed without​ replacing speaker"
            });

            var resourceUnpleasantSound1 = await DbResourceCollection.InsertNew(new NeuralResourceModel
            {
                Name     = "UnpleasantSound1",
                IsLocal  = false,
                Type     = ResourceType.ImageJPG,
                Location = "https://1.bp.blogspot.com/-74qhJFnbScQ/Xme-O_OkPnI/AAAAAAAADmw/v3iLjmTSBVYoRWH6HVenl5WYrddv2rd2QCLcBGAsYHQ/s320/Samsung%2BGT-E1207T%2BEar%2BSpeaker%2BJumpur%2BSolution.jpg",
                Title    = "[Solution] Mobile speaker producing noisy (crackling) sound fixed without​ replacing speaker"
            });

            var actionUnpleasantSound = await DbActionCollection.InsertNew(new NeuralActionModel
            {
                Name      = "UnpleasantSoundAction",
                Title     = $"[{BotResourceKeyConstants.FoundSolution}]",
                Resources = new List <string> {
                    resourceUnpleasantSound._id, resourceUnpleasantSound1._id
                }
            });

            var resourceCustomerSupport = await DbResourceCollection.InsertNew(new NeuralResourceModel
            {
                Name     = "customersupport ",
                IsLocal  = false,
                Type     = ResourceType.WebsiteUrl,
                Location = "https://www.philips.co.in/c-w/support-home/support-contact-page.html",
                Title    = "Please reach us @support site"
            });

            var actionCustomerSupport = await DbActionCollection.InsertNew(new NeuralActionModel
            {
                Name      = "customersupportAction",
                Title     = $"[{BotResourceKeyConstants.FoundSolution}]",
                Resources = new List <string> {
                    resourceCustomerSupport._id
                }
            });

            var nodeNoSound = await DbLinkCollection.InsertChildById(nodeSound._id, new NeuralLinkModel
            {
                Name  = "No sound",
                Title = "You have selected {Name} category issues!",
                Notes = new List <string> {
                    $"This might help you fixing it!"
                },
                NeuralExp = new DecisionExpression
                {
                    SkipEvaluation = true,
                    ForwardAction  = new ActionLink
                    {
                        Type   = LinkType.ActionLink,
                        LinkId = actionMute._id
                    }
                }
            });

            var nodeUnpleasantSound = await DbLinkCollection.InsertChildById(nodeSound._id, new NeuralLinkModel
            {
                Name      = "Unpleasant sound",
                Title     = $"[{BotResourceKeyConstants.SelectedIssue}]",
                NeuralExp = new DecisionExpression
                {
                    Hint           = "Yes:yes,No:no",
                    QuestionTitle  = "Did your device fall?",
                    ExpressionTree = ExpressionBuilder.Build().EQ("yes"),
                    ForwardAction  = new ActionLink
                    {
                        Type   = LinkType.ActionLink,
                        LinkId = actionUnpleasantSound._id
                    },
                    FallbackAction = new ActionLink
                    {
                        Type   = LinkType.ActionLink,
                        LinkId = actionCustomerSupport._id
                    }
                }
            });;

            #endregion
            var nodeDisplay = await DbLinkCollection.InsertChildById(nodeSimpleChatMode._id, new NeuralLinkModel
            {
                Name  = "Display/Broken screen",
                Title = $"[{BotResourceKeyConstants.SelectedIssue}]",
                Notes = new List <string> {
                    $"[{BotResourceKeyConstants.WeHelpYou}]", $"[{BotResourceKeyConstants.WhatIssue}]"
                }
            });

            #region display

            #endregion
            var nodeBattery = await DbLinkCollection.InsertChildById(nodeSimpleChatMode._id, new NeuralLinkModel
            {
                Name  = "Battery/Charging",
                Title = $"[{BotResourceKeyConstants.SelectedIssue}]",
                Notes = new List <string> {
                    $"[{BotResourceKeyConstants.WeHelpYou}]", $"[{BotResourceKeyConstants.WhatIssue}]"
                }
            });

            //await DbLinkCollection.UnLinkParentChild(nodeSimpleChatMode._id, nodeBattery._id);

            #region battery

            #endregion

            #endregion

            #region resources
            var stringRes = new List <KeyValuePair <string, string> > {
                new KeyValuePair <string, string>(BotResourceKeyConstants.ThankYou, "Thank you, Have a great day!"),
                new KeyValuePair <string, string>(BotResourceKeyConstants.WhatIssue, "What in the following do you need help with?"),
                new KeyValuePair <string, string>(BotResourceKeyConstants.SelectedIssue, "You have selected '{Name}' as your issue."),
                new KeyValuePair <string, string>(BotResourceKeyConstants.WeHelpYou, "Don't worry, we are here to help you."),
                new KeyValuePair <string, string>(BotResourceKeyConstants.CannotMoveBack, "Cannot move back, No history recorded yet."),
                new KeyValuePair <string, string>(BotResourceKeyConstants.Error, "Encountered an error while processing request, please contact bot administrator."),
                new KeyValuePair <string, string>(BotResourceKeyConstants.FoundSolution, "Here, we found few matching solutions"),
                new KeyValuePair <string, string>(BotResourceKeyConstants.InvalidInput, "Invalid input, please try again."),
                new KeyValuePair <string, string>(BotResourceKeyConstants.ThankYouFeedback, "Thanks for your feedback."),
                new KeyValuePair <string, string>(BotResourceKeyConstants.StartAgain, "Facing another issue?:start"),
                new KeyValuePair <string, string>(BotResourceKeyConstants.AdvanceChatQuery, "Tell us about your issue:"),
                new KeyValuePair <string, string>(BotResourceKeyConstants.NoMatchFound, "No match found, try again in different words."),
                new KeyValuePair <string, string>(BotResourceKeyConstants.Feedback, "Please help us improve our service, Was the solution helpful?"),

                new KeyValuePair <string, string>(BotResourceKeyConstants.FeedBackOptions, "Yes:yes,No:no,Exit:exit"),
                new KeyValuePair <string, string>(BotResourceKeyConstants.CommonActionOptions, "Back:back,Exit:exit")
            };

            await DbBotCollection.AddStringResourceBatchById(botId, stringRes);

            #endregion

            #region ML model test data
            var speakerTrainModel = new NeuraTrainDataModel
            {
                _id     = nodeSound._id,
                Dataset = new List <string> {
                    "Speaker is not working",
                    "Mobile sound issue",
                    "No sound",
                    "Unpleasant sound from speaker",
                    "Cant hear sound",
                    "Noisy music"
                }
            };

            await DbTrainDataCollection.InsertNew(speakerTrainModel);

            var displayTrainModel = new NeuraTrainDataModel
            {
                _id     = nodeDisplay._id,
                Dataset = new List <string> {
                    "Display is not working",
                    "Mobile display issue",
                    "Broken screen",
                    "Screen cracked",
                    "Lines on display",
                    "Issue with mobile display"
                }
            };

            await DbTrainDataCollection.InsertNew(displayTrainModel);

            #endregion
        }
예제 #7
0
        private async void actionMenu_Clicked(object sender, ToolStripItemClickedEventArgs e)
        {
            var clicked = e.ClickedItem.AccessibilityObject.Name;
            {
                if (neuralTree.SelectedNode != null)
                {
                    switch (clicked)
                    {
                    case MenuActionNew:
                    {
                        var newNode = await DbLinkCollection.InsertChildById(neuralTree.SelectedNode.Name, new NeuralLinkModel { Name = "New node" });

                        var newTreeNode = neuralTree.SelectedNode.Nodes.Add(newNode._id, newNode.Name);
                        newTreeNode.Tag         = newNode;
                        neuralTree.SelectedNode = newTreeNode;
                        ReloadTree();
                    }
                    break;

                    case MenuActionDelete:
                    {
                        if (DataProviders.ConfirmDialog($"Do you want to permanently delete node '{neuralTree.SelectedNode.Text}'?\n\n" +
                                                        $"Warning: This will also deletes from all the references to this node in other parent nodes of this.\n\n" +
                                                        $"Note: Refresh tree to view the updated changes.", "MenuActionDelete confirmation", MessageBoxIcon.Warning))
                        {
                            var node = (NeuralLinkModel)neuralTree.SelectedNode.Tag;
                            await DbLinkCollection.RemoveAndUnlinkFromParents(node);

                            await DbTrainDataCollection.RemoveOneById(node._id);

                            neuralTree.SelectedNode.Remove();
                            ReloadTree();
                        }
                    }
                    break;

                    case MenuActionMapChild:
                    {
                        var selectedNode = (NeuralLinkModel)neuralTree.SelectedNode.Tag;
                        var picker       = new NodePicker(LinkType.NeuralLink, selectedNode._id, $"Map child to : {selectedNode.Name}");
                        var res          = picker.ShowDialog();
                        if (res == DialogResult.OK && picker.NodeId != selectedNode._id)
                        {
                            var node = await DbLinkCollection.FindOneById(picker.NodeId);

                            if (node != null)
                            {
                                await DbLinkCollection.LinkParentChild(selectedNode._id, picker.NodeId);

                                var newTreeNode = neuralTree.SelectedNode.Nodes.Add(node._id, node.Name);
                                newTreeNode.Tag = node;
                                ReloadTree();
                            }
                        }
                    }
                    break;

                    case MenuActionUnmapChild:
                    {
                        if (neuralTree.SelectedNode.Parent == null)
                        {
                            await DbBotCollection.SetRootNodeById(BotAlphaName, null, cbxChatProfiles.Text);
                        }
                        else
                        {
                            await DbLinkCollection.UnLinkParentChild(neuralTree.SelectedNode.Parent.Name, neuralTree.SelectedNode.Name);

                            neuralTree.SelectedNode.Remove();
                        }
                        ReloadTree();
                    }
                    break;

                    default:
                        break;
                    }
                }

                switch (clicked)
                {
                case MenuActionRenameProfile:
                    await RenameChatProfile();

                    break;

                case MenuActionDeleteProfile:
                    await DeleteCurrentChatProfile();

                    break;

                case MenuActionNewProfile:
                    await CreateNewChatProfile();

                    break;

                case MenuActionNew:
                {
                    if (neuralTree.Nodes.Count == 0)
                    {
                        var rootNode = await DbLinkCollection.InsertNew(new NeuralLinkModel { Name = "RootNode" });

                        await DbBotCollection.SetRootNodeById(BotAlphaName, rootNode._id, await DataProviders.GetActiveProfile());

                        neuralTree.ImageList = DataProviders.LoadNeuralLinkValidationImageList();
                        var treeNode = neuralTree.Nodes.Add(rootNode._id, rootNode.Name);
                        treeNode.Tag            = rootNode;
                        treeNode.ImageKey       = rootNode.GetNodeImage();
                        neuralTree.SelectedNode = treeNode;
                        ReloadTree();
                    }
                }
                break;

                default:
                    break;
                }

                neuralTree.ExpandAll();
            }
        }