Esempio n. 1
0
        public void TrainAgentTest()
        {
            var rasa = new RasaAi();

            rasa.LoadAgent(BOT_ID);
            rasa.Train();
        }
Esempio n. 2
0
        public string Restore([FromRoute] string agentId)
        {
            var rasa = new RasaAi(dc);

            rasa.agent = rasa.LoadAgentById(dc, agentId);
            return(rasa.TrainWithoutContext());
        }
Esempio n. 3
0
        public void YayaTest()
        {
            var config = new AIConfiguration(BOT_CLIENT_TOKEN, SupportedLanguage.English);

            config.SessionId = Guid.NewGuid().ToString();

            var rasa = new RasaAi(dc, config);

            // Round 1
            var response = rasa.TextRequest(new AIRequest {
                Query = new String[] { "Hi" }
            });

            Assert.AreEqual(response.Result.Metadata.IntentName, "Wakeup");

            // Round 2
            response = rasa.TextRequest(new AIRequest {
                Query = new String[] { "Voiceweb" }
            });
            Assert.AreEqual(response.Result.Metadata.IntentName, "Wakeup");

            // Round 3
            response = rasa.TextRequest(new AIRequest {
                Query = new String[] { "I'm going to apple store to buy an iPhone." }
            });
            Assert.AreEqual(response.Result.Metadata.IntentName, "Transfer");
            Assert.AreEqual(response.Result.Parameters.First(x => x.Key == "VNS").Value, "Apple Store");
        }
Esempio n. 4
0
        public new string Request([FromRoute] string conversationId, [FromRoute] string clientAccessToken, [FromQuery] string text)
        {
            if (clientAccessToken == "50dbb57981654aa1a6bbf24f612f207f")
            {
                var tuling         = new TulingAgent();
                var tulingResponse = tuling.Request(new TulingRequest
                {
                    Perception = new TulingRequestPerception
                    {
                        InputText = new TulingInputText {
                            Text = text
                        }
                    }
                });

                return(tulingResponse.Results.FirstOrDefault(x => x.ResultType == "text").Values.Text);
            }

            var config = new AIConfiguration(clientAccessToken, SupportedLanguage.English);

            config.SessionId = conversationId;

            var rasa = new RasaAi(dc, config);

            var aIResponse = rasa.TextRequest(new AIRequest {
                Query = new String[] { text }
            });

            var speeches = new List <String>();

            for (int messageIndex = 0; messageIndex < aIResponse.Result.Fulfillment.Messages.Count; messageIndex++)
            {
                var    message = JObject.FromObject(aIResponse.Result.Fulfillment.Messages[messageIndex]);
                string type    = message["Type"].ToString();

                if (type == "0")
                {
                    string speech = message["Speech"].ToString();
                    //string filePath = await polly.Utter(speech, env.WebRootPath, voiceId);
                    //polly.Play(filePath);

                    speeches.Add(speech);
                }
                else if (type == "4")
                {
                    /*var payload = JsonConvert.DeserializeObject<CustomPayload>(message["payload"].ToString());
                     * if (payload.Task == "delay")
                     * {
                     *  await Task.Delay(int.Parse(payload.Parameters.First().ToString()));
                     * }
                     * else if (payload.Task == "voice")
                     * {
                     *  voiceId = VoiceId.FindValue(payload.Parameters.First().ToString());
                     * }*/
                }
            }

            return(string.Join(".", speeches));
        }
Esempio n. 5
0
        public void TextRequest()
        {
            var config = new AIConfiguration(BOT_CLIENT_TOKEN, SupportedLanguage.English);

            config.SessionId = Guid.NewGuid().ToString();

            var rasa = new RasaAi(dc, config);
        }
Esempio n. 6
0
        public string Train([FromRoute] string agentId)
        {
            var rasa = new RasaAi(dc);

            rasa.agent = rasa.LoadAgentById(dc, agentId);
            rasa.Train();

            return("Training Completed");
        }
Esempio n. 7
0
        public String Create([FromBody] Agent agent)
        {
            var rasa = new RasaAi(dc, null);

            dc.DbTran(() => {
                rasa.SaveAgent(agent);
            });

            return agent.Id;
        }
Esempio n. 8
0
 public void UpdateAgentTest()
 {
     var agent = new Agent
     {
         Id       = BOT_ID,
         Language = "en"
     };
     var rasa = new RasaAi();
     //int row = dc.DbTran(() => rasa.agent.SaveAgent(dc));
 }
Esempio n. 9
0
 public void CreateAgentTest()
 {
     var agent = new Agent
     {
         Id       = BOT_ID,
         Language = "en",
         UserId   = Guid.NewGuid().ToString()
     };
     var rasa = new RasaAi();
     //int row = dc.DbTran(() => rasa.agent.SaveAgent(dc));
 }
Esempio n. 10
0
        public void RestoreAgentFromDialogflowToRasaTest()
        {
            string dataPath           = AppDomain.CurrentDomain.GetData("DataPath").ToString();
            var    botsHeaderFilePath = Path.Join(dataPath, "DbInitializer", $"Agents{Path.DirectorySeparatorChar}agents.json");
            var    agents             = JsonConvert.DeserializeObject <List <AgentImportHeader> >(File.ReadAllText(botsHeaderFilePath));

            agents.ForEach(agentHeader => {
                var rasa = new RasaAi();
                rasa.RestoreAgent <AgentImporterInDialogflow>(agentHeader);
            });
        }
Esempio n. 11
0
        public void UpdateAgentTest()
        {
            var agent = new Agent
            {
                Id       = BOT_ID,
                Name     = BOT_NAME,
                Language = "en"
            };
            var rasa = new RasaAi(dc);

            int row = dc.DbTran(() => rasa.SaveAgent(agent));
        }
Esempio n. 12
0
        public void RestoreAgentTest()
        {
            var rasa     = new RasaAi(dc);
            var importer = new AgentImporterInDialogflow();

            var agent = rasa.RestoreAgent(importer, BOT_NAME);

            agent.Id = BOT_ID;
            agent.ClientAccessToken    = BOT_CLIENT_TOKEN;
            agent.DeveloperAccessToken = BOT_DEVELOPER_TOKEN;

            int row = dc.DbTran(() => rasa.SaveAgent(agent));
        }
Esempio n. 13
0
        public void TrainAgentTest()
        {
            var config = new AIConfiguration(BOT_CLIENT_TOKEN, SupportedLanguage.English);

            config.SessionId = Guid.NewGuid().ToString();

            var rasa = new RasaAi(dc, config);

            rasa.agent = rasa.LoadAgent();
            string msg = rasa.Train(dc);

            Assert.IsTrue(!String.IsNullOrEmpty(msg));
        }
Esempio n. 14
0
        public IActionResult CreateIntent([FromRoute] string agentId, [FromBody] VmIntentDetail vmIntent)
        {
            if (agentId != vmIntent.AgentId)
            {
                return(BadRequest("AgentId is not matched with intent agentId."));
            }

            var agent  = new RasaAi(dc).LoadAgentById(dc, agentId);
            var intent = vmIntent.ToIntent();

            dc.DbTran(() => {
                intent.Id = agent.CreateIntent(dc, intent);
            });

            return(Ok(intent.Id));
        }
Esempio n. 15
0
        private void ImportChatbot(Database dc, AgentMeta meta)
        {
            var rasa     = new RasaAi(dc);
            var importer = new AgentImporterInDialogflow();

            string dataDir = $"{Database.ContentRootPath}{Path.DirectorySeparatorChar}App_Data{Path.DirectorySeparatorChar}Agents";
            var    agent   = rasa.RestoreAgent(importer, meta.Name, dataDir);

            agent.Id                   = meta.Id;
            agent.UserId               = meta.UserId ?? AiBot.BUILTIN_USER_ID;
            agent.ClientAccessToken    = meta.ClientAccessToken;
            agent.DeveloperAccessToken = meta.DeveloperAccessToken;
            rasa.agent                 = agent;

            rasa.agent.SaveAgent(dc);
        }
Esempio n. 16
0
        public VmIntentDetail GetIntentById([FromRoute] string intentId)
        {
            var agent  = new RasaAi(dc);
            var intent = agent.GetIntent(dc, intentId);
            var vm     = new VmIntentDetail
            {
                Id        = intent.Id,
                AgentId   = intent.AgentId,
                Name      = intent.Name,
                Events    = new List <string>(),
                Contexts  = intent.Contexts.Select(x => x.Name).ToList(),
                UserSays  = intent.UserSays.Select(x => x.ToObject <VmIntentExpression>()).ToList(),
                Responses = intent.Responses.Select(x => VmIntentResponse.FromIntentResponse(x)).ToList()
            };

            return(vm);
        }
Esempio n. 17
0
        public void AppleStoreTest()
        {
            var config = new AIConfiguration(BOT_CLIENT_TOKEN, SupportedLanguage.English);

            config.SessionId = Guid.NewGuid().ToString();

            var rasa = new RasaAi(dc, config);

            // Round 1
            var response = rasa.TextRequest(new AIRequest {
                Query = new String[] { "Hi" }
            });

            Assert.AreEqual(response.Result.Metadata.IntentName, "Default Fallback Intent");

            // Round 2
            response = rasa.TextRequest(new AIRequest {
                Query = new String[] { "I want to buy an iPhone 10" }
            });
            Assert.AreEqual(response.Result.Metadata.IntentName, "Buy iPhone");
            Assert.AreEqual(response.Result.Parameters.First(x => x.Key == "iPhone").Value, "iPhone 10");
            Assert.AreEqual(response.Result.Contexts.FirstOrDefault(x => x.Name == "askshippingaddress").Lifespan, 5);

            // ask shipping address
            response = rasa.TextRequest(new AIRequest {
                Query = new String[] { "1787 Orchard Ln, Northfield, IL 60093" }
            });
            Assert.AreEqual(response.Result.Metadata.IntentName, "Telling Shipping Address");
            //Assert.AreEqual(response.Result.Parameters.FirstOrDefault(x => x.Key == "address").Value, "");

            // ask if payment
            response = rasa.TextRequest(new AIRequest {
                Query = new String[] { "Yes" }
            });
            Assert.AreEqual(response.Result.Metadata.IntentName, "Place work order");
            //Assert.AreEqual(response.Result.Parameters.FirstOrDefault(x => x.Key == "VNS").Value, "Apple Store");

            // end conversation
            response = rasa.TextRequest(new AIRequest {
                Query = new String[] { "Have a good one" }
            });
            Assert.AreEqual(response.Result.Metadata.IntentName, "Default Fallback Intent");
        }
Esempio n. 18
0
        public IActionResult UpdateIntent([FromRoute] string intentId, [FromBody] VmIntentDetail vmIntent)
        {
            var agent = new RasaAi(dc);

            dc.DbTran(() => {
                var intent = agent.GetIntent(dc, intentId);

                // remove
                var originalIntent = dc.Table <Intent>().Find(intentId);
                dc.Table <Intent>().Remove(originalIntent);
                dc.SaveChanges();

                // add back
                intent             = vmIntent.ToIntent(intent);
                intent.UpdatedTime = DateTime.UtcNow;

                dc.Table <Intent>().Add(intent);
            });

            return(Ok(intentId));
        }
Esempio n. 19
0
        public async Task <ActionResult <String> > Train([FromBody] RasaTrainRequestModel request, [FromQuery] string project)
        {
            var trainer = new BotTrainer();

            if (String.IsNullOrEmpty(request.Project))
            {
                request.Project = project;
            }

            // save corpus to agent dir
            var projectPath = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects");
            var dataPath    = Path.Combine(projectPath, project);
            var agentPath   = Path.Combine(dataPath, "Temp");

            if (!Directory.Exists(agentPath))
            {
                Directory.CreateDirectory(agentPath);
            }

            var fileName = Path.Combine(agentPath, "corpus.json");

            System.IO.File.WriteAllText(fileName, JsonConvert.SerializeObject(request.Corpus, new JsonSerializerSettings
            {
                Formatting        = Formatting.Indented,
                NullValueHandling = NullValueHandling.Ignore,
                ContractResolver  = new CamelCasePropertyNamesContractResolver()
            }));

            var bot   = new RasaAi();
            var agent = bot.LoadAgentFromFile <AgentImporterInRasa>(agentPath,
                                                                    new AgentImportHeader
            {
                Id   = request.Project,
                Name = project
            });

            var info = await trainer.Train(agent);

            return(Ok(new { info = info.Model }));
        }
Esempio n. 20
0
        public new VmTestPayload Test([FromRoute] string conversationId, [FromQuery] string text)
        {
            string agentId           = dc.Table <Conversation>().Find(conversationId).AgentId;
            string clientAccessToken = dc.Table <Agent>().Find(agentId).ClientAccessToken;

            var config = new AIConfiguration(clientAccessToken, SupportedLanguage.English);

            config.SessionId = conversationId;

            var rasa = new RasaAi(dc, config);

            var aIResponse = rasa.TextRequest(new AIRequest {
                Query = new String[] { text }
            });

            // redirect to third-part api when get fallback intent
            if (aIResponse.Result.Metadata.IntentName == "Default Fallback Intent")
            {
                var apiAi         = new ApiAiSDK.ApiAi(new ApiAiSDK.AIConfiguration("d018bf12a8a8419797fe3965637389b0", ApiAiSDK.SupportedLanguage.English));
                var apiAiResponse = apiAi.TextRequest(text);
                aIResponse = apiAiResponse.ToObject <AIResponse>();
            }

            var speeches = new List <String>();

            for (int messageIndex = 0; messageIndex < aIResponse.Result.Fulfillment.Messages.Count; messageIndex++)
            {
                var    message = JObject.FromObject(aIResponse.Result.Fulfillment.Messages[messageIndex]);
                string type    = (message["Type"] ?? message["type"]).ToString();

                if (type == "0")
                {
                    string speech = (message["Speech"] ?? message["speech"]).ToString();
                    //string filePath = await polly.Utter(speech, env.WebRootPath, voiceId);
                    //polly.Play(filePath);

                    speeches.Add(speech);
                }
                else if (type == "4")
                {
                    var payload = (message["Payload"] ?? message["payload"]).ToObject <AIResponseCustomPayload>();
                    if (payload.Task == "delay")
                    {
                        //await Task.Delay(int.Parse(payload.Parameters.First().ToString()));
                    }
                    else if (payload.Task == "voice")
                    {
                        //voiceId = VoiceId.FindValue(payload.Parameters.First().ToString());
                    }
                    else if (payload.Task == "transfer")
                    {
                        // get VNS, query blockchain
                        var vcDriver = new VoicechainDriver(dc);
                        var aName    = vcDriver.GetAName(aIResponse.Result.Parameters["VNS"]);
                    }
                }
            }

            string fulfillmentText = string.Join(".", speeches);

            return(new VmTestPayload
            {
                FulfillmentText = fulfillmentText,
                Payload = aIResponse
            });
        }
 public TrainController(RasaAi <AgentModel> configuration, IPlatformSettings settings)
 {
     builder       = configuration;
     this.settings = settings;
 }
Esempio n. 22
0
        public async Task SendMessage(string conversationId, string text)
        {
            await Clients.Caller.SendAsync("ShowLoading");

            var dc = new DefaultDataContextLoader().GetDefaultDc();

            string agentId           = dc.Table <Conversation>().Find(conversationId).AgentId;
            string clientAccessToken = dc.Table <Agent>().Find(agentId).ClientAccessToken;

            var config = new AIConfiguration(clientAccessToken, SupportedLanguage.English);

            config.SessionId = conversationId;

            var rasa = new RasaAi(dc, config);

            var aIResponse = rasa.TextRequest(new AIRequest {
                Query = new String[] { text }
            });

            // redirect to third-part api when get fallback intent
            if (aIResponse.Result.Metadata.IntentName == "Default Fallback Intent")
            {
                var apiAi         = new ApiAiSDK.ApiAi(new ApiAiSDK.AIConfiguration("d018bf12a8a8419797fe3965637389b0", ApiAiSDK.SupportedLanguage.English));
                var apiAiResponse = apiAi.TextRequest(text);
                aIResponse = apiAiResponse.ToObject <AIResponse>();
            }

            VoicechainResponse <ANameModel> aName = null;
            VoiceId voiceId = dc.Table <AgentVoice>().FirstOrDefault(x => x.AgentId == agentId)?.VoiceId;

            string awsAccessKey = Database.Configuration.GetSection("Aws:AWSAccessKey").Value;
            string awsSecretKey = Database.Configuration.GetSection("Aws:AWSSecretKey").Value;
            var    polly        = new PollyUtter(awsAccessKey, awsSecretKey);

            await Clients.Caller.SendAsync("HideLoading");

            for (int messageIndex = 0; messageIndex < aIResponse.Result.Fulfillment.Messages.Count; messageIndex++)
            {
                await Clients.Caller.SendAsync("ShowLoading");

                await Task.Delay(1000);

                var    message = JObject.FromObject(aIResponse.Result.Fulfillment.Messages[messageIndex]);
                string type    = (message["Type"] ?? message["type"]).ToString();

                if (type == "0")
                {
                    string speech   = (message["Speech"] ?? message["speech"]).ToString();
                    string filePath = await polly.Utter(speech, Database.ContentRootPath, voiceId);

                    //polly.Play(filePath);

                    await Clients.Caller.SendAsync("ReceiveMessage", new VmTestPayload
                    {
                        ConversationId  = conversationId,
                        Sender          = rasa.agent.Name,
                        FulfillmentText = speech,
                        Payload         = aIResponse,
                        AudioPath       = filePath
                    });
                }
                else if (type == "4")
                {
                    var payload = (message["Payload"] ?? message["payload"]).ToObject <AIResponseCustomPayload>();
                    if (payload.Task == "delay")
                    {
                        await Task.Delay(int.Parse(payload.Parameters.First().ToString()));
                    }
                    else if (payload.Task == "voice")
                    {
                        //voiceId = VoiceId.FindValue(payload.Parameters.First().ToString());
                    }
                    else if (payload.Task == "terminate")
                    {
                        if (rasa.agent.Id == "fd9f1b29-fed8-4c68-8fda-69ab463da126")
                        {
                            continue;
                        }

                        // update conversation agent id back to Voiceweb
                        dc.DbTran(() => {
                            var conversation     = dc.Table <Conversation>().Find(conversationId);
                            conversation.AgentId = "fd9f1b29-fed8-4c68-8fda-69ab463da126";
                        });

                        await Clients.Caller.SendAsync("Transfer", new VmTestPayload
                        {
                            ConversationId  = conversationId,
                            Sender          = "Voiceweb",
                            FulfillmentText = "Hi",
                            Payload         = aIResponse
                        });
                    }
                    else if (payload.Task == "transfer")
                    {
                        // get VNS, query blockchain
                        var vcDriver = new VoicechainDriver(dc);
                        aName = vcDriver.GetAName(aIResponse.Result.Parameters["VNS"]);

                        // sending feedback when do querying blockchain
                        await Clients.Caller.SendAsync("SystemNotification", new VmTestPayload
                        {
                            ConversationId  = conversationId,
                            Sender          = rasa.agent.Name,
                            FulfillmentText = $"Querying VNS {aName.Data.Domain} on Blockchain: IP - {aName.Data.Value}. <a href='http://www.voicecoin.net/tx/{aName.Data.Txid}' target='_blank' style='color:white;'>View Transaction</a>",
                            Payload         = aName
                        });

                        // switch to another agent
                        var newAgent = (from vns in dc.Table <VnsTable>()
                                        join agent in dc.Table <Agent>() on vns.AgentId equals agent.Id
                                        select new
                        {
                            agent.Id,
                            agent.Name,
                            vns.Domain
                        })
                                       .FirstOrDefault(x => x.Domain == aName.Data.Domain);

                        // update conversation agent id to new agent
                        dc.DbTran(() => {
                            var conversation     = dc.Table <Conversation>().Find(conversationId);
                            conversation.AgentId = newAgent.Id;
                        });

                        await Clients.Caller.SendAsync("Transfer", new VmTestPayload
                        {
                            ConversationId  = conversationId,
                            Sender          = newAgent.Name,
                            FulfillmentText = "Hi",
                            Payload         = aName
                        });
                    }
                }

                await Clients.Caller.SendAsync("HideLoading");
            }
        }
Esempio n. 23
0
 public Agent Get([FromRoute] String id)
 {
     var console = new RasaAi(dc, null);
     return console.LoadAgent();
 }
 /// <summary>
 /// Initialize dialog controller and get a platform instance
 /// </summary>
 /// <param name="platform"></param>
 public ParseController(RasaAi <AgentModel> configuration)
 {
     builder = configuration;
 }