From 4037160abd67448e953369d2729e9bda8a263b52 Mon Sep 17 00:00:00 2001 From: Oceania2018 Date: Tue, 4 Sep 2018 15:39:51 -0500 Subject: [PATCH] Added RASA and DIALOGFLOW compile condition. --- .../BotSharp.Algorithm.UnitTest.csproj | 4 + BotSharp.Algorithm/BotSharp.Algorithm.csproj | 2 + .../BotSharp.Core.UnitTest.csproj | 2 + BotSharp.Core/Abstractions/IBotPlatform.cs | 2 + BotSharp.Core/BotSharp.Core.csproj | 17 +++ BotSharp.Core/Engines/AgentImportHeader.cs | 2 +- BotSharp.Core/Engines/BotEngineBase.cs | 8 +- .../Dialogflow/AgentImporterInDialogflow.cs | 25 +++ BotSharp.Core/Engines/PlatformType.cs | 14 ++ .../BotSharp.NLP.UnitTest.csproj | 2 + BotSharp.NLP/BotSharp.NLP.csproj | 9 ++ BotSharp.RestApi/BotSharp.RestApi.csproj | 29 +++- BotSharp.RestApi/BotSharp.RestApi.xml | 143 ++++++++++++++++++ .../Dialogflow/QueryController.cs | 50 +++++- .../Dialogflow/TrainController.cs | 59 ++++++++ BotSharp.RestApi/Rasa/ConfigController.cs | 2 +- BotSharp.RestApi/Rasa/ParseController.cs | 2 +- BotSharp.RestApi/Rasa/StatusController.cs | 2 +- BotSharp.RestApi/Rasa/TrainController.cs | 4 +- BotSharp.RestApi/Rasa/VersionController.cs | 2 +- .../App_Data/AgentArchive/Restaurant.zip | Bin 1241 -> 1241 bytes BotSharp.WebHost/BotSharp.WebHost.csproj | 19 ++- BotSharp.WebHost/Program.cs | 2 +- BotSharp.WebHost/Startup.cs | 4 +- BotSharp.sln | 68 ++++----- 25 files changed, 417 insertions(+), 56 deletions(-) create mode 100644 BotSharp.Core/Engines/PlatformType.cs create mode 100644 BotSharp.RestApi/BotSharp.RestApi.xml create mode 100644 BotSharp.RestApi/Dialogflow/TrainController.cs diff --git a/BotSharp.Algorithm.UnitTest/BotSharp.Algorithm.UnitTest.csproj b/BotSharp.Algorithm.UnitTest/BotSharp.Algorithm.UnitTest.csproj index 31d50fa7..437badee 100644 --- a/BotSharp.Algorithm.UnitTest/BotSharp.Algorithm.UnitTest.csproj +++ b/BotSharp.Algorithm.UnitTest/BotSharp.Algorithm.UnitTest.csproj @@ -4,6 +4,10 @@ netcoreapp2.1 false + + Debug;Release;RASA NLU;DIALOGFLOW;RASA + + AnyCPU;x64 diff --git a/BotSharp.Algorithm/BotSharp.Algorithm.csproj b/BotSharp.Algorithm/BotSharp.Algorithm.csproj index 9f5c4f4a..d9135353 100644 --- a/BotSharp.Algorithm/BotSharp.Algorithm.csproj +++ b/BotSharp.Algorithm/BotSharp.Algorithm.csproj @@ -2,6 +2,8 @@ netstandard2.0 + Debug;Release;RASA NLU;DIALOGFLOW;RASA + AnyCPU;x64 diff --git a/BotSharp.Core.UnitTest/BotSharp.Core.UnitTest.csproj b/BotSharp.Core.UnitTest/BotSharp.Core.UnitTest.csproj index 3baff6bd..1874b1a8 100644 --- a/BotSharp.Core.UnitTest/BotSharp.Core.UnitTest.csproj +++ b/BotSharp.Core.UnitTest/BotSharp.Core.UnitTest.csproj @@ -6,6 +6,8 @@ false AnyCPU;x64 + + Debug;Release;RASA NLU;DIALOGFLOW;RASA diff --git a/BotSharp.Core/Abstractions/IBotPlatform.cs b/BotSharp.Core/Abstractions/IBotPlatform.cs index ddbd4ec4..f14f3732 100644 --- a/BotSharp.Core/Abstractions/IBotPlatform.cs +++ b/BotSharp.Core/Abstractions/IBotPlatform.cs @@ -10,6 +10,8 @@ namespace BotSharp.Core.Engines { public interface IBotPlatform { + AIConfiguration AiConfig { get; set; } + /// /// Load agent profile /// diff --git a/BotSharp.Core/BotSharp.Core.csproj b/BotSharp.Core/BotSharp.Core.csproj index f6e25036..11f53be3 100644 --- a/BotSharp.Core/BotSharp.Core.csproj +++ b/BotSharp.Core/BotSharp.Core.csproj @@ -6,6 +6,7 @@ SAK SAK AnyCPU;x64 + Debug;Release;RASA NLU;DIALOGFLOW;RASA @@ -31,10 +32,26 @@ TRACE;DEBUG + + TRACE;DEBUG + + + + TRACE;DEBUG + + TRACE;DEBUG + + TRACE;DEBUG + + + + TRACE;DEBUG + + TRACE;MODEL_PER_CONTEXTS diff --git a/BotSharp.Core/Engines/AgentImportHeader.cs b/BotSharp.Core/Engines/AgentImportHeader.cs index 579380fe..7e4977df 100644 --- a/BotSharp.Core/Engines/AgentImportHeader.cs +++ b/BotSharp.Core/Engines/AgentImportHeader.cs @@ -9,7 +9,7 @@ namespace BotSharp.Core.Engines { public String Id { get; set; } public String Name { get; set; } - public String Platform { get; set; } + public PlatformType Platform { get; set; } public String ClientAccessToken { get; set; } public String DeveloperAccessToken { get; set; } diff --git a/BotSharp.Core/Engines/BotEngineBase.cs b/BotSharp.Core/Engines/BotEngineBase.cs index 1d6301ba..710d02ee 100644 --- a/BotSharp.Core/Engines/BotEngineBase.cs +++ b/BotSharp.Core/Engines/BotEngineBase.cs @@ -115,16 +115,16 @@ namespace BotSharp.Core.Engines switch (meta.Platform) { - case "Dialogflow": + case PlatformType.Dialogflow: importer = new AgentImporterInDialogflow(); break; - case "Rasa": + case PlatformType.Rasa: importer = new AgentImporterInRasa(); break; - case "Sebis": + case PlatformType.Sebis: importer = new AgentImporterInSebis(); break; - case "QuickQA": + case PlatformType.QuickQA: importer = new AgentImporterInQuickQA(); break; default: diff --git a/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs b/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs index 3470b533..593429c4 100644 --- a/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs +++ b/BotSharp.Core/Engines/Dialogflow/AgentImporterInDialogflow.cs @@ -291,6 +291,31 @@ namespace BotSharp.Core.Engines public void AssembleTrainData(Agent agent) { + // convert agent to training corpus + agent.Corpus = new TrainingCorpus + { + Entities = new List(), + UserSays = new List>() + }; + + agent.Intents.ForEach(intent => + { + intent.UserSays.ForEach(say => { + agent.Corpus.UserSays.Add(new TrainingIntentExpression + { + Intent = intent.Name, + Text = String.Join("", say.Data.Select(x => x.Text)), + Entities = say.Data.Where(x => !String.IsNullOrEmpty(x.Meta)) + .Select(x => new TrainingIntentExpressionPart + { + Value = x.Text, + Entity = x.Meta, + Start = x.Start + }) + .ToList() + }); + }); + }); } } } diff --git a/BotSharp.Core/Engines/PlatformType.cs b/BotSharp.Core/Engines/PlatformType.cs new file mode 100644 index 00000000..1fbcbb0e --- /dev/null +++ b/BotSharp.Core/Engines/PlatformType.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BotSharp.Core.Engines +{ + public enum PlatformType + { + Dialogflow = 1, + Rasa = 2, + Sebis = 3, + QuickQA = 4 + } +} diff --git a/BotSharp.NLP.UnitTest/BotSharp.NLP.UnitTest.csproj b/BotSharp.NLP.UnitTest/BotSharp.NLP.UnitTest.csproj index 734c015b..b851ea1c 100644 --- a/BotSharp.NLP.UnitTest/BotSharp.NLP.UnitTest.csproj +++ b/BotSharp.NLP.UnitTest/BotSharp.NLP.UnitTest.csproj @@ -6,6 +6,8 @@ false AnyCPU;x64 + + Debug;Release;RASA NLU;DIALOGFLOW;RASA diff --git a/BotSharp.NLP/BotSharp.NLP.csproj b/BotSharp.NLP/BotSharp.NLP.csproj index 827c44b5..98f53e11 100644 --- a/BotSharp.NLP/BotSharp.NLP.csproj +++ b/BotSharp.NLP/BotSharp.NLP.csproj @@ -24,12 +24,21 @@ Naive Bayes Classifier Mark milestone 0.2.3. Tokenizer, POS Tagger, NER and Text Classifier modules can be used in production environments. https://raw.githubusercontent.com/Oceania2018/BotSharp/master/BotSharp.WebHost/wwwroot/images/BotSharp.png BotSharp, NLP, NLU, POS, NER, LSTM, CRF, SVM, Tagger, NaiveBayes + Debug;Release;RASA NLU;DIALOGFLOW;RASA DEBUG;TRACE + + DEBUG;TRACE + + + + DEBUG;TRACE + + diff --git a/BotSharp.RestApi/BotSharp.RestApi.csproj b/BotSharp.RestApi/BotSharp.RestApi.csproj index 5c04d379..480c11a9 100644 --- a/BotSharp.RestApi/BotSharp.RestApi.csproj +++ b/BotSharp.RestApi/BotSharp.RestApi.csproj @@ -16,11 +16,22 @@ NLU, Chatbot, Bot, AI Bot Restful API for BotSharp.Core AnyCPU;x64 + Debug;Release;RASA NLU;DIALOGFLOW;RASA + + TRACE;DEBUG + + + + BotSharp.RestApi.xml + TRACE;DEBUG + + + bin\Debug\netcoreapp2.1\BotSharp.RestApi.xml - TRACE;DEBUG;RASA_UI + TRACE;DEBUG @@ -28,6 +39,16 @@ TRACE;DEBUG;MODE_RASA + + bin\Debug\netcoreapp2.1\BotSharp.RestApi.xml + TRACE;DEBUG;MODE_RASA + + + + bin\Debug\netcoreapp2.1\BotSharp.RestApi.xml + TRACE;DEBUG;MODE_RASA + + TRACE;MODE_DIALOGFLOW;RELEASE;NETCOREAPP;NETCOREAPP2_1;RELEASE;NETCOREAPP;NETCOREAPP2_1 @@ -36,6 +57,12 @@ TRACE;MODE_DIALOGFLOW;RELEASE;NETCOREAPP;NETCOREAPP2_1;RELEASE;NETCOREAPP;NETCOREAPP2_1 + + 1 + TRACE;DEBUG + BotSharp.RestApi.xml + + diff --git a/BotSharp.RestApi/BotSharp.RestApi.xml b/BotSharp.RestApi/BotSharp.RestApi.xml new file mode 100644 index 00000000..9ec6d8f0 --- /dev/null +++ b/BotSharp.RestApi/BotSharp.RestApi.xml @@ -0,0 +1,143 @@ + + + + BotSharp.RestApi + + + + + Agent + + + + + Initialize dialog controller and get a platform instance + + + + + + Restore a agent from a uploaded zip file + + + + + + + Train agent + + + + + + + Dump agent + + + + + + + Array of additional context objects. Should be sent via a POST /query request. + Contexts sent in a query are activated before the query. + + + + + Object containing event name and additional data. + The "data" parameter can be submitted only in POST requests. + + + + + Language tag, e.g., en, es etc. + + + + + Natural language text to be processed. Query length should not exceed 256 characters. + + + + + A string token up to 36 symbols long, used to identify the client and to manage session parameters (including contexts) per client. + + + + + Time zone from IANA Time Zone Database Examples: America/New_York, Europe/Paris + + + + + send a text request + + + + + Initialize dialog controller and get a platform instance + + + + + + parse request + + + + + + + This returns all the currently available projects. + + + + + Initialize status controller and get a platform instance + + + + + + Returns a list of available projects the server can use to fulfill /parse requests. + + + + + + You can post your training data to this endpoint to train a new model for a project. + This request will wait for the server answer: either the model was trained successfully or the training exited with an error. + + + + + Initialize dialog controller and get a platform instance + + + + + + Using the HTTP server, you must specify the project you want to train a new model for to be able to use it during parse requests later on : /train?project=my_project. + + Model name + + + + + + PAGE_ID + + + + + PSID + + + + + Initialize dialog controller and get a platform instance + + + + + diff --git a/BotSharp.RestApi/Dialogflow/QueryController.cs b/BotSharp.RestApi/Dialogflow/QueryController.cs index da8ec268..770e09ef 100644 --- a/BotSharp.RestApi/Dialogflow/QueryController.cs +++ b/BotSharp.RestApi/Dialogflow/QueryController.cs @@ -1,18 +1,23 @@ using BotSharp.Core.Engines; using BotSharp.Core.Models; +using BotSharp.NLP; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Security.Claims; using System.Text; namespace BotSharp.RestApi.Dialogflow { -#if MODE_DIALOGFLOW +#if DIALOGFLOW /// /// Dialogflow mode query controller /// + [Authorize] [Route("v1/[controller]")] public class QueryController : ControllerBase { @@ -37,18 +42,51 @@ namespace BotSharp.RestApi.Dialogflow [HttpGet, HttpPost] public ActionResult Query(QueryModel request) { - String clientAccessToken = Request.Headers["ClientAccessToken"]; - var config = new AIConfiguration(clientAccessToken, SupportedLanguage.English); - config.SessionId = request.SessionId; + String clientAccessToken = (User.Identity as ClaimsIdentity).Claims.FirstOrDefault(x => x.Type == "UserId")?.Value; + _platform.AiConfig = new AIConfiguration(clientAccessToken, SupportedLanguage.English); + _platform.AiConfig.SessionId = request.SessionId; - _platform.LoadAgent(clientAccessToken); + // find a model according to clientAccessToken + string projectPath = String.Empty; + string projectsPath = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects"); + + string[] d1 = Directory.GetDirectories(projectsPath); + for (int i = 0; i < d1.Length; i++) + { + string[] d2 = Directory.GetDirectories(d1[i]); + for (int j = 0; j < d2.Length; j++) + { + string metaJson = System.IO.File.ReadAllText(Path.Combine(d2[j], "meta.json")); + + var meta = JsonConvert.DeserializeObject(metaJson); + + if (meta.ClientAccessToken == clientAccessToken) + { + projectPath = d1[i]; + break; + } + }; + + if (!String.IsNullOrEmpty(projectPath)) + { + break; + } + }; + + // Load agent + string model = Directory.GetDirectories(projectPath).Where(x => x.Contains("model_")).Last().Split(Path.DirectorySeparatorChar).Last(); + string dataDir = Path.Combine(projectPath, model); + + _platform.LoadAgentFromFile(dataDir); var aIResponse = _platform.TextRequest(new AIRequest { Timezone = request.Timezone, Contexts = request?.Contexts?.Select(x => new AIContext { Name = x })?.ToList(), Language = request.Lang, - Query = new String[] { request.Query } + Query = new String[] { request.Query }, + AgentDir = projectPath, + Model = model }); return aIResponse; diff --git a/BotSharp.RestApi/Dialogflow/TrainController.cs b/BotSharp.RestApi/Dialogflow/TrainController.cs new file mode 100644 index 00000000..b6460cbf --- /dev/null +++ b/BotSharp.RestApi/Dialogflow/TrainController.cs @@ -0,0 +1,59 @@ +using BotSharp.Core.Agents; +using BotSharp.Core.Engines; +using BotSharp.Core.Engines.Rasa; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Serialization; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace BotSharp.RestApi.Rasa +{ +#if DIALOGFLOW + /// + /// You can post your training data to this endpoint to train a new model for a project. + /// This request will wait for the server answer: either the model was trained successfully or the training exited with an error. + /// + [Route("v1/[controller]")] + public class TrainController : ControllerBase + { + private readonly IBotPlatform _platform; + + /// + /// Initialize dialog controller and get a platform instance + /// + /// + public TrainController(IBotPlatform platform) + { + _platform = platform; + } + + [HttpPost] + public async Task> 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 }); + } + } +#endif +} diff --git a/BotSharp.RestApi/Rasa/ConfigController.cs b/BotSharp.RestApi/Rasa/ConfigController.cs index 7e211523..4fde59dd 100644 --- a/BotSharp.RestApi/Rasa/ConfigController.cs +++ b/BotSharp.RestApi/Rasa/ConfigController.cs @@ -6,7 +6,7 @@ using System.Text; namespace BotSharp.RestApi.Rasa { -#if RASA_UI +#if RASA [Route("[controller]")] public class ConfigController : ControllerBase { diff --git a/BotSharp.RestApi/Rasa/ParseController.cs b/BotSharp.RestApi/Rasa/ParseController.cs index 5e08ffbd..8e20d847 100644 --- a/BotSharp.RestApi/Rasa/ParseController.cs +++ b/BotSharp.RestApi/Rasa/ParseController.cs @@ -14,7 +14,7 @@ using Console = Colorful.Console; namespace BotSharp.RestApi.Rasa { -#if RASA_UI +#if RASA /// /// send a text request /// diff --git a/BotSharp.RestApi/Rasa/StatusController.cs b/BotSharp.RestApi/Rasa/StatusController.cs index ea49350c..73c80827 100644 --- a/BotSharp.RestApi/Rasa/StatusController.cs +++ b/BotSharp.RestApi/Rasa/StatusController.cs @@ -9,7 +9,7 @@ using System.Text; namespace BotSharp.RestApi.Rasa { -#if RASA_UI +#if RASA /// /// This returns all the currently available projects. /// diff --git a/BotSharp.RestApi/Rasa/TrainController.cs b/BotSharp.RestApi/Rasa/TrainController.cs index 058398c0..ae2eb3cb 100644 --- a/BotSharp.RestApi/Rasa/TrainController.cs +++ b/BotSharp.RestApi/Rasa/TrainController.cs @@ -15,7 +15,7 @@ using System.Threading.Tasks; namespace BotSharp.RestApi.Rasa { -#if RASA_UI +#if RASA /// /// You can post your training data to this endpoint to train a new model for a project. /// This request will wait for the server answer: either the model was trained successfully or the training exited with an error. @@ -94,7 +94,7 @@ namespace BotSharp.RestApi.Rasa System.IO.File.WriteAllText(metaFileName, JsonConvert.SerializeObject(new AgentImportHeader { Name = project, - Platform = "Rasa" + Platform = PlatformType.Rasa })); // in order to unify the process. var fileName = Path.Combine(modelPath, "corpus.json"); diff --git a/BotSharp.RestApi/Rasa/VersionController.cs b/BotSharp.RestApi/Rasa/VersionController.cs index d4378765..e2467d95 100644 --- a/BotSharp.RestApi/Rasa/VersionController.cs +++ b/BotSharp.RestApi/Rasa/VersionController.cs @@ -5,7 +5,7 @@ using System.Text; namespace BotSharp.RestApi.Rasa { -#if RASA_UI +#if RASA [Route("[controller]")] public class VersionController : ControllerBase { diff --git a/BotSharp.WebHost/App_Data/AgentArchive/Restaurant.zip b/BotSharp.WebHost/App_Data/AgentArchive/Restaurant.zip index eda4462c5c5e0d26bb424e452c82cfd72fb86195..8e83981820ada8237131b6e8c4475057bbcc5e6d 100644 GIT binary patch delta 229 zcmcb~d6RQPJu~mxN)_M5V#n@mW?*3WHo1pcs{Td2##~*K>uPz6yu}3zh1(}TkrB++ z@+}ekzgygDXPrL({mnC`re1B$3JmL8akcl;Rt~?bL2U8S?73(6l%D8)&@?maAG7q1 zN7LUJr0(b!_$;!`Hbv^#YkjAt%($=VJ(VwQmu->Plh_|?ZEzuD@zkl4W^8GzOi?Sy zv(I0mw)>bC`?tfq$L;-kCUdXjT;PzkOxBoXt&t6fpVZMKyJvhfakAq#tiACt;!Irr UV!Z delta 229 zcmcb~d6RQPJu~lJ4{6^|t8*i^GcYjxoZQ1KRsX?$$~m!F*}~=*T?GU$ddm1sDt1}3 z(&VD+pZ9Sup8Tofzh7*l)m0>UDl^b(k=ylC;Yt>vo{}}GvL>RRuPK^0ai^U+$-m}d zSNx`D$*YD@xytevpz_YiK$@41vHQ(;yKK94uM2w%5E%`nBP3 Zp-t6Z#>xIHu4tZE$fCy<%mVZe0|0%wW|IH_ diff --git a/BotSharp.WebHost/BotSharp.WebHost.csproj b/BotSharp.WebHost/BotSharp.WebHost.csproj index de054b8e..14882ccf 100644 --- a/BotSharp.WebHost/BotSharp.WebHost.csproj +++ b/BotSharp.WebHost/BotSharp.WebHost.csproj @@ -4,16 +4,33 @@ netcoreapp2.1 Portable;win10-x64;centos.7-x64 AnyCPU;x64 + Debug;Release;RASA NLU;DIALOGFLOW;RASA - TRACE;DEBUG;RASA_UI + TRACE;DEBUG + + + + TRACE;DEBUG + + + + TRACE;DEBUG TRACE;DEBUG;MODE_RASA + + TRACE;DEBUG;MODE_RASA + + + + TRACE;DEBUG;MODE_RASA + + diff --git a/BotSharp.WebHost/Program.cs b/BotSharp.WebHost/Program.cs index b09272a8..a9b88120 100644 --- a/BotSharp.WebHost/Program.cs +++ b/BotSharp.WebHost/Program.cs @@ -24,7 +24,7 @@ namespace BotSharp.WebHost config.AddJsonFile(setting, optional: false, reloadOnChange: true); }); }) -#if RASA_UI +#if RASA .UseUrls("http://0.0.0.0:5000") #else .UseUrls("http://0.0.0.0:3112") diff --git a/BotSharp.WebHost/Startup.cs b/BotSharp.WebHost/Startup.cs index ee319a0b..211e26e5 100644 --- a/BotSharp.WebHost/Startup.cs +++ b/BotSharp.WebHost/Startup.cs @@ -107,9 +107,9 @@ namespace BotSharp.WebHost if (!string.IsNullOrWhiteSpace(token) && (token = token.Split(' ').Last()).Length == 32) { var config = (IConfiguration)AppDomain.CurrentDomain.GetData("Configuration"); - context.Request.Headers["ClientAccessToken"] = token; + context.Request.Headers["Authorization"] = token; - // context.Request.Headers["Authorization"] = "Bearer " + JwtToken.GenerateToken(config, userId); + context.Request.Headers["Authorization"] = "Bearer " + JwtToken.GenerateToken(config, token); } await next.Invoke(); diff --git a/BotSharp.sln b/BotSharp.sln index 2f48353f..18739fc2 100644 --- a/BotSharp.sln +++ b/BotSharp.sln @@ -22,75 +22,75 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 + DIALOGFLOW|Any CPU = DIALOGFLOW|Any CPU + RASA|Any CPU = RASA|Any CPU Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {95780673-2A1A-4953-962F-C46CBFDD07FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {95780673-2A1A-4953-962F-C46CBFDD07FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {95780673-2A1A-4953-962F-C46CBFDD07FF}.Debug|x64.ActiveCfg = Debug|x64 - {95780673-2A1A-4953-962F-C46CBFDD07FF}.Debug|x64.Build.0 = Debug|x64 + {95780673-2A1A-4953-962F-C46CBFDD07FF}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {95780673-2A1A-4953-962F-C46CBFDD07FF}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {95780673-2A1A-4953-962F-C46CBFDD07FF}.RASA|Any CPU.ActiveCfg = RASA|Any CPU + {95780673-2A1A-4953-962F-C46CBFDD07FF}.RASA|Any CPU.Build.0 = RASA|Any CPU {95780673-2A1A-4953-962F-C46CBFDD07FF}.Release|Any CPU.ActiveCfg = Release|Any CPU {95780673-2A1A-4953-962F-C46CBFDD07FF}.Release|Any CPU.Build.0 = Release|Any CPU - {95780673-2A1A-4953-962F-C46CBFDD07FF}.Release|x64.ActiveCfg = Release|x64 - {95780673-2A1A-4953-962F-C46CBFDD07FF}.Release|x64.Build.0 = Release|x64 {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.Debug|x64.ActiveCfg = Debug|x64 - {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.Debug|x64.Build.0 = Debug|x64 + {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.RASA|Any CPU.ActiveCfg = RASA|Any CPU + {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.RASA|Any CPU.Build.0 = RASA|Any CPU {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.Release|Any CPU.ActiveCfg = Release|Any CPU {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.Release|Any CPU.Build.0 = Release|Any CPU - {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.Release|x64.ActiveCfg = Release|x64 - {80DDAA05-69BC-49DD-96A4-37345E7A2E20}.Release|x64.Build.0 = Release|x64 {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Debug|x64.ActiveCfg = Debug|x64 - {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Debug|x64.Build.0 = Debug|x64 + {03DCA427-327A-4FC9-9A2F-57D17F16708C}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {03DCA427-327A-4FC9-9A2F-57D17F16708C}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {03DCA427-327A-4FC9-9A2F-57D17F16708C}.RASA|Any CPU.ActiveCfg = RASA|Any CPU + {03DCA427-327A-4FC9-9A2F-57D17F16708C}.RASA|Any CPU.Build.0 = RASA|Any CPU {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Release|Any CPU.ActiveCfg = Release|Any CPU {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Release|Any CPU.Build.0 = Release|Any CPU - {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Release|x64.ActiveCfg = Release|x64 - {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Release|x64.Build.0 = Release|x64 {A31A6853-DFB8-477D-8F09-8E6E3D166102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A31A6853-DFB8-477D-8F09-8E6E3D166102}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A31A6853-DFB8-477D-8F09-8E6E3D166102}.Debug|x64.ActiveCfg = Debug|x64 - {A31A6853-DFB8-477D-8F09-8E6E3D166102}.Debug|x64.Build.0 = Debug|x64 + {A31A6853-DFB8-477D-8F09-8E6E3D166102}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {A31A6853-DFB8-477D-8F09-8E6E3D166102}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {A31A6853-DFB8-477D-8F09-8E6E3D166102}.RASA|Any CPU.ActiveCfg = RASA|Any CPU + {A31A6853-DFB8-477D-8F09-8E6E3D166102}.RASA|Any CPU.Build.0 = RASA|Any CPU {A31A6853-DFB8-477D-8F09-8E6E3D166102}.Release|Any CPU.ActiveCfg = Release|Any CPU {A31A6853-DFB8-477D-8F09-8E6E3D166102}.Release|Any CPU.Build.0 = Release|Any CPU - {A31A6853-DFB8-477D-8F09-8E6E3D166102}.Release|x64.ActiveCfg = Release|x64 - {A31A6853-DFB8-477D-8F09-8E6E3D166102}.Release|x64.Build.0 = Release|x64 {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.Debug|x64.ActiveCfg = Debug|Any CPU - {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.Debug|x64.Build.0 = Debug|Any CPU + {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.RASA|Any CPU.ActiveCfg = RASA|Any CPU + {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.RASA|Any CPU.Build.0 = RASA|Any CPU {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.Release|Any CPU.Build.0 = Release|Any CPU - {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.Release|x64.ActiveCfg = Release|Any CPU - {BE1A033F-AC14-4654-95C3-4B33AF8F6BBF}.Release|x64.Build.0 = Release|Any CPU {4C4EE7A8-99CA-41FE-9517-C66799720784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4C4EE7A8-99CA-41FE-9517-C66799720784}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4C4EE7A8-99CA-41FE-9517-C66799720784}.Debug|x64.ActiveCfg = Debug|Any CPU - {4C4EE7A8-99CA-41FE-9517-C66799720784}.Debug|x64.Build.0 = Debug|Any CPU + {4C4EE7A8-99CA-41FE-9517-C66799720784}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {4C4EE7A8-99CA-41FE-9517-C66799720784}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {4C4EE7A8-99CA-41FE-9517-C66799720784}.RASA|Any CPU.ActiveCfg = RASA|Any CPU + {4C4EE7A8-99CA-41FE-9517-C66799720784}.RASA|Any CPU.Build.0 = RASA|Any CPU {4C4EE7A8-99CA-41FE-9517-C66799720784}.Release|Any CPU.ActiveCfg = Release|Any CPU {4C4EE7A8-99CA-41FE-9517-C66799720784}.Release|Any CPU.Build.0 = Release|Any CPU - {4C4EE7A8-99CA-41FE-9517-C66799720784}.Release|x64.ActiveCfg = Release|Any CPU - {4C4EE7A8-99CA-41FE-9517-C66799720784}.Release|x64.Build.0 = Release|Any CPU {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Debug|x64.ActiveCfg = Debug|x64 - {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Debug|x64.Build.0 = Debug|x64 + {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.RASA|Any CPU.ActiveCfg = RASA|Any CPU + {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.RASA|Any CPU.Build.0 = RASA|Any CPU {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Release|Any CPU.Build.0 = Release|Any CPU - {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Release|x64.ActiveCfg = Release|x64 - {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Release|x64.Build.0 = Release|x64 {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.Debug|x64.ActiveCfg = Debug|x64 - {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.Debug|x64.Build.0 = Debug|x64 + {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.RASA|Any CPU.ActiveCfg = RASA|Any CPU + {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.RASA|Any CPU.Build.0 = RASA|Any CPU {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.Release|Any CPU.Build.0 = Release|Any CPU - {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.Release|x64.ActiveCfg = Release|x64 - {4AAA7A40-0389-41AC-B55E-CFAF7C8600B1}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE