private 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", project); var modelPath = Path.Combine(projectPath, request.Model); if (!Directory.Exists(modelPath)) { Directory.CreateDirectory(modelPath); } // Save raw data to file, then parse it to Agent instance. var metaFileName = Path.Combine(modelPath, "meta.json"); System.IO.File.WriteAllText(metaFileName, JsonConvert.SerializeObject(new AgentImportHeader { Name = project, Platform = PlatformType.Rasa })); // in order to unify the process. var fileName = Path.Combine(modelPath, "corpus.json"); System.IO.File.WriteAllText(fileName, JsonConvert.SerializeObject(request, new JsonSerializerSettings { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore, ContractResolver = new CamelCasePropertyNamesContractResolver() })); var agent = _platform.LoadAgentFromFile(modelPath); var info = await trainer.Train(agent, new BotTrainOptions { AgentDir = projectPath, Model = request.Model }); return(Ok(new { info = info.Model })); }
public async Task <ModelMetaData> Train(TAgent agent, TrainingCorpus corpus) { string agentDir = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agent.Id); var model = "model_" + DateTime.UtcNow.ToString("yyyyMMdd"); var trainer = new BotTrainer(); agent.Corpus = corpus; var trainOptions = new BotTrainOptions { AgentDir = agentDir, Model = model }; var info = await trainer.Train(agent, trainOptions); return(info); }
public async Task <ActionResult <String> > Train([FromQuery] string agentId) { var trainer = new BotTrainer(); // save corpus to agent dir var projectPath = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agentId); var model = Directory.GetDirectories(projectPath).Where(x => x.Contains("model_")).Last().Split(Path.DirectorySeparatorChar).Last(); string dataDir = Path.Combine(projectPath, model); var agent = _platform.LoadAgentFromFile(dataDir); var info = await trainer.Train(agent, new BotTrainOptions { AgentDir = projectPath, Model = model }); return(Ok(new { info = info })); }
public virtual async Task <ModelMetaData> Train(TAgent agent, TrainingCorpus corpus, BotTrainOptions options) { if (String.IsNullOrEmpty(options.AgentDir)) { options.AgentDir = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agent.Id); } if (String.IsNullOrEmpty(options.Model)) { options.Model = "model_" + DateTime.UtcNow.ToString("yyyyMMdd"); } ModelMetaData meta = null; // train by contexts corpus.UserSays.GroupBy(x => x.ContextHash).Select(g => new { Context = g.Key, Corpus = new TrainingCorpus { Entities = corpus.Entities, UserSays = corpus.UserSays.Where(x => x.ContextHash == g.Key).ToList() } }) .ToList() .ForEach(async c => { var trainer = new BotTrainer(settings); agent.Corpus = c.Corpus; meta = await trainer.Train(agent, new BotTrainOptions { AgentDir = options.AgentDir, Model = options.Model + $"{Path.DirectorySeparatorChar}{c.Context}" }); }); meta.Pipeline.Clear(); meta.Model = options.Model; return(meta); }
public virtual async Task <ModelMetaData> Train(TAgent agent, TrainingCorpus corpus, BotTrainOptions options) { if (String.IsNullOrEmpty(options.AgentDir)) { options.AgentDir = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agent.Id); } if (String.IsNullOrEmpty(options.Model)) { options.Model = "model_" + DateTime.UtcNow.ToString("yyyyMMdd"); } var trainer = new BotTrainer(settings); agent.Corpus = corpus; var info = await trainer.Train(agent, options); return(info); }
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 override async Task Train(BotTrainOptions options) { var trainer = new BotTrainer(Agent.Id, Dc); await trainer.Train(Agent, options); }
public override async Task Train() { agent.Corpus = GetIntentExpressions(); var trainer = new BotTrainer(agent.Id, dc); await trainer.Train(agent); }