public static void ClassInitialize(TestContext context) { TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration()); DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); resourceExplorer = ResourceExplorer.LoadProject(GetProjectFolder()); }
public static async Task RunTestScript(string resourceId = null, [CallerMemberName] string testName = null, IConfiguration configuration = null) { TestScript script; // TODO: For now, serialize type loading because config is static and is used by LUIS type loader. lock (RootFolder) { if (configuration == null) { configuration = DefaultConfiguration; } if (configuration != TypeFactory.Configuration) { TypeFactory.Configuration = configuration; DeclarativeTypeLoader.Reset(); TypeFactory.Configuration = configuration ?? new ConfigurationBuilder().AddInMemoryCollection().Build(); DeclarativeTypeLoader.AddComponent(new DialogComponentRegistration()); DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration()); DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); DeclarativeTypeLoader.AddComponent(new MockLuisComponentRegistration()); } script = TestUtils.ResourceExplorer.LoadType <TestScript>(resourceId ?? $"{testName}.test.dialog"); } script.Description = script.Description ?? resourceId; await script.ExecuteAsync(testName : testName, configuration : configuration, resourceExplorer : ResourceExplorer).ConfigureAwait(false); }
/// <summary> /// Register ILanguageGenerator as default langugage generator. /// </summary> /// <param name="botAdapter">botAdapter to add services to.</param> /// <param name="resourceExplorer">resourceExporer to provide to LanguageGenerator.</param> /// <param name="languageGenerator">LanguageGenerator to use.</param> /// <returns>botAdapter.</returns> public static BotAdapter UseLanguageGeneration(this BotAdapter botAdapter, ResourceExplorer resourceExplorer, ILanguageGenerator languageGenerator) { DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); botAdapter.Use(new RegisterClassMiddleware <LanguageGeneratorManager>(new LanguageGeneratorManager(resourceExplorer ?? throw new ArgumentNullException(nameof(resourceExplorer))))); botAdapter.Use(new RegisterClassMiddleware <ILanguageGenerator>(languageGenerator ?? throw new ArgumentNullException(nameof(languageGenerator)))); return(botAdapter); }
public static void ClassInitialize(TestContext context) { TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration()); DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); TypeFactory.Register("Microsoft.RuleRecognizer", typeof(RuleRecognizer)); string projPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, PathUtils.NormalizePath($@"..\..\..\..\..\tests\Microsoft.Bot.Builder.TestBot.Json\Microsoft.Bot.Builder.TestBot.Json.csproj"))); resourceExplorer = ResourceExplorer.LoadProject(projPath); }
public ComposerBot(string rootDialogFile, ConversationState conversationState, UserState userState, ResourceExplorer resourceExplorer, ISourceMap sourceMap, IBotTelemetryClient telemetryClient) { this.conversationState = conversationState; this.userState = userState; this.dialogState = conversationState.CreateProperty <DialogState>("DialogState"); this.sourceMap = sourceMap; this.resourceExplorer = resourceExplorer; this.rootDialogFile = rootDialogFile; this.telemetryClient = telemetryClient; DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); LoadRootDialogAsync(); }
public static void AssemblyInit(TestContext context) { lock (rootFolder) { if (ResourceExplorer == null) { ResourceExplorer = new ResourceExplorer().AddFolder(rootFolder); TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); DeclarativeTypeLoader.AddComponent(new DialogComponentRegistration()); DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration()); DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); } } }
/// <summary> /// Register ILanguageGenerator as default langugage generator. /// </summary> /// <param name="botAdapter">botAdapter to add services to.</param> /// <param name="resourceExplorer">resourceExporer to provide to LanguageGenerator.</param> /// <param name="languageGenerator">LanguageGenerator to use.</param> /// <returns>botAdapter.</returns> public static BotAdapter UseLanguageGeneration(this BotAdapter botAdapter, ResourceExplorer resourceExplorer, ILanguageGenerator languageGenerator) { DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); lock (languageGeneratorManagers) { if (!languageGeneratorManagers.TryGetValue(resourceExplorer ?? throw new ArgumentNullException(nameof(resourceExplorer)), out var lgm)) { lgm = new LanguageGeneratorManager(resourceExplorer); languageGeneratorManagers[resourceExplorer] = lgm; } botAdapter.Use(new RegisterClassMiddleware <LanguageGeneratorManager>(lgm)); botAdapter.Use(new RegisterClassMiddleware <ILanguageGenerator>(languageGenerator ?? throw new ArgumentNullException(nameof(languageGenerator)))); return(botAdapter); } }
public ComposerBot(string rootDialogFile, ConversationState conversationState, UserState userState, ResourceExplorer resourceExplorer, ISourceMap sourceMap) { this.conversationState = conversationState; this.userState = userState; this.dialogState = conversationState.CreateProperty <DialogState>("DialogState"); this.sourceMap = sourceMap; this.resourceExplorer = resourceExplorer; this.rootDialogFile = rootDialogFile; DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); // auto reload dialogs when file changes this.resourceExplorer.Changed += (resources) => { if (resources.Any(resource => resource.Id == ".dialog")) { Task.Run(() => this.LoadRootDialogAsync()); } }; LoadRootDialogAsync(); }
/// <summary> /// Register QnAMaker types. /// </summary> /// <param name="botAdapter">BotAdapter to add middleware to.</param> /// <returns>The bot adapter.</returns> public static BotAdapter UseQnAMaker(this BotAdapter botAdapter) { DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); return(botAdapter); }
public static void Main(string[] args) { var secret = "profile"; string luis = null; if (args.Length == 0) { Help(); } for (var i = 0; i < args.Length; ++i) { var arg = args[i]; if (arg.StartsWith("-")) { if (arg == "-secret") { if (++i < args.Length) { secret = args[i]; } else { throw new System.ArgumentException("Missing --secret value"); } } else if (arg == "-luis") { if (++i < args.Length) { luis = args[i]; } else { throw new System.ArgumentException("Missing --luis value"); } } else { Console.Error.WriteLine($"Unknown arg {arg}"); Help(); } } else { var cd = Directory.GetCurrentDirectory(); var dir = Path.GetDirectoryName(arg); var name = Path.GetFileName(arg); var config = new ConfigurationBuilder() .AddInMemoryCollection() .UseLuisSettings(luis ?? dir, secret) .Build(); var explorer = new ResourceExplorer().AddFolder(dir); DeclarativeTypeLoader.Reset(); TypeFactory.Configuration = config; DeclarativeTypeLoader.AddComponent(new DialogComponentRegistration()); DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration()); DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); DeclarativeTypeLoader.AddComponent(new MockLuisComponentRegistration()); var script = explorer.LoadType <TestScript>(name); var timer = new System.Diagnostics.Stopwatch(); Console.Write($"Executing {arg}"); timer.Start(); script.ExecuteAsync(testName: name, configuration: config, resourceExplorer: explorer).Wait(); timer.Stop(); Console.WriteLine($" took {timer.ElapsedMilliseconds} ms"); } } }
/// <summary> /// Register MessageActivityGeneration. /// </summary> /// <param name="botAdapter">botAdapter to add services to.</param> /// <param name="messageGenerator">(OPTIONAL) Default is TextMessageActivityGenerator(). </param> /// <returns>botAdapter.</returns> public static BotAdapter UseMessageActivityGeneration(this BotAdapter botAdapter, IActivityGenerator messageGenerator = null) { DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); botAdapter.Use(new RegisterClassMiddleware <IActivityGenerator>(messageGenerator ?? new ActivityGenerator())); return(botAdapter); }
public static void Main(string[] args) { var secret = "profile"; string luis = null; var iterations = 1; if (args.Length == 0) { Help(); } for (var i = 0; i < args.Length; ++i) { var arg = args[i]; if (arg.StartsWith("-")) { if (arg == "-secret") { if (++i < args.Length) { secret = args[i]; } else { throw new System.ArgumentException("Missing -secret value"); } } else if (arg == "-luis") { if (++i < args.Length) { luis = args[i]; } else { throw new System.ArgumentException("Missing -luis value"); } } else if (arg == "-n") { if (++i < args.Length) { iterations = int.Parse(args[i]); } else { throw new System.ArgumentException("Missing -n value"); } } else { Console.Error.WriteLine($"Unknown arg {arg}"); Help(); } } else { var cd = Directory.GetCurrentDirectory(); var dir = Path.GetDirectoryName(arg); var name = Path.GetFileName(arg); var config = new ConfigurationBuilder() .AddInMemoryCollection() .UseLuisSettings(luis ?? dir, secret) .Build(); var explorer = new ResourceExplorer().AddFolder(dir); DeclarativeTypeLoader.Reset(); TypeFactory.Configuration = config; DeclarativeTypeLoader.AddComponent(new DialogComponentRegistration()); DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration()); DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); DeclarativeTypeLoader.AddComponent(new MockLuisComponentRegistration()); var script = explorer.LoadType <TestScript>(name); var timer = new System.Diagnostics.Stopwatch(); Console.WriteLine($"Executing {arg} for {iterations} iterations"); timer.Start(); var adapter = script.DefaultTestAdapter(testName: name, resourceExplorer: explorer, configuration: config); timer.Stop(); var loading = timer.ElapsedMilliseconds; Console.WriteLine($" loading took {loading} ms"); var iterationTime = 0L; var firstTime = 0l; for (var iter = 0; iter < iterations; ++iter) { timer.Restart(); script.ExecuteAsync(adapter: adapter).Wait(); timer.Stop(); if (firstTime > 0) { iterationTime += timer.ElapsedMilliseconds; } else { firstTime = timer.ElapsedMilliseconds; } Console.WriteLine($" {iter}: {timer.ElapsedMilliseconds} ms"); } Console.Write($" Total time={loading + firstTime + iterationTime} ms"); if (iterations > 1) { Console.WriteLine($", per iteration after 1st={iterationTime / ((float)iterations - 1)} ms"); } } } }
/// <summary> /// Replace Microsoft.LUISRecognizer declarative implementation with <see cref="MockLuisRecognizer"/>. /// </summary> /// <param name="botAdapter">Adapter to register with.</param> /// <returns>Modified adapter.</returns> public static BotAdapter UseMockLuis(this BotAdapter botAdapter) { DeclarativeTypeLoader.AddComponent(new MockLuisComponentRegistration()); return(botAdapter); }
/// <summary> /// Register ResourceExplorer and optionally register more types. /// </summary> /// <param name="botAdapter">BotAdapter to add middleware to.</param> /// <returns>The bot adapter.</returns> public static BotAdapter UseAdaptiveDialogs(this BotAdapter botAdapter) { DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration()); DeclarativeTypeLoader.AddComponent(new LuisComponentRegistration()); return(botAdapter); }