diff --git a/BotSharp.Core.UnitTest/Performance/Spotify.cs b/BotSharp.Core.UnitTest/Performance/Spotify.cs index 82c68465..73303527 100644 --- a/BotSharp.Core.UnitTest/Performance/Spotify.cs +++ b/BotSharp.Core.UnitTest/Performance/Spotify.cs @@ -1,5 +1,6 @@ using Bigtree.Algorithm.Extensions; using BotSharp.Core.Engines; +using BotSharp.Platform.Abstraction; using BotSharp.Platform.Models; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; @@ -14,7 +15,7 @@ namespace BotSharp.Core.UnitTest.Performance public class Spotify : TestEssential { //private List> Samples; - private IBotPlatform _platform; + private IBotEngine _platform; [TestMethod] public void IntentAccuracy() diff --git a/BotSharp.Core/BotSharp.Core.csproj b/BotSharp.Core/BotSharp.Core.csproj index 3f86cd92..f4f20c73 100644 --- a/BotSharp.Core/BotSharp.Core.csproj +++ b/BotSharp.Core/BotSharp.Core.csproj @@ -89,8 +89,4 @@ If you feel that this project is helpful to you, please Star on the project, we - - - - diff --git a/BotSharp.Core/Engines/BotSharp/BotSharpAi.cs b/BotSharp.Core/Engines/BotSharp/BotSharpAi.cs index f4fa1db9..963e7b6e 100644 --- a/BotSharp.Core/Engines/BotSharp/BotSharpAi.cs +++ b/BotSharp.Core/Engines/BotSharp/BotSharpAi.cs @@ -2,17 +2,17 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using BotSharp.Platform.Abstraction; using BotSharp.Platform.Models; namespace BotSharp.Core.Engines.BotSharp { - public class BotSharpAi : BotEngineBase, IBotPlatform + public class BotSharpAi : BotEngineBase, IBotEngine { public override async Task Train(BotTrainOptions options) { - /*agent.Corpus = GetIntentExpressions(agent); var trainer = new BotTrainer(agent.Id, dc); - await trainer.Train(agent, options);*/ + await trainer.Train(agent, options); } } } diff --git a/BotSharp.Core/Engines/BotTrainer.cs b/BotSharp.Core/Engines/BotTrainer.cs index 04cfca23..3010d5f4 100644 --- a/BotSharp.Core/Engines/BotTrainer.cs +++ b/BotSharp.Core/Engines/BotTrainer.cs @@ -39,10 +39,10 @@ namespace BotSharp.Core.Engines // Get NLP Provider var config = (IConfiguration)AppDomain.CurrentDomain.GetData("Configuration"); var assemblies = (string[])AppDomain.CurrentDomain.GetData("Assemblies"); - var platform = config.GetSection($"BotPlatform").Value; - string providerName = config.GetSection($"{platform}:Provider").Value; + var engine = config.GetSection($"BotEngine").Value; + string providerName = config.GetSection($"{engine}:Provider").Value; var provider = TypeHelper.GetInstance(providerName, assemblies) as INlpProvider; - provider.Configuration = config.GetSection(platform); + provider.Configuration = config.GetSection(engine); var pipeModel = new PipeModel { @@ -73,7 +73,7 @@ namespace BotSharp.Core.Engines var meta = new ModelMetaData { - Platform = platform, + Platform = engine, Language = agent.Language, TrainingDate = DateTime.UtcNow, Version = config.GetValue($"Version"), diff --git a/BotSharp.Core/Abstractions/IBotPlatform.cs b/BotSharp.Platform.Abstraction/IBotEngine.cs similarity index 68% rename from BotSharp.Core/Abstractions/IBotPlatform.cs rename to BotSharp.Platform.Abstraction/IBotEngine.cs index fcff5338..9a0ac7c0 100644 --- a/BotSharp.Core/Abstractions/IBotPlatform.cs +++ b/BotSharp.Platform.Abstraction/IBotEngine.cs @@ -1,15 +1,17 @@ using BotSharp.Platform.Models; using BotSharp.Platform.Models.AiRequest; using BotSharp.Platform.Models.AiResponse; -using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; -namespace BotSharp.Core.Engines +namespace BotSharp.Platform.Abstraction { - public interface IBotPlatform + /// + /// BotEngine is the NLU of bot platform + /// + public interface IBotEngine { AiResponse TextRequest(AiRequest request); diff --git a/BotSharp.RestApi/BotSharp.RestApi.csproj b/BotSharp.RestApi/BotSharp.RestApi.csproj index 5dff127a..4c2f5f6c 100644 --- a/BotSharp.RestApi/BotSharp.RestApi.csproj +++ b/BotSharp.RestApi/BotSharp.RestApi.csproj @@ -74,10 +74,13 @@ + + + @@ -91,7 +94,6 @@ - diff --git a/BotSharp.RestApi/BotSharp.RestApi.xml b/BotSharp.RestApi/BotSharp.RestApi.xml index ff7cfa9f..61102ee3 100644 --- a/BotSharp.RestApi/BotSharp.RestApi.xml +++ b/BotSharp.RestApi/BotSharp.RestApi.xml @@ -14,11 +14,5 @@ PSID - - - Initialize dialog controller and get a platform instance - - - diff --git a/BotSharp.RestApi/Ontology/EntityController.cs b/BotSharp.RestApi/Ontology/EntityController.cs deleted file mode 100644 index 9c30bc92..00000000 --- a/BotSharp.RestApi/Ontology/EntityController.cs +++ /dev/null @@ -1,23 +0,0 @@ -using BotSharp.Core.Engines; -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Text; - -namespace BotSharp.RestApi.Ontology -{ - [Route("v1/[controller]/[action]")] - public class EntityController : ControllerBase - { - private readonly IBotPlatform _platform; - - /// - /// Initialize dialog controller and get a platform instance - /// - /// - public EntityController(IBotPlatform platform) - { - _platform = platform; - } - } -} diff --git a/BotSharp.Voice.UnitTest/BotSharp.Voice.UnitTest.csproj b/BotSharp.Voice.UnitTest/BotSharp.Voice.UnitTest.csproj index 3172d24c..899944bd 100644 --- a/BotSharp.Voice.UnitTest/BotSharp.Voice.UnitTest.csproj +++ b/BotSharp.Voice.UnitTest/BotSharp.Voice.UnitTest.csproj @@ -14,8 +14,4 @@ - - - - diff --git a/BotSharp.WebHost/BotSharp.WebHost.csproj b/BotSharp.WebHost/BotSharp.WebHost.csproj index 3a76b13b..59cdf173 100644 --- a/BotSharp.WebHost/BotSharp.WebHost.csproj +++ b/BotSharp.WebHost/BotSharp.WebHost.csproj @@ -64,6 +64,7 @@ + diff --git a/BotSharp.WebHost/Settings/app.json b/BotSharp.WebHost/Settings/app.json index 00c957a4..e8c72f86 100644 --- a/BotSharp.WebHost/Settings/app.json +++ b/BotSharp.WebHost/Settings/app.json @@ -1,6 +1,6 @@ { "Assemblies": "BotSharp.Core", - "BotPlatform": "BotSharpAi", + "BotEngine": "BotSharpAi", "Version": "0.1.0", "MachineLearning": { diff --git a/BotSharp.WebHost/Startup.cs b/BotSharp.WebHost/Startup.cs index 2a961c54..6e81a911 100644 --- a/BotSharp.WebHost/Startup.cs +++ b/BotSharp.WebHost/Startup.cs @@ -1,4 +1,5 @@ using BotSharp.Core.Engines; +using BotSharp.Platform.Abstraction; using DotNetToolkit; using DotNetToolkit.JwtHelper; using EntityFrameworkCore.BootKit; @@ -62,14 +63,14 @@ namespace BotSharp.WebHost }); // register platform dependency - services.AddTransient((provider) => + services.AddTransient((provider) => { var assemblies = (String[])AppDomain.CurrentDomain.GetData("Assemblies"); var config = (IConfiguration)AppDomain.CurrentDomain.GetData("Configuration"); - var implements = TypeHelper.GetClassesWithInterface(assemblies); + var implements = TypeHelper.GetClassesWithInterface(assemblies); string platform = config.GetValue("BotPlatform"); var implement = implements.FirstOrDefault(x => x.Name.Split('.').Last() == platform); - var instance = (IBotPlatform)Activator.CreateInstance(implement); + var instance = (IBotEngine)Activator.CreateInstance(implement); return instance; }); @@ -92,14 +93,6 @@ namespace BotSharp.WebHost { var info = Configuration.GetSection("Swagger").Get(); -#if DIALOGFLOW - info.Title += " (DIALOGFLOW)"; -#elif RASA - info.Title += " (RASA)"; -#elif ARTICULATE - info.Title += " (ARTICULATE)"; -#endif - c.SupportedSubmitMethods(SubmitMethod.Get, SubmitMethod.Post, SubmitMethod.Put, SubmitMethod.Patch, SubmitMethod.Delete); c.ShowExtensions(); c.SwaggerEndpoint(Configuration.GetValue("Swagger:Endpoint"), info.Title); diff --git a/BotSharp.sln b/BotSharp.sln index bc39fae6..0b374476 100644 --- a/BotSharp.sln +++ b/BotSharp.sln @@ -10,17 +10,12 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.WebHost", "BotSharp.WebHost\BotSharp.WebHost.csproj", "{03DCA427-327A-4FC9-9A2F-57D17F16708C}" ProjectSection(ProjectDependencies) = postProject {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22} = {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22} - {184F8B93-68C2-4849-9625-4023C4360990} = {184F8B93-68C2-4849-9625-4023C4360990} {62F08F9F-16C2-4754-90B0-B604DC18AE23} = {62F08F9F-16C2-4754-90B0-B604DC18AE23} {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72} = {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72} EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.NLP", "BotSharp.NLP\BotSharp.NLP.csproj", "{C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Voice", "BotSharp.Voice\BotSharp.Voice.csproj", "{184F8B93-68C2-4849-9625-4023C4360990}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Voice.UnitTest", "BotSharp.Voice.UnitTest\BotSharp.Voice.UnitTest.csproj", "{3F0CAAD4-564B-43FF-90BF-26AC47C9D677}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.NLP.UnitTest", "BotSharp.NLP.UnitTest\BotSharp.NLP.UnitTest.csproj", "{8A1F6277-FFCB-4CCD-B798-876D8BE525A9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Core.UnitTest", "BotSharp.Core.UnitTest\BotSharp.Core.UnitTest.csproj", "{30F80E7D-951A-4E8F-9C3C-2C866528EABD}" @@ -31,6 +26,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Models", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Dialogflow", "..\botsharp-dialogflow\BotSharp.Platform.Dialogflow\BotSharp.Platform.Dialogflow.csproj", "{B865F070-9693-47C6-B901-40121F659C6F}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Articulate", "Platform.Articulate\Platform.Articulate.csproj", "{9B7D2034-55A0-4539-A7A5-FAA7117E16A6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -71,22 +68,6 @@ Global {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 - {184F8B93-68C2-4849-9625-4023C4360990}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {184F8B93-68C2-4849-9625-4023C4360990}.Debug|Any CPU.Build.0 = Debug|Any CPU - {184F8B93-68C2-4849-9625-4023C4360990}.Debug|x64.ActiveCfg = Debug|Any CPU - {184F8B93-68C2-4849-9625-4023C4360990}.Debug|x64.Build.0 = Debug|Any CPU - {184F8B93-68C2-4849-9625-4023C4360990}.Release|Any CPU.ActiveCfg = Release|Any CPU - {184F8B93-68C2-4849-9625-4023C4360990}.Release|Any CPU.Build.0 = Release|Any CPU - {184F8B93-68C2-4849-9625-4023C4360990}.Release|x64.ActiveCfg = Release|Any CPU - {184F8B93-68C2-4849-9625-4023C4360990}.Release|x64.Build.0 = Release|Any CPU - {3F0CAAD4-564B-43FF-90BF-26AC47C9D677}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3F0CAAD4-564B-43FF-90BF-26AC47C9D677}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F0CAAD4-564B-43FF-90BF-26AC47C9D677}.Debug|x64.ActiveCfg = Debug|Any CPU - {3F0CAAD4-564B-43FF-90BF-26AC47C9D677}.Debug|x64.Build.0 = Debug|Any CPU - {3F0CAAD4-564B-43FF-90BF-26AC47C9D677}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F0CAAD4-564B-43FF-90BF-26AC47C9D677}.Release|Any CPU.Build.0 = Release|Any CPU - {3F0CAAD4-564B-43FF-90BF-26AC47C9D677}.Release|x64.ActiveCfg = Release|Any CPU - {3F0CAAD4-564B-43FF-90BF-26AC47C9D677}.Release|x64.Build.0 = Release|Any CPU {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.Debug|x64.ActiveCfg = Debug|x64 @@ -127,6 +108,14 @@ Global {B865F070-9693-47C6-B901-40121F659C6F}.Release|Any CPU.Build.0 = Release|Any CPU {B865F070-9693-47C6-B901-40121F659C6F}.Release|x64.ActiveCfg = Release|Any CPU {B865F070-9693-47C6-B901-40121F659C6F}.Release|x64.Build.0 = Release|Any CPU + {9B7D2034-55A0-4539-A7A5-FAA7117E16A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B7D2034-55A0-4539-A7A5-FAA7117E16A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B7D2034-55A0-4539-A7A5-FAA7117E16A6}.Debug|x64.ActiveCfg = Debug|Any CPU + {9B7D2034-55A0-4539-A7A5-FAA7117E16A6}.Debug|x64.Build.0 = Debug|Any CPU + {9B7D2034-55A0-4539-A7A5-FAA7117E16A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B7D2034-55A0-4539-A7A5-FAA7117E16A6}.Release|Any CPU.Build.0 = Release|Any CPU + {9B7D2034-55A0-4539-A7A5-FAA7117E16A6}.Release|x64.ActiveCfg = Release|Any CPU + {9B7D2034-55A0-4539-A7A5-FAA7117E16A6}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Platform.Articulate/ArticulateAi.cs b/Platform.Articulate/ArticulateAi.cs index 0f290aea..c20dcfce 100644 --- a/Platform.Articulate/ArticulateAi.cs +++ b/Platform.Articulate/ArticulateAi.cs @@ -136,62 +136,18 @@ namespace Platform.Articulate public async Task Train(TAgent agent, TrainingCorpus corpus) { string agentDir = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agent.Id); - - // save corpus to agent dir - var projectPath = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agent.Id); var model = "model_" + DateTime.UtcNow.ToString("yyyyMMdd"); - var modelPath = Path.Combine(projectPath, model); var trainer = new BotTrainer(); - var parsedAgent = agent.ToObject(); - - var intents = new List>(); - - foreach (DomainModel domain in (agent as AgentModel).Domains) - { - foreach (IntentModel intent in domain.Intents) - { - foreach (IntentExampleModel example in intent.Examples) - { - var parsedIntent = new TrainingIntentExpression - { - Intent = intent.IntentName, - Text = example.UserSays, - Entities = example.Entities.Select(x => new TrainingIntentExpressionPart - { - Entity = x.Entity, - Start = x.Start, - Value = x.Value - }).ToList() - }; - - intents.Add(parsedIntent); - } - } - } - - parsedAgent.Corpus = new TrainingCorpus - { - Entities = (agent as AgentModel).Entities.Select(x => new TrainingEntity - { - Entity = x.EntityName, - Values = x.Examples.Select(y => new TrainingEntitySynonym - { - Value = y.Value, - Synonyms = y.Synonyms - }).ToList() - }).ToList(), - - UserSays = intents - }; + agent.Corpus = corpus; var trainOptions = new BotTrainOptions { - AgentDir = projectPath, + AgentDir = agentDir, Model = model }; - var info = await trainer.Train(parsedAgent, trainOptions); + var info = await trainer.Train(agent, trainOptions); return true; } diff --git a/Platform.Articulate/Controllers/AgentController.cs b/Platform.Articulate/Controllers/AgentController.cs index 256474cf..282b4a58 100644 --- a/Platform.Articulate/Controllers/AgentController.cs +++ b/Platform.Articulate/Controllers/AgentController.cs @@ -16,19 +16,17 @@ using System.Text.RegularExpressions; namespace Platform.Articulate.Controllers { -#if ARTICULATE [Route("[controller]")] public class AgentController : ControllerBase { - private readonly IConfiguration configuration; - private readonly IBotPlatform _platform; + private readonly IBotEngine _platform; private ArticulateAi builder; /// /// Initialize agent controller and get a platform instance /// /// - public AgentController(IBotPlatform platform, IConfiguration configuration) + public AgentController(IBotEngine platform, IConfiguration configuration) { _platform = platform; builder = new ArticulateAi(); @@ -79,5 +77,4 @@ namespace Platform.Articulate.Controllers return agent; } } -#endif } diff --git a/Platform.Articulate/Controllers/DomainController.cs b/Platform.Articulate/Controllers/DomainController.cs index 83df0437..c04ae299 100644 --- a/Platform.Articulate/Controllers/DomainController.cs +++ b/Platform.Articulate/Controllers/DomainController.cs @@ -15,7 +15,6 @@ using System.Text.RegularExpressions; namespace Platform.Articulate.Controllers { -#if ARTICULATE [Route("[controller]")] public class DomainController : ControllerBase { @@ -68,5 +67,4 @@ namespace Platform.Articulate.Controllers return new DomainPageViewModel { Domains = agent.Domains, Total = agent.Domains.Count }; } } -#endif } diff --git a/Platform.Articulate/Controllers/EntityController.cs b/Platform.Articulate/Controllers/EntityController.cs index d31e1137..434db0e7 100644 --- a/Platform.Articulate/Controllers/EntityController.cs +++ b/Platform.Articulate/Controllers/EntityController.cs @@ -13,7 +13,6 @@ using System.Text; namespace Platform.Articulate.Controllers { -#if ARTICULATE [Route("[controller]")] public class EntityController : ControllerBase { @@ -67,5 +66,4 @@ namespace Platform.Articulate.Controllers return entity; } } -#endif } diff --git a/Platform.Articulate/Controllers/IntentController.cs b/Platform.Articulate/Controllers/IntentController.cs index 2e12db68..b007aa5b 100644 --- a/Platform.Articulate/Controllers/IntentController.cs +++ b/Platform.Articulate/Controllers/IntentController.cs @@ -14,7 +14,6 @@ using System.Text; namespace Platform.Articulate.Controllers { -#if ARTICULATE [Route("[controller]")] public class IntentController : ControllerBase { @@ -127,5 +126,4 @@ namespace Platform.Articulate.Controllers return new IntentPageViewModel { Intents = intents, Total = intents.Count }; } } -#endif } diff --git a/Platform.Articulate/Controllers/ParseControllercs.cs b/Platform.Articulate/Controllers/ParseControllercs.cs index 5b655ee1..cde60aeb 100644 --- a/Platform.Articulate/Controllers/ParseControllercs.cs +++ b/Platform.Articulate/Controllers/ParseControllercs.cs @@ -14,7 +14,6 @@ using Console = Colorful.Console; namespace Platform.Articulate.Controllers { -#if ARTICULATE [Route("[controller]")] public class ParseControllercs : ControllerBase { @@ -45,5 +44,4 @@ namespace Platform.Articulate.Controllers return Ok(response); } } -#endif } diff --git a/Platform.Articulate/Controllers/ScenarioController.cs b/Platform.Articulate/Controllers/ScenarioController.cs index 4b3ad548..f3b0615e 100644 --- a/Platform.Articulate/Controllers/ScenarioController.cs +++ b/Platform.Articulate/Controllers/ScenarioController.cs @@ -12,7 +12,6 @@ using System.Text; namespace Platform.Articulate.Controllers { -#if ARTICULATE [Route("[controller]")] public class ScenarioController : ControllerBase { @@ -63,5 +62,4 @@ namespace Platform.Articulate.Controllers return scenario; } } -#endif } diff --git a/Platform.Articulate/Controllers/SettingsController.cs b/Platform.Articulate/Controllers/SettingsController.cs index 7c3ec6de..41031e38 100644 --- a/Platform.Articulate/Controllers/SettingsController.cs +++ b/Platform.Articulate/Controllers/SettingsController.cs @@ -9,12 +9,9 @@ using System.Text; namespace Platform.Articulate.Controllers { -#if ARTICULATE [Route("[controller]")] public class SettingsController : ControllerBase { - private readonly IConfiguration configuration; - [HttpGet] public SettingsModel GetSettings() { @@ -51,5 +48,4 @@ namespace Platform.Articulate.Controllers return settings; } } -#endif } diff --git a/Platform.Articulate/Controllers/TrainController.cs b/Platform.Articulate/Controllers/TrainController.cs index 5764068a..534e38f9 100644 --- a/Platform.Articulate/Controllers/TrainController.cs +++ b/Platform.Articulate/Controllers/TrainController.cs @@ -9,7 +9,6 @@ using System.Threading.Tasks; namespace Platform.Articulate.Controllers { -#if ARTICULATE [Route("[controller]")] public class TrainController : ControllerBase { @@ -38,5 +37,4 @@ namespace Platform.Articulate.Controllers return agent; } } -#endif } diff --git a/Platform.Articulate/Platform.Articulate.csproj b/Platform.Articulate/Platform.Articulate.csproj index 9bab319a..ee89501a 100644 --- a/Platform.Articulate/Platform.Articulate.csproj +++ b/Platform.Articulate/Platform.Articulate.csproj @@ -6,7 +6,7 @@ - TRACE;DEBUG;RASA + TRACE false @@ -16,8 +16,8 @@ - bin\DIALOGFLOW - TRACE;DEBUG;DIALOGFLOW + + TRACE;DEBUG