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 eda4462c..8e839818 100644
Binary files a/BotSharp.WebHost/App_Data/AgentArchive/Restaurant.zip and b/BotSharp.WebHost/App_Data/AgentArchive/Restaurant.zip differ
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