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})"; } } }
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(); } }
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); }
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; } }
/// <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 }
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(); } }