public void TrainAgentTest() { var rasa = new RasaAi(); rasa.LoadAgent(BOT_ID); rasa.Train(); }
public string Restore([FromRoute] string agentId) { var rasa = new RasaAi(dc); rasa.agent = rasa.LoadAgentById(dc, agentId); return(rasa.TrainWithoutContext()); }
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"); }
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)); }
public void TextRequest() { var config = new AIConfiguration(BOT_CLIENT_TOKEN, SupportedLanguage.English); config.SessionId = Guid.NewGuid().ToString(); var rasa = new RasaAi(dc, config); }
public string Train([FromRoute] string agentId) { var rasa = new RasaAi(dc); rasa.agent = rasa.LoadAgentById(dc, agentId); rasa.Train(); return("Training Completed"); }
public String Create([FromBody] Agent agent) { var rasa = new RasaAi(dc, null); dc.DbTran(() => { rasa.SaveAgent(agent); }); return agent.Id; }
public void UpdateAgentTest() { var agent = new Agent { Id = BOT_ID, Language = "en" }; var rasa = new RasaAi(); //int row = dc.DbTran(() => rasa.agent.SaveAgent(dc)); }
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)); }
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); }); }
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)); }
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)); }
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)); }
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)); }
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); }
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); }
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"); }
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)); }
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 })); }
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; }
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"); } }
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; }