diff --git a/Microsoft.Bot.Builder.sln b/Microsoft.Bot.Builder.sln index 4f6425102..b1cc12684 100644 --- a/Microsoft.Bot.Builder.sln +++ b/Microsoft.Bot.Builder.sln @@ -172,6 +172,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Builder.TestB EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Builder.TestBot.NetCore21.Tests", "tests\Microsoft.Bot.Builder.TestBot.NetCore21.Tests\Microsoft.Bot.Builder.TestBot.NetCore21.Tests.csproj", "{2FBA2BB7-73C8-45CD-99B7-D65F817C9051}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Expressions.Properties", "libraries\Microsoft.Bot.Expressions.Properties\Microsoft.Bot.Expressions.Properties.csproj", "{4943C197-0742-480E-B1D3-6738D41582A3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -700,6 +702,14 @@ Global {2FBA2BB7-73C8-45CD-99B7-D65F817C9051}.Release|Any CPU.Build.0 = Release|Any CPU {2FBA2BB7-73C8-45CD-99B7-D65F817C9051}.Release-Windows|Any CPU.ActiveCfg = Release|Any CPU {2FBA2BB7-73C8-45CD-99B7-D65F817C9051}.Release-Windows|Any CPU.Build.0 = Release|Any CPU + {4943C197-0742-480E-B1D3-6738D41582A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4943C197-0742-480E-B1D3-6738D41582A3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4943C197-0742-480E-B1D3-6738D41582A3}.Debug-Windows|Any CPU.ActiveCfg = Debug|Any CPU + {4943C197-0742-480E-B1D3-6738D41582A3}.Debug-Windows|Any CPU.Build.0 = Debug|Any CPU + {4943C197-0742-480E-B1D3-6738D41582A3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4943C197-0742-480E-B1D3-6738D41582A3}.Release|Any CPU.Build.0 = Release|Any CPU + {4943C197-0742-480E-B1D3-6738D41582A3}.Release-Windows|Any CPU.ActiveCfg = Release|Any CPU + {4943C197-0742-480E-B1D3-6738D41582A3}.Release-Windows|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -776,6 +786,7 @@ Global {D9242899-AB3F-46BB-BAB4-386CB8EC535C} = {AD743B78-D61F-4FBF-B620-FA83CE599A50} {99C466C3-1931-4C0E-AA0A-A8D9D140F56E} = {AD743B78-D61F-4FBF-B620-FA83CE599A50} {2FBA2BB7-73C8-45CD-99B7-D65F817C9051} = {AD743B78-D61F-4FBF-B620-FA83CE599A50} + {4943C197-0742-480E-B1D3-6738D41582A3} = {4269F3C3-6B42-419B-B64A-3E6DC0F1574A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7173C9F3-A7F9-496E-9078-9156E35D6E16} diff --git a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisApplication.cs b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisApplication.cs index 4f9f8e624..29949a1d8 100644 --- a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisApplication.cs +++ b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisApplication.cs @@ -54,9 +54,9 @@ namespace Microsoft.Bot.Builder.AI.Luis throw new ArgumentException($"\"{applicationId}\" is not a valid LUIS application id."); } - if (!Guid.TryParse(endpointKey, out var subscriptionGuid)) + if (!Guid.TryParse(endpointKey, out var _)) { - throw new ArgumentException($"\"{subscriptionGuid}\" is not a valid LUIS subscription key."); + throw new ArgumentException($"\"{endpointKey}\" is not a valid LUIS subscription key."); } if (string.IsNullOrWhiteSpace(endpoint)) diff --git a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizer.cs b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizer.cs index a3d033378..5b8f75f6e 100644 --- a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizer.cs +++ b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizer.cs @@ -20,7 +20,7 @@ namespace Microsoft.Bot.Builder.AI.Luis /// /// A LUIS based implementation of . /// - public class LuisRecognizer : Recognizer, ITelemetryRecognizer + public class LuisRecognizer : ITelemetryRecognizer { [JsonProperty("$kind")] public const string DeclarativeType = "Microsoft.LuisRecognizer"; @@ -198,11 +198,6 @@ namespace Microsoft.Bot.Builder.AI.Luis return result; } - public override Task RecognizeAsync(DialogContext dialogContext, CancellationToken cancellationToken = default) - { - return this.RecognizeAsync(dialogContext.Context, cancellationToken); - } - /// /// Runs an utterance through a recognizer and returns a strongly-typed recognizer result. /// @@ -352,18 +347,6 @@ namespace Microsoft.Bot.Builder.AI.Luis return result; } - public override async Task RecognizeAsync(DialogContext dialogContext, string text, string locale, CancellationToken cancellationToken = default) - { - // TODO: Review how to better integrate this--it assumes the turn context contains the text/locale - var context = dialogContext.Context; - if (context.Activity == null || context.Activity.Type != ActivityTypes.Message || context.Activity.Text != text || context.Activity.Locale != locale) - { - throw new ArgumentException("TurnContext is different than text"); - } - - return await RecognizeAsync(dialogContext.Context, cancellationToken).ConfigureAwait(false); - } - /// /// Invoked prior to a LuisResult being logged. /// diff --git a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptions.cs b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptions.cs index e5721d851..ba42629b8 100644 --- a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptions.cs +++ b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptions.cs @@ -5,6 +5,7 @@ using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using Microsoft.Bot.Builder.Dialogs; namespace Microsoft.Bot.Builder.AI.Luis { @@ -50,6 +51,10 @@ namespace Microsoft.Bot.Builder.AI.Luis public bool IncludeAPIResults { get; set; } = false; + // Support original ITurnContext internal abstract Task RecognizeInternalAsync(ITurnContext turnContext, HttpClient httpClient, CancellationToken cancellationToken); + + // Support DialogContext + internal abstract Task RecognizeInternalAsync(DialogContext context, HttpClient httpClient, CancellationToken cancellationToken); } } diff --git a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptionsV2.cs b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptionsV2.cs index 18f0ac4c8..81c1fb803 100644 --- a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptionsV2.cs +++ b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptionsV2.cs @@ -7,9 +7,11 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime; using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime.Models; +using Microsoft.Bot.Builder.Dialogs; using Microsoft.Bot.Builder.TraceExtensions; using Microsoft.Bot.Schema; using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Serialization; namespace Microsoft.Bot.Builder.AI.Luis { @@ -40,6 +42,9 @@ namespace Microsoft.Bot.Builder.AI.Luis /// This settings will be used to call Luis. public LuisPredictionOptions PredictionOptions { get; set; } = new LuisPredictionOptions(); + internal override async Task RecognizeInternalAsync(DialogContext context, HttpClient httpClient, CancellationToken cancellationToken) + => await RecognizeInternalAsync(context.Context, httpClient, cancellationToken).ConfigureAwait(false); + internal override async Task RecognizeInternalAsync(ITurnContext turnContext, HttpClient httpClient, CancellationToken cancellationToken) { BotAssert.ContextNotNull(turnContext); diff --git a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptionsV3.cs b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptionsV3.cs index aff144a4d..e0d3db8c6 100644 --- a/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptionsV3.cs +++ b/libraries/Microsoft.Bot.Builder.AI.LUIS/LuisRecognizerOptionsV3.cs @@ -8,6 +8,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web; +using Microsoft.Bot.Builder.Dialogs; using Microsoft.Bot.Builder.TraceExtensions; using Microsoft.Bot.Schema; using Newtonsoft.Json; @@ -36,13 +37,72 @@ namespace Microsoft.Bot.Builder.AI.Luis { } + /// + /// Gets or sets entity recognizer to recognize external entities to pass to LUIS. + /// + /// External entity recognizer. + [JsonProperty("externalEntityRecognizer")] + public Recognizer ExternalEntityRecognizer { get; set; } + /// /// Gets or sets the Luis Prediction Options for the V3 endpoint. /// /// This settings will be used to call Luis. public LuisV3.LuisPredictionOptions PredictionOptions { get; set; } = new LuisV3.LuisPredictionOptions(); + internal override async Task RecognizeInternalAsync(DialogContext context, HttpClient httpClient, CancellationToken cancellationToken) + { + var utterance = Utterance(context.Context); + var options = PredictionOptions; + if (ExternalEntityRecognizer != null) + { + var matches = await ExternalEntityRecognizer.RecognizeAsync(context, cancellationToken).ConfigureAwait(false); + if (matches.Entities != null && matches.Entities.Count > 2) + { + options = new LuisV3.LuisPredictionOptions(options); + options.ExternalEntities = new List(); + var entities = matches.Entities; + var instance = entities["$instance"].ToObject(); + if (instance != null) + { + foreach (var child in entities) + { + // TODO: Checking for "text" because we get an extra non-real entity from the text recognizers + if (child.Key != "text" && child.Key != "$instance") + { + var instances = instance[child.Key]?.ToObject(); + var values = child.Value.ToObject(); + if (instances != null && values != null + && instances.Count == values.Count) + { + for (var i = 0; i < values.Count; ++i) + { + var childInstance = instances[i].ToObject(); + if (childInstance != null + && childInstance.ContainsKey("startIndex") + && childInstance.ContainsKey("endIndex")) + { + var start = childInstance["startIndex"].Value(); + var end = childInstance["endIndex"].Value(); + options.ExternalEntities.Add(new LuisV3.ExternalEntity(child.Key, start, end - start, child.Value)); + } + } + } + } + } + } + } + } + + return await RecognizeAsync(context.Context, utterance, options, httpClient, cancellationToken).ConfigureAwait(false); + } + internal override async Task RecognizeInternalAsync(ITurnContext turnContext, HttpClient httpClient, CancellationToken cancellationToken) + { + return await RecognizeAsync(turnContext, Utterance(turnContext), PredictionOptions, httpClient, cancellationToken).ConfigureAwait(false); + } + + private string Utterance(ITurnContext turnContext) { BotAssert.ContextNotNull(turnContext); if (turnContext.Activity == null || turnContext.Activity.Type != ActivityTypes.Message) @@ -50,8 +110,11 @@ namespace Microsoft.Bot.Builder.AI.Luis return null; } - var options = PredictionOptions; - var utterance = turnContext.Activity?.AsMessageActivity()?.Text; + return turnContext.Activity?.AsMessageActivity()?.Text; + } + + private async Task RecognizeAsync(ITurnContext turnContext, string utterance, LuisV3.LuisPredictionOptions options, HttpClient httpClient, CancellationToken cancellationToken) + { RecognizerResult recognizerResult; JObject luisResponse = null; @@ -66,8 +129,8 @@ namespace Microsoft.Bot.Builder.AI.Luis } else { - var uri = BuildUri(); - var content = BuildRequestBody(utterance); + var uri = BuildUri(options); + var content = BuildRequestBody(utterance, options); httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", Application.EndpointKey); var response = await httpClient.PostAsync(uri.Uri, new StringContent(content.ToString(), System.Text.Encoding.UTF8, "application/json")).ConfigureAwait(false); response.EnsureSuccessStatusCode(); @@ -80,7 +143,7 @@ namespace Microsoft.Bot.Builder.AI.Luis recognizerResult.AlteredText = prediction["alteredQuery"]?.Value(); recognizerResult.Intents = LuisV3.LuisUtil.GetIntents(prediction); recognizerResult.Entities = LuisV3.LuisUtil.ExtractEntitiesAndMetadata(prediction); - + LuisV3.LuisUtil.AddProperties(prediction, recognizerResult); if (IncludeAPIResults) { @@ -113,9 +176,8 @@ namespace Microsoft.Bot.Builder.AI.Luis return recognizerResult; } - private UriBuilder BuildUri() + private UriBuilder BuildUri(LuisV3.LuisPredictionOptions options) { - var options = PredictionOptions; var path = new StringBuilder(Application.Endpoint); path.Append($"/luis/prediction/v3.0/apps/{Application.ApplicationId}"); @@ -138,9 +200,8 @@ namespace Microsoft.Bot.Builder.AI.Luis return uri; } - private JObject BuildRequestBody(string utterance) + private JObject BuildRequestBody(string utterance, LuisV3.LuisPredictionOptions options) { - var options = PredictionOptions; var content = new JObject { { "query", utterance }, diff --git a/libraries/Microsoft.Bot.Builder.AI.LUIS/Microsoft.Bot.Builder.AI.Luis.csproj b/libraries/Microsoft.Bot.Builder.AI.LUIS/Microsoft.Bot.Builder.AI.Luis.csproj index b4a13b0d4..5e64a349f 100644 --- a/libraries/Microsoft.Bot.Builder.AI.LUIS/Microsoft.Bot.Builder.AI.Luis.csproj +++ b/libraries/Microsoft.Bot.Builder.AI.LUIS/Microsoft.Bot.Builder.AI.Luis.csproj @@ -34,7 +34,7 @@ - + all diff --git a/libraries/Microsoft.Bot.Builder.AI.LUIS/V3/LuisPredictionOptions.cs b/libraries/Microsoft.Bot.Builder.AI.LUIS/V3/LuisPredictionOptions.cs index e297c5b07..912f9c52c 100644 --- a/libraries/Microsoft.Bot.Builder.AI.LUIS/V3/LuisPredictionOptions.cs +++ b/libraries/Microsoft.Bot.Builder.AI.LUIS/V3/LuisPredictionOptions.cs @@ -11,6 +11,30 @@ namespace Microsoft.Bot.Builder.AI.LuisV3 /// public class LuisPredictionOptions { + /// + /// Initializes a new instance of the class. + /// + public LuisPredictionOptions() + { + } + + /// + /// Initializes a new instance of the class from an existing instance. + /// + /// Source of values. + public LuisPredictionOptions(LuisPredictionOptions other) + { + IncludeAllIntents = other.IncludeAllIntents; + IncludeAPIResults = other.IncludeAPIResults; + IncludeInstanceData = other.IncludeInstanceData; + Log = other.Log; + DynamicLists = other.DynamicLists; + ExternalEntities = other.ExternalEntities; + PreferExternalEntities = other.PreferExternalEntities; + Slot = other.Slot; + Version = other.Version; + } + /// /// Gets or sets a value indicating whether all intents come back or only the top one. /// diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BaseInvokeDialog.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BaseInvokeDialog.cs index 7fa94f417..4e8c914c3 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BaseInvokeDialog.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BaseInvokeDialog.cs @@ -4,8 +4,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; using Newtonsoft.Json.Linq; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginDialog.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginDialog.cs index 26408588e..8b7c2b4e2 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginDialog.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginDialog.cs @@ -2,11 +2,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. using System; -using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BreakLoop.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BreakLoop.cs index 311050f25..a7e0b00f6 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BreakLoop.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BreakLoop.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/CancelAllDialogs.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/CancelAllDialogs.cs index 83c77c14f..bb1e084e6 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/CancelAllDialogs.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/CancelAllDialogs.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/CodeAction.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/CodeAction.cs index 4539033ce..90c87079c 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/CodeAction.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/CodeAction.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ContinueLoop.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ContinueLoop.cs index b6378b895..bf8a2a0ec 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ContinueLoop.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ContinueLoop.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DebugBreak.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DebugBreak.cs index 5307d160f..7348e84d3 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DebugBreak.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DebugBreak.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteActivity.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteActivity.cs index 278d21cfe..231b9949a 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteActivity.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteActivity.cs @@ -5,9 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Templates; -using Microsoft.Bot.Expressions; -using Microsoft.Bot.Schema; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteProperties.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteProperties.cs index 0bbbbe2db..94bd8697e 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteProperties.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteProperties.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteProperty.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteProperty.cs index f1ebc612f..c66a1e221 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteProperty.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/DeleteProperty.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EditActions.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EditActions.cs index d56ff17cd..c6a100996 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EditActions.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EditActions.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EditArray.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EditArray.cs index 0c35ed573..9b9bc7ade 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EditArray.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EditArray.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EmitEvent.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EmitEvent.cs index 48fafeea2..74f21d760 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EmitEvent.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EmitEvent.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EndDialog.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EndDialog.cs index 8aa153973..4a42e4574 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EndDialog.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EndDialog.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EndTurn.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EndTurn.cs index eea83a50c..bdaf8bca4 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EndTurn.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/EndTurn.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ForEach.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ForEach.cs index 68012e58c..bb8734990 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ForEach.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ForEach.cs @@ -2,11 +2,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. using System; -using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; using Newtonsoft.Json.Linq; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ForEachPage.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ForEachPage.cs index 31f09c138..c5dea7425 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ForEachPage.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ForEachPage.cs @@ -5,10 +5,9 @@ using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; -using System.Security.Cryptography.X509Certificates; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; using Newtonsoft.Json.Linq; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GetActivityMembers.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GetActivityMembers.cs index 43dab1f7e..25857a273 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GetActivityMembers.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GetActivityMembers.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GetConversationMembers.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GetConversationMembers.cs index 75aa7e440..af857c87c 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GetConversationMembers.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GetConversationMembers.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GotoAction.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GotoAction.cs index f177b5f54..e296f911d 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GotoAction.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/GotoAction.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/HttpRequest.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/HttpRequest.cs index e01c159a9..3877011fd 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/HttpRequest.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/HttpRequest.cs @@ -11,6 +11,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.TraceExtensions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Newtonsoft.Json; using Newtonsoft.Json.Converters; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/IfCondition.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/IfCondition.cs index d1b38eea6..9a67fd731 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/IfCondition.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/IfCondition.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/LogAction.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/LogAction.cs index a3279aa04..c1033d7cb 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/LogAction.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/LogAction.cs @@ -6,9 +6,8 @@ using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs.Adaptive.Templates; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/PropertyAssignment.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/PropertyAssignment.cs index e3e57532b..a1736b5b4 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/PropertyAssignment.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/PropertyAssignment.cs @@ -1,6 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Text; +// Licensed under the MIT License. +// Copyright (c) Microsoft Corporation. All rights reserved. + +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/RepeatDialog.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/RepeatDialog.cs index 88601f38c..4f5302ccc 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/RepeatDialog.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/RepeatDialog.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ReplaceDialog.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ReplaceDialog.cs index 7129e15af..44107cb6d 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ReplaceDialog.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/ReplaceDialog.cs @@ -2,11 +2,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. using System; -using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SendActivity.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SendActivity.cs index 40dbd203e..237df13e2 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SendActivity.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SendActivity.cs @@ -7,7 +7,7 @@ using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs.Adaptive.Templates; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Newtonsoft.Json; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SetProperties.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SetProperties.cs index 10249aa2d..9c5718950 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SetProperties.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SetProperties.cs @@ -3,11 +3,10 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SetProperty.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SetProperty.cs index 407ceee36..d0ff1c847 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SetProperty.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SetProperty.cs @@ -5,8 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SignOutUser.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SignOutUser.cs index f1e3c5b21..e590ee205 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SignOutUser.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SignOutUser.cs @@ -5,9 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Templates; -using Microsoft.Bot.Expressions; -using Microsoft.Bot.Schema; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SwitchCondition.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SwitchCondition.cs index d89ed0f7d..6c654b8a9 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SwitchCondition.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/SwitchCondition.cs @@ -3,11 +3,11 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/TraceActivity.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/TraceActivity.cs index b36cfcb82..fd2c10c5e 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/TraceActivity.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/TraceActivity.cs @@ -5,7 +5,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Newtonsoft.Json; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/UpdateActivity.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/UpdateActivity.cs index 7f5851fe5..03c5bacb3 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/UpdateActivity.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/UpdateActivity.cs @@ -6,7 +6,7 @@ using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs.Adaptive.Templates; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Newtonsoft.Json; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveAdapterExtensions.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveAdapterExtensions.cs index 2eb872a73..b87b1c606 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveAdapterExtensions.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveAdapterExtensions.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using Microsoft.Bot.Builder.AI.Luis; using Microsoft.Bot.Builder.Dialogs.Declarative; namespace Microsoft.Bot.Builder.Dialogs.Adaptive @@ -15,6 +16,7 @@ namespace Microsoft.Bot.Builder.Dialogs.Adaptive public static BotAdapter UseAdaptiveDialogs(this BotAdapter botAdapter) { DeclarativeTypeLoader.AddComponent(new AdaptiveComponentRegistration()); + DeclarativeTypeLoader.AddComponent(new LuisComponentRegistration()); return botAdapter; } } diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveComponentRegistration.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveComponentRegistration.cs index 4b2e082e2..a4ff3bc36 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveComponentRegistration.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveComponentRegistration.cs @@ -22,6 +22,7 @@ using Microsoft.Bot.Builder.Dialogs.Declarative.Converters; using Microsoft.Bot.Builder.Dialogs.Declarative.Loaders; using Microsoft.Bot.Builder.Dialogs.Declarative.Resolvers; using Microsoft.Bot.Builder.Dialogs.Declarative.Types; +using Microsoft.Bot.Expressions.Properties.Converters; using Newtonsoft.Json; using static Microsoft.Bot.Builder.Dialogs.Adaptive.Actions.EditArray; @@ -107,7 +108,6 @@ namespace Microsoft.Bot.Builder.Dialogs.Adaptive yield return new TypeRegistration(Ask.DeclarativeType); // Recognizers - yield return new TypeRegistration(LuisRecognizer.DeclarativeType) { CustomDeserializer = new LuisRecognizerLoader(TypeFactory.Configuration) }; yield return new TypeRegistration(RegexRecognizer.DeclarativeType); yield return new TypeRegistration(MultiLanguageRecognizer.DeclarativeType); yield return new TypeRegistration(RecognizerSet.DeclarativeType); diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Generators/TemplateEngineLanguageGenerator.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Generators/TemplateEngineLanguageGenerator.cs index a431113d5..652a3e8e5 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Generators/TemplateEngineLanguageGenerator.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Generators/TemplateEngineLanguageGenerator.cs @@ -4,10 +4,10 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; using Microsoft.Bot.Builder.LanguageGeneration; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Generators diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/Ask.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/Ask.cs index 2c9ce411a..41b7902e9 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/Ask.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/Ask.cs @@ -8,7 +8,7 @@ using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs.Adaptive.Templates; -using Microsoft.Bot.Builder.Dialogs.Declarative; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/AttachmentInput.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/AttachmentInput.cs index d69be5551..586293af8 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/AttachmentInput.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/AttachmentInput.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading.Tasks; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Newtonsoft.Json; using Newtonsoft.Json.Converters; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/ChoiceInput.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/ChoiceInput.cs index 7566f2163..fb9a161cb 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/ChoiceInput.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/ChoiceInput.cs @@ -3,15 +3,13 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Builder.Dialogs.Declarative; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Newtonsoft.Json; -using Newtonsoft.Json.Converters; using static Microsoft.Recognizers.Text.Culture; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Input diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/ConfirmInput.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/ConfirmInput.cs index 465e1000e..cf4441566 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/ConfirmInput.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/ConfirmInput.cs @@ -6,8 +6,7 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Microsoft.Recognizers.Text.Choice; using Newtonsoft.Json; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/DateTimeInput.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/DateTimeInput.cs index 0affded32..f7fa7d400 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/DateTimeInput.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/DateTimeInput.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Recognizers.Text.DateTime; using Newtonsoft.Json; using static Microsoft.Recognizers.Text.Culture; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/InputDialog.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/InputDialog.cs index aa5b2a7a1..235e55347 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/InputDialog.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/InputDialog.cs @@ -3,13 +3,12 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Builder.LanguageGeneration; using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Newtonsoft.Json; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/NumberInput.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/NumberInput.cs index 3cc0855dd..122fe5502 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/NumberInput.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/NumberInput.cs @@ -4,10 +4,9 @@ using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Recognizers.Text.Number; using Newtonsoft.Json; -using Newtonsoft.Json.Converters; using static Microsoft.Recognizers.Text.Culture; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Input diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/OAuthInput.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/OAuthInput.cs index cb0c8a98b..9d79ba5c6 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/OAuthInput.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/OAuthInput.cs @@ -7,9 +7,8 @@ using System.Linq; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Templates; using Microsoft.Bot.Connector; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Newtonsoft.Json; using Newtonsoft.Json.Linq; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/TextInput.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/TextInput.cs index a65e39fa7..65b349f98 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/TextInput.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Input/TextInput.cs @@ -4,7 +4,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Input diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LUIS/DynamicList.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LUIS/DynamicList.cs new file mode 100644 index 000000000..83ffe004a --- /dev/null +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LUIS/DynamicList.cs @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. + +using System.Collections.Generic; +using Microsoft.Bot.Builder.AI.LuisV3; +using Newtonsoft.Json; + +namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Luis +{ + /// + /// Defines an extension for a list entity. + /// + public class DynamicList + { + /// + /// Initializes a new instance of the class. + /// + public DynamicList() + { + } + + /// + /// Gets or sets the name of the list entity to extend. + /// + /// + /// The name of the list entity to extend. + /// + [JsonProperty(PropertyName = "entity")] + public string Entity { get; set; } + + /// + /// Gets or sets the lists to append on the extended list entity. + /// + /// + /// The lists to append on the extended list entity. + /// + [JsonProperty(PropertyName = "list")] + public IList List { get; set; } + } +} diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LUIS/LuisAdaptiveRecognizer.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LUIS/LuisAdaptiveRecognizer.cs new file mode 100644 index 000000000..43a128374 --- /dev/null +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LUIS/LuisAdaptiveRecognizer.cs @@ -0,0 +1,131 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder.AI.Luis; +using Microsoft.Bot.Expressions.Properties; +using Microsoft.Bot.Schema; +using Newtonsoft.Json; + +namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Recognizers +{ + /// + /// Class that represents an adaptive LUIS recognizer. + /// + public class LuisAdaptiveRecognizer : Recognizer + { + [JsonProperty("$kind")] + public const string DeclarativeType = "Microsoft.LuisRecognizer"; + + /// + /// Initializes a new instance of the class. + /// + public LuisAdaptiveRecognizer() + { + } + + /// + /// Gets or sets LUIS application ID. + /// + /// Application ID. + [JsonProperty("applicationId")] + public StringExpression ApplicationId { get; set; } + + /// + /// Gets or sets LUIS endpoint like https://westus.api.cognitive.microsoft.com to query. + /// + /// LUIS Endpoint. + [JsonProperty("endpoint")] + public StringExpression Endpoint { get; set; } + + /// + /// Gets or sets the key used to talk to a LUIS endpoint. + /// + /// Endpoint key. + [JsonProperty("endpointKey")] + public StringExpression EndpointKey { get; set; } + + /// + /// Gets or sets an external entity recognizer. + /// + /// This recognizer is run before calling LUIS and the results are passed to LUIS. + /// Recognizer. + [JsonProperty("externalEntityRecognizer")] + public Recognizer ExternalEntityRecognizer { get; set; } + + /// + /// Gets or sets an expression or constant LUIS dynamic list. + /// + /// Dynamic lists. + [JsonProperty("dynamicLists")] + public ArrayExpression DynamicLists { get; set; } + + /// + /// Gets or sets LUIS prediction options. + /// + /// Prediction options. + [JsonProperty("predictionOptions")] + public AI.LuisV3.LuisPredictionOptions PredictionOptions { get; set; } = new AI.LuisV3.LuisPredictionOptions(); + + /// + /// Gets or sets HTTP client handler. + /// + /// HTTP client handler. + [JsonIgnore] + public HttpClientHandler HttpClient { get; set; } + + /// + /// Gets or sets . + /// + /// Telemetry client. + [JsonIgnore] + public IBotTelemetryClient TelemetryClient { get; set; } = new NullBotTelemetryClient(); + + /// + public override async Task RecognizeAsync(DialogContext dialogContext, string text, string locale, CancellationToken cancellationToken = default) + { + var wrapper = new LuisRecognizer(RecognizerOptions(dialogContext), HttpClient); + var context = dialogContext.Context; + if (context.Activity == null || context.Activity.Type != ActivityTypes.Message || context.Activity.Text != text || context.Activity.Locale != locale) + { + throw new ArgumentException("TurnContext is different than text"); + } + + return await wrapper.RecognizeAsync(dialogContext.Context, cancellationToken).ConfigureAwait(false); + } + + /// + /// Construct V3 recognizer options from the current dialog context. + /// + /// Context. + /// LUIS Recognizer options. + public LuisRecognizerOptionsV3 RecognizerOptions(DialogContext dialogContext) + { + var options = PredictionOptions; + var dcState = dialogContext.GetState(); + if (DynamicLists != null) + { + options = new AI.LuisV3.LuisPredictionOptions(options); + var list = new List(); + foreach (var listEntity in DynamicLists.GetValue(dcState)) + { + list.Add(new AI.LuisV3.DynamicList(listEntity.Entity, listEntity.List)); + } + + options.DynamicLists = list; + } + + var application = new LuisApplication(ApplicationId.GetValue(dcState), EndpointKey.GetValue(dcState), Endpoint.GetValue(dcState)); + return new LuisRecognizerOptionsV3(application) + { + ExternalEntityRecognizer = ExternalEntityRecognizer, + PredictionOptions = options, + TelemetryClient = TelemetryClient + }; + } + } +} diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LUIS/LuisComponentRegistration.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LUIS/LuisComponentRegistration.cs new file mode 100644 index 000000000..aab56cb01 --- /dev/null +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LUIS/LuisComponentRegistration.cs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Luis; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Recognizers; +using Microsoft.Bot.Builder.Dialogs.Debugging; +using Microsoft.Bot.Builder.Dialogs.Declarative; +using Microsoft.Bot.Builder.Dialogs.Declarative.Resolvers; +using Microsoft.Bot.Expressions.Properties.Converters; +using Newtonsoft.Json; + +namespace Microsoft.Bot.Builder.AI.Luis +{ + public class LuisComponentRegistration : ComponentRegistration + { + public override IEnumerable GetTypes() + { + yield return new TypeRegistration(LuisAdaptiveRecognizer.DeclarativeType); + } + + public override IEnumerable GetConverters(ISourceMap sourceMap, IRefResolver refResolver, Stack paths) + { + yield return new ArrayExpressionConverter(); + } + } +} diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LanguageGenerationComponentRegistration.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LanguageGenerationComponentRegistration.cs index 2ea3cb105..a4b67fc71 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LanguageGenerationComponentRegistration.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/LanguageGenerationComponentRegistration.cs @@ -1,10 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using System; using System.Collections.Generic; -using System.Text; -using Microsoft.Bot.Builder.AI.Luis; using Microsoft.Bot.Builder.Dialogs.Adaptive.Templates; using Microsoft.Bot.Builder.Dialogs.Debugging; using Microsoft.Bot.Builder.Dialogs.Declarative; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/DialogContextExtensions.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/DialogContextExtensions.cs index de03209de..6417c2fbe 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/DialogContextExtensions.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/DialogContextExtensions.cs @@ -3,7 +3,6 @@ using System; using Microsoft.Bot.Builder.Dialogs.Memory; -using Microsoft.Recognizers.Text.DateTime.Chinese; namespace Microsoft.Bot.Builder.Dialogs { diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/DialogExpression.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/DialogExpression.cs index 640a43fa7..b18ed78d6 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/DialogExpression.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/DialogExpression.cs @@ -1,8 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; -using Newtonsoft.Json; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json.Linq; namespace Microsoft.Bot.Builder.Dialogs.Adaptive diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Microsoft.Bot.Builder.Dialogs.Adaptive.csproj b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Microsoft.Bot.Builder.Dialogs.Adaptive.csproj index c2b421464..9bfefe3d3 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Microsoft.Bot.Builder.Dialogs.Adaptive.csproj +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Microsoft.Bot.Builder.Dialogs.Adaptive.csproj @@ -56,10 +56,12 @@ + + diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerComponentRegistration.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerComponentRegistration.cs index 03fa6e050..2fa9d86ba 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerComponentRegistration.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerComponentRegistration.cs @@ -2,13 +2,12 @@ // Licensed under the MIT License. using System.Collections.Generic; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; using Microsoft.Bot.Builder.Dialogs.Adaptive.QnA; using Microsoft.Bot.Builder.Dialogs.Adaptive.QnA.Recognizers; using Microsoft.Bot.Builder.Dialogs.Debugging; using Microsoft.Bot.Builder.Dialogs.Declarative; using Microsoft.Bot.Builder.Dialogs.Declarative.Resolvers; +using Microsoft.Bot.Expressions.Properties.Converters; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.AI.QnA diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerDialog2.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerDialog2.cs index 77ee71325..59d923298 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerDialog2.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerDialog2.cs @@ -3,7 +3,7 @@ using System.Runtime.CompilerServices; using System.Threading.Tasks; using Microsoft.Bot.Builder.AI.QnA; using Microsoft.Bot.Builder.AI.QnA.Dialogs; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Newtonsoft.Json; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerRecognizer.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerRecognizer.cs index a230b4605..377760416 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerRecognizer.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/QnAMaker/QnAMakerRecognizer.cs @@ -9,6 +9,7 @@ using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.AI.QnA; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; using Newtonsoft.Json.Linq; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BeginDialog.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BeginDialog.schema index 232e005a9..e01891be4 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BeginDialog.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BeginDialog.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string"], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -22,7 +22,7 @@ "dialog": { "$kind": "Microsoft.IDialog", "$role": "expression", - "type": ["string", "object"], + "type": "object", "title": "Dialog name", "description": "Name of the dialog to call.", "examples": [ @@ -31,7 +31,7 @@ }, "options": { "$role": "expression", - "type": [ "string", "object" ], + "type": "object", "title": "Options", "description": "One or more options that are passed to the dialog that is called.", "additionalProperties": { @@ -41,7 +41,7 @@ }, "activityProcessed": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Activity Processed", "description": "When set to false, the dialog that is called can process the current activity.", "default": true diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BreakLoop.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BreakLoop.schema index ef59ead84..dfed64660 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BreakLoop.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BreakLoop.schema @@ -13,7 +13,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.CancelAllDialogs.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.CancelAllDialogs.schema index 5b8f25b22..4d8cea53b 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.CancelAllDialogs.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.CancelAllDialogs.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -27,7 +27,14 @@ }, "eventValue": { "$role": "expression", - "type": [ "object", "array", "number", "integer", "boolean", "string" ], + "type": [ + "object", + "array", + "number", + "integer", + "boolean", + "string" + ], "title": "Event value", "description": "Value to emit with the event (optional).", "additionalProperties": true diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ContinueLoop.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ContinueLoop.schema index 2308620f1..d555e9b41 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ContinueLoop.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ContinueLoop.schema @@ -13,7 +13,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DebugBreak.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DebugBreak.schema index 0c7da75e0..cc86d5543 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DebugBreak.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DebugBreak.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteActivity.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteActivity.schema index 1436e1a76..a2a806d89 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteActivity.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteActivity.schema @@ -25,7 +25,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteProperties.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteProperties.schema index 0f3191eaa..4c703b3f4 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteProperties.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteProperties.schema @@ -15,7 +15,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteProperty.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteProperty.schema index eaa9f4ff5..07f4d6a87 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteProperty.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.DeleteProperty.schema @@ -15,7 +15,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EditActions.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EditActions.schema index 700c08354..56742268c 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EditActions.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EditActions.schema @@ -16,7 +16,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EditArray.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EditArray.schema index cdc086976..96d407a9f 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EditArray.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EditArray.schema @@ -29,7 +29,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -50,7 +50,14 @@ }, "value": { "$role": "expression", - "type": [ "object", "array", "number", "integer", "boolean", "string" ], + "type": [ + "object", + "array", + "number", + "integer", + "boolean", + "string" + ], "title": "Value", "description": "New value or expression.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EmitEvent.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EmitEvent.schema index 2bd5af02a..345af4bed 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EmitEvent.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EmitEvent.schema @@ -15,7 +15,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -44,13 +44,20 @@ }, "eventValue": { "$role": "expression", - "type": [ "object", "array", "number", "integer", "boolean", "string" ], + "type": [ + "object", + "array", + "number", + "integer", + "boolean", + "string" + ], "title": "Event value", "description": "Value to emit with the event (optional)." }, "bubbleEvent": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Bubble event", "description": "If true this event is passed on to parent dialogs.", "default": false diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EndDialog.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EndDialog.schema index caecc1846..8217bb92a 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EndDialog.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EndDialog.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -21,7 +21,14 @@ }, "value": { "$role": "expression", - "type": [ "object", "array", "number", "integer", "boolean", "string" ], + "type": [ + "object", + "array", + "number", + "integer", + "boolean", + "string" + ], "title": "Value", "description": "Result value returned to the parent dialog.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EndTurn.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EndTurn.schema index 918c7a474..3ad075387 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EndTurn.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.EndTurn.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.Foreach.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.Foreach.schema index e80c089c9..e15fe7e08 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.Foreach.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.Foreach.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -21,7 +21,7 @@ }, "itemsProperty": { "$role": "expression", - "type": [ "string" ], + "type": "string", "title": "Items property", "description": "Property that holds the array.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ForeachPage.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ForeachPage.schema index 0cb62697d..e5d4df082 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ForeachPage.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ForeachPage.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -38,7 +38,7 @@ }, "pageSize": { "$role": "expression", - "type": [ "integer", "string" ], + "type": "integer", "title": "Page size", "description": "Number of items in each page.", "default": 10 diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GetActivityMembers.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GetActivityMembers.schema index 13ed133d9..6977e22b6 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GetActivityMembers.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GetActivityMembers.schema @@ -21,7 +21,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GetConversationMembers.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GetConversationMembers.schema index f489b70b6..9b16eb7bc 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GetConversationMembers.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GetConversationMembers.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GotoAction.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GotoAction.schema index 192d6508c..028cc3b0c 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GotoAction.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.GotoAction.schema @@ -15,7 +15,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.HttpRequest.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.HttpRequest.schema index 8b6149446..9496cc004 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.HttpRequest.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.HttpRequest.schema @@ -16,7 +16,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -50,7 +50,14 @@ }, "body": { "$role": "expression", - "type": [ "object", "array", "number", "integer", "boolean", "string" ], + "type": [ + "object", + "array", + "number", + "integer", + "boolean", + "string" + ], "title": "Body", "description": "Body to include in the HTTP call (supports data binding).", "additionalProperties": true diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.IfCondition.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.IfCondition.schema index 8cae6b171..844125bc2 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.IfCondition.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.IfCondition.schema @@ -16,7 +16,7 @@ }, "condition": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Condition", "description": "Expression to evaluate.", "examples": [ @@ -25,7 +25,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.LogAction.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.LogAction.schema index b86c33e02..0940b18f3 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.LogAction.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.LogAction.schema @@ -15,7 +15,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -36,7 +36,7 @@ }, "traceActivity": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Send Trace Activity", "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator).", "default": false diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.RepeatDialog.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.RepeatDialog.schema index 197d23d87..c7ede3cb7 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.RepeatDialog.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.RepeatDialog.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -21,7 +21,7 @@ }, "options": { "$role": "expression", - "type": [ "string", "object" ], + "type": "object", "title": "Options", "description": "One or more options that are passed to the dialog that is called.", "additionalProperties": { @@ -31,7 +31,7 @@ }, "activityProcessed": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Activity Processed", "description": "When set to false, the dialog that is called can process the current activity.", "default": true diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ReplaceDialog.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ReplaceDialog.schema index f9488a77f..79b34a5a1 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ReplaceDialog.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.ReplaceDialog.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -22,7 +22,7 @@ "dialog": { "$kind": "Microsoft.IDialog", "$role": "expression", - "type": ["string", "object"], + "type": "string", "title": "Dialog name", "description": "Name of the dialog to call.", "examples": [ @@ -31,7 +31,7 @@ }, "options": { "$role": "expression", - "type": [ "string", "object" ], + "type": "object", "title": "Options", "description": "One or more options that are passed to the dialog that is called.", "additionalProperties": { @@ -41,7 +41,7 @@ }, "activityProcessed": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Activity Processed", "description": "When set to false, the dialog that is called can process the current activity.", "default": true diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SendActivity.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SendActivity.schema index 5a7042ffb..7719b329d 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SendActivity.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SendActivity.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SetProperties.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SetProperties.schema index d24df64ad..fd171bed0 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SetProperties.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SetProperties.schema @@ -15,7 +15,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -40,7 +40,14 @@ }, "value": { "$role": "expression", - "type": [ "object", "array", "number", "integer", "boolean", "string" ], + "type": [ + "object", + "array", + "number", + "integer", + "boolean", + "string" + ], "title": "Value", "description": "New value or expression.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SetProperty.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SetProperty.schema index dd115df02..0af22c9b0 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SetProperty.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SetProperty.schema @@ -16,7 +16,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -34,7 +34,14 @@ }, "value": { "$role": "expression", - "type": [ "object", "array", "number", "integer", "boolean", "string" ], + "type": [ + "object", + "array", + "number", + "integer", + "boolean", + "string" + ], "title": "Value", "description": "New value or expression.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SignOutUser.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SignOutUser.schema index 89ecbd122..c3c1dc788 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SignOutUser.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SignOutUser.schema @@ -27,7 +27,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SwitchCondition.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SwitchCondition.schema index f8472c6e7..03eaae4b7 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SwitchCondition.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.SwitchCondition.schema @@ -24,7 +24,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -40,7 +40,12 @@ "properties": { "value": { "$role": "expression", - "type": [ "number", "integer", "boolean", "string" ], + "type": [ + "number", + "integer", + "boolean", + "string" + ], "title": "Value", "description": "Value.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.TraceActivity.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.TraceActivity.schema index b86b0a0a0..370c88aaf 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.TraceActivity.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.TraceActivity.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -39,7 +39,14 @@ }, "value": { "$role": "expression", - "type": [ "object", "array", "number", "integer", "boolean", "string" ], + "type": [ + "object", + "array", + "number", + "integer", + "boolean", + "string" + ], "title": "Value", "description": "Property that holds the value to send as trace activity." } diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.UpdateActivity.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.UpdateActivity.schema index f010896ef..098f3f63b 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.UpdateActivity.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.UpdateActivity.schema @@ -12,7 +12,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.Ask.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.Ask.schema index 94b1b6486..4b9d5b4d9 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.Ask.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.Ask.schema @@ -14,19 +14,12 @@ "$role": "expression", "title": "Expected Properties", "description": "Properties expected to be filled by entities from the user", - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - } - ] + "type": "array", + "items": { + "type": "string" + } } } } ] -} \ No newline at end of file +} diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.ChoiceInput.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.ChoiceInput.schema index 7a5ceaaf5..ab33777e2 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.ChoiceInput.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.ChoiceInput.schema @@ -22,10 +22,8 @@ "default": "value" }, "choices": { - "anyOf": [ - { - "$role": "expression" - }, + "$role": "expression", + "oneOf": [ { "type": "array", "items": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.OAuthInput.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.OAuthInput.schema index 6c7860886..6ffe6df22 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.OAuthInput.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.OAuthInput.schema @@ -16,7 +16,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -43,7 +43,7 @@ }, "timeout": { "$role": "expression", - "type": [ "integer", "string" ], + "type": "integer", "title": "Timeout", "description": "Time out setting for the OAuth signin card.", "default": "900000" @@ -75,7 +75,7 @@ }, "maxTurnCount": { "$role": "expression", - "type": [ "integer", "string" ], + "type": "integer", "title": "Max turn count", "description": "Maximum number of re-prompt attempts to collect information.", "default": 3, @@ -85,7 +85,14 @@ }, "defaultValue": { "$role": "expression", - "type": [ "object", "array", "number", "integer", "boolean", "string" ], + "type": [ + "object", + "array", + "number", + "integer", + "boolean", + "string" + ], "title": "Default value", "description": "Expression to examine on each turn of the conversation as possible value to the property.", "examples": [ @@ -94,7 +101,7 @@ }, "allowInterruptions": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Allow Interruptions", "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", "default": "true", diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.QnAMakerDialog.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.QnAMakerDialog.schema index 2cf8fe681..d65fd8cc9 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.QnAMakerDialog.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Dialogs/Microsoft.QnAMakerDialog.schema @@ -38,7 +38,7 @@ }, "threshold": { "$role": "expression", - "type": [ "number", "string" ], + "type": "number", "title": "Threshold", "description": "Threshold score to filter results.", "default": 0.3 @@ -65,7 +65,7 @@ }, "strictFilters": { "$role": "expression", - "type": [ "array", "string" ], + "type": "array", "title": "Strict Filters", "description": "Metadata filters to use when calling the QnA Maker KB.", "items": { @@ -86,7 +86,7 @@ }, "top": { "$role": "expression", - "type": [ "number", "string" ], + "type": "number", "title": "Top", "description": "The number of answers you want to retrieve.", "default": 3 diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Recognizers/Microsoft.LuisRecognizer.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Recognizers/Microsoft.LuisRecognizer.schema index e87ddaf92..c7642dd82 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Recognizers/Microsoft.LuisRecognizer.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Recognizers/Microsoft.LuisRecognizer.schema @@ -29,6 +29,52 @@ "description": "LUIS prediction key used to call endpoint.", "$role": "expression" }, + "externalEntityRecognizer": { + "title": "External Entity Recognizer", + "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", + "$kind": "Microsoft.Recognizer" + }, + "dynamicLists": { + "$role": "expression", + "title": "Dynamic lists", + "description": "Runtime defined entity lists.", + "type": "array", + "items": { + "title": "Entity list", + "description": "Lists of canonical values and synonyms for an entity.", + "type": "object", + "properties": { + "entity": { + "title": "Entity", + "description": "Entity to extend with a dynamic list.", + "type": "string" + }, + "list": { + "title": "Dynamic list", + "description": "List of canonical forms and synonyms.", + "type": "array", + "items": { + "type": "object", + "properties": { + "canonicalForm": { + "title": "Canonical form", + "description": "Resolution if any synonym matches.", + "type": "string" + }, + "synonyms": { + "title": "Synonyms", + "description": "List of synonyms for a canonical form.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, "predictionOptions": { "type": "object", "properties": { diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Recognizers/Microsoft.QnAMakerRecognizer.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Recognizers/Microsoft.QnAMakerRecognizer.schema index 8b6598000..2e66f16c3 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Recognizers/Microsoft.QnAMakerRecognizer.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Recognizers/Microsoft.QnAMakerRecognizer.schema @@ -12,18 +12,21 @@ }, "knowledgeBaseId": { "$role": "expression", + "type": "string", "title": "KnowledgeBase Id", "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", "default": "settings.qna.knowledgebaseid" }, "endpointKey": { "$role": "expression", + "type": "string", "title": "Endpoint Key", "description": "Endpoint key for the QnA Maker KB.", "default": "settings.qna.endpointkey" }, "hostname": { "$role": "expression", + "type": "string", "title": "Hostname", "description": "Hostname for your QnA Maker service.", "default": "settings.qna.hostname", diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Selectors/Microsoft.ConditionalSelector.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Selectors/Microsoft.ConditionalSelector.schema index 42e7d8458..ee1dfbbfc 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Selectors/Microsoft.ConditionalSelector.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Selectors/Microsoft.ConditionalSelector.schema @@ -6,7 +6,8 @@ "type": "object", "properties": { "condition": { - "$role": "expression" + "$role": "expression", + "type": "boolean" }, "ifTrue": { "$kind": "Microsoft.ITriggerSelector" diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertCondition.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertCondition.schema index de56d7649..1917f6489 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertCondition.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertCondition.schema @@ -7,6 +7,7 @@ "properties": { "condition": { "$role": "expression", + "type": "boolean", "title": "Condition", "description": "Expression to evalute", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReply.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReply.schema index cee6421b4..6d316f204 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReply.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReply.schema @@ -34,6 +34,7 @@ "description": "Sequence of expressions which must evaluate to true.", "items": { "$role": "expression", + "type": "boolean", "title": "Assertion", "description": "Assertion as an expression, which must evaluate to true or it will fail the test script.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReplyActivity.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReplyActivity.schema index 4af5d56ca..38960e39d 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReplyActivity.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReplyActivity.schema @@ -24,6 +24,7 @@ "description": "Sequence of expressions which must evaluate to true.", "items": { "$role": "expression", + "type": "boolean", "title": "Assertion", "description": "Assertion as an expression, which must evaluate to true or it will fail the test script.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReplyOneOf.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReplyOneOf.schema index 5789cbfa4..7d71e256a 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReplyOneOf.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Testing/Microsoft.Test.AssertReplyOneOf.schema @@ -37,6 +37,7 @@ "description": "Sequence of expressions which must evaluate to true.", "items": { "$role": "expression", + "type": "boolean", "title": "Assertion", "description": "Assertion as an expression, which must evaluate to true or it will fail the test script.", "examples": [ diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnCondition.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnCondition.schema index 934932bc5..36e6b65a5 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnCondition.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnCondition.schema @@ -7,6 +7,7 @@ "properties": { "condition": { "$role": "expression", + "type": "boolean", "title": "Condition", "description": "Condition (expression).", "examples": [ @@ -21,7 +22,7 @@ } }, "priority": { - "type": "string", + "type": "integer", "title": "priority", "description": "Priority expression of rule with 0 being the most important", "$role": "expression" diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Selectors/ConditionalSelector.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Selectors/ConditionalSelector.cs index 3e8c8e0a3..483e5708d 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Selectors/ConditionalSelector.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Selectors/ConditionalSelector.cs @@ -7,6 +7,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs.Adaptive.Conditions; using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Selectors diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/SimpleMultiLangGenerator.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/SimpleMultiLangGenerator.cs index 574a28d1e..8876a5c8b 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/SimpleMultiLangGenerator.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/SimpleMultiLangGenerator.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Bot.Builder.LanguageGeneration; +using Microsoft.Bot.Expressions.Properties; namespace Microsoft.Bot.Builder.Dialogs.Adaptive { diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisComponentRegistration.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisComponentRegistration.cs index 4985a03e3..b05477a95 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisComponentRegistration.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisComponentRegistration.cs @@ -2,8 +2,12 @@ // Licensed under the MIT License. using System.Collections.Generic; +using Microsoft.Bot.Builder.AI.Luis; +using Microsoft.Bot.Builder.Dialogs.Debugging; using Microsoft.Bot.Builder.Dialogs.Declarative; +using Microsoft.Bot.Builder.Dialogs.Declarative.Resolvers; using Microsoft.Bot.Builder.Dialogs.Declarative.Types; +using Newtonsoft.Json; namespace Microsoft.Bot.Builder.MockLuis { @@ -14,5 +18,13 @@ namespace Microsoft.Bot.Builder.MockLuis // Recognizers yield return new TypeRegistration("Microsoft.LuisRecognizer") { CustomDeserializer = new MockLuisLoader(TypeFactory.Configuration) }; } + + public override IEnumerable GetConverters(ISourceMap sourceMap, IRefResolver refResolver, Stack paths) + { + foreach (var converter in new LuisComponentRegistration().GetConverters(sourceMap, refResolver, paths)) + { + yield return converter; + } + } } } diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisExtensions.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisExtensions.cs index 4bc95ef17..4b4c06c96 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisExtensions.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisExtensions.cs @@ -64,11 +64,14 @@ namespace Microsoft.Bot.Builder.MockLuis return builder .SetBasePath(Path.GetFullPath(directory)) .AddJsonFile(settings, optional: false) - .AddInMemoryCollection(new KeyValuePair[] - { - new KeyValuePair("luis:endpoint", endpoint), - new KeyValuePair("luis:resources", directory) - }) + .AddInMemoryCollection(new Dictionary + { + { "luis:endpoint", endpoint }, + { "luis:resources", directory }, + + // Ensure there is a key even if there is no secret + { "luis:endpointKey", "00000000-0000-0000-0000-000000000000" } + }) .AddUserSecrets(userSecretId); } diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisLoader.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisLoader.cs index e9e775540..db7a1bbcd 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisLoader.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisLoader.cs @@ -2,8 +2,8 @@ // Licensed under the MIT License. using System; -using System.Runtime.Serialization; -using Microsoft.Bot.Builder.AI.Luis; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Recognizers; using Microsoft.Bot.Builder.Dialogs.Declarative; using Microsoft.Bot.Builder.Dialogs.Declarative.Loaders; using Microsoft.Extensions.Configuration; @@ -23,34 +23,15 @@ namespace Microsoft.Bot.Builder.MockLuis public object Load(JToken obj, JsonSerializer serializer, Type type) { - // If the luis service info is inlined with the recognizer, load it here for - // simpler json format - if (obj["applicationId"]?.Type == JTokenType.String) + var recognizer = obj.ToObject(serializer); + var name = recognizer.ApplicationId.ToString(); + if (name.StartsWith("=")) { - var luisApplication = obj.ToObject(); - var name = luisApplication.ApplicationId; - if (name.StartsWith("{") && name.EndsWith("}")) - { - var start = name.LastIndexOf('.') + 1; - var end = name.LastIndexOf('}'); - name = name.Substring(start, end - start); - } - - luisApplication.ApplicationId = configuration.LoadSetting(luisApplication.ApplicationId); - luisApplication.Endpoint = configuration.LoadSetting(luisApplication.Endpoint); - luisApplication.EndpointKey = configuration.LoadSetting(luisApplication.EndpointKey); - - var options = new LuisRecognizerOptionsV3(luisApplication); - if (obj["predictionOptions"] != null) - { - options.PredictionOptions = obj["predictionOptions"].ToObject(); - } - - return new MockLuisRecognizer(options, configuration.GetValue("luis:resources"), name); + var start = name.LastIndexOf('.') + 1; + name = name.Substring(start); } - // Else, just assume it is the verbose structure with LuisService as inner object - return obj.ToObject(serializer); + return new MockLuisRecognizer(recognizer, configuration.GetValue("luis:resources"), name); } } } diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisRecognizer.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisRecognizer.cs index 81cabf10b..2e5b5b90f 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisRecognizer.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Testing/MockLuis/MockLuisRecognizer.cs @@ -7,6 +7,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.AI.Luis; using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Recognizers; using Newtonsoft.Json; using RichardSzalay.MockHttp; @@ -21,24 +22,21 @@ namespace Microsoft.Bot.Builder.MockLuis public class MockLuisRecognizer : Recognizer { private string _responseDir; - private LuisRecognizerOptionsV3 _options; - private string _name; + private LuisAdaptiveRecognizer _recognizer; /// /// Initializes a new instance of the class. /// + /// LUIS recognizer definition. /// Where the settings file generated by lubuild is found. /// Name of the LUIS model. - /// LUIS options. public MockLuisRecognizer( - LuisRecognizerOptionsV3 options, + LuisAdaptiveRecognizer recognizer, string resourceDir, string name) { - _responseDir = Path.Combine(Path.GetDirectoryName(resourceDir), "cachedResponses", name); - _name = name; - _options = options; - _options.IncludeAPIResults = true; + _recognizer = recognizer; + _responseDir = Path.Combine(resourceDir, "cachedResponses", name); if (!Directory.Exists(_responseDir)) { Directory.CreateDirectory(_responseDir); @@ -47,33 +45,110 @@ namespace Microsoft.Bot.Builder.MockLuis public override async Task RecognizeAsync(DialogContext dialogContext, string text, string locale, CancellationToken cancellationToken = default) { - var client = GetMockedClient(text); - var recognizer = new LuisRecognizer(_options, client); - var result = await recognizer.RecognizeAsync(dialogContext, text, locale, cancellationToken); + var recognizer = _recognizer.RecognizerOptions(dialogContext); + recognizer.IncludeAPIResults = true; + var client = GetMockedClient(text, recognizer); + var wrapper = new LuisRecognizer(recognizer, client); + var result = await wrapper.RecognizeAsync(dialogContext.Context, cancellationToken).ConfigureAwait(false); if (client == null) { // Save response - var outPath = ResponsePath(text); + var outPath = ResponsePath(text, recognizer); File.WriteAllText(outPath, JsonConvert.SerializeObject(result.Properties["luisResult"])); } return result; } - private string ResponsePath(string utterance) - => Path.Combine(_responseDir, $"{utterance.StableHash()}.json"); + private string ResponsePath(string utterance, LuisRecognizerOptionsV3 recognizer) + { + var hash = utterance.StableHash(); + if (recognizer.ExternalEntityRecognizer != null) + { + hash ^= "external".StableHash(); + } - private HttpClientHandler GetMockedClient(string utterance) + if (recognizer.IncludeAPIResults) + { + hash ^= "api".StableHash(); + } + + if (recognizer.LogPersonalInformation) + { + hash ^= "personal".StableHash(); + } + + var options = recognizer.PredictionOptions; + if (options.DynamicLists != null) + { + foreach (var dynamicList in options.DynamicLists) + { + hash ^= dynamicList.Entity.StableHash(); + foreach (var choices in dynamicList.List) + { + hash ^= choices.CanonicalForm.StableHash(); + foreach (var synonym in choices.Synonyms) + { + hash ^= synonym.StableHash(); + } + } + } + } + + if (options.ExternalEntities != null) + { + foreach (var external in options.ExternalEntities) + { + hash ^= external.Entity.StableHash(); + hash ^= external.Start.ToString().StableHash(); + hash ^= external.Length.ToString().StableHash(); + } + } + + if (options.IncludeAllIntents) + { + hash ^= "all".StableHash(); + } + + if (options.IncludeInstanceData) + { + hash ^= "instance".StableHash(); + } + + if (options.Log ?? false) + { + hash ^= "log".StableHash(); + } + + if (options.PreferExternalEntities) + { + hash ^= "prefer".StableHash(); + } + + if (options.Slot != null) + { + hash ^= options.Slot.StableHash(); + } + + if (options.Version != null) + { + hash ^= options.Version.StableHash(); + } + + return Path.Combine(_responseDir, $"{hash}.json"); + } + + private HttpClientHandler GetMockedClient(string utterance, LuisRecognizerOptionsV3 recognizer) { HttpClientHandler client = null; if (utterance != null) { - var response = ResponsePath(utterance); + var response = ResponsePath(utterance, recognizer); if (File.Exists(response)) { var handler = new MockHttpMessageHandler(); handler - .When(_options.Application.Endpoint + "*") + .When(recognizer.Application.Endpoint + "*") .WithPartialContent(utterance) .Respond("application/json", File.OpenRead(response)); client = new MockedHttpClientHandler(handler.ToHttpClient()); diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/TriggerConditions/OnCondition.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/TriggerConditions/OnCondition.cs index 745ae3260..63a225c16 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/TriggerConditions/OnCondition.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/TriggerConditions/OnCondition.cs @@ -11,6 +11,7 @@ using Microsoft.Bot.Builder.Dialogs.Adaptive.Actions; using Microsoft.Bot.Builder.Dialogs.Debugging; using Microsoft.Bot.Builder.Dialogs.Memory; using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Expressions.TriggerTrees; using Newtonsoft.Json; diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Loaders/LuisRecognizerLoader.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Loaders/LuisRecognizerLoader.cs deleted file mode 100644 index 069db27ec..000000000 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Loaders/LuisRecognizerLoader.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using Microsoft.Bot.Builder.AI.Luis; -using Microsoft.Extensions.Configuration; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Newtonsoft.Json.Schema; - -namespace Microsoft.Bot.Builder.Dialogs.Declarative.Loaders -{ - public class LuisRecognizerLoader : ICustomDeserializer - { - private IConfiguration configuration; - - public LuisRecognizerLoader(IConfiguration configuration) - { - this.configuration = configuration; - } - - public object Load(JToken obj, JsonSerializer serializer, Type type) - { - // If the luis service info is inlined with the recognizer, load it here for - // simpler json format - if (obj["applicationId"]?.Type == JTokenType.String) - { - var luisApplication = obj.ToObject(); - luisApplication.ApplicationId = configuration.LoadSetting(luisApplication.ApplicationId); - luisApplication.Endpoint = configuration.LoadSetting(luisApplication.Endpoint); - luisApplication.EndpointKey = configuration.LoadSetting(luisApplication.EndpointKey); - var options = new LuisRecognizerOptionsV3(luisApplication); - if (obj["predictionOptions"] != null) - { - options.PredictionOptions = obj["predictionOptions"].ToObject(); - } - - return new LuisRecognizer(options); - } - - // Else, just assume it is the verbose structure with LuisService as inner object - return obj.ToObject(serializer); - } - } -} diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Microsoft.Bot.Builder.Dialogs.Declarative.csproj b/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Microsoft.Bot.Builder.Dialogs.Declarative.csproj index 28c28c20d..9b5d9e93d 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Microsoft.Bot.Builder.Dialogs.Declarative.csproj +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Declarative/Microsoft.Bot.Builder.Dialogs.Declarative.csproj @@ -41,8 +41,6 @@ - - @@ -50,7 +48,6 @@ - diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ArrayExpression.cs b/libraries/Microsoft.Bot.Expressions.Properties/ArrayExpression.cs similarity index 90% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ArrayExpression.cs rename to libraries/Microsoft.Bot.Expressions.Properties/ArrayExpression.cs index 57f5038c6..21521daa9 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ArrayExpression.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/ArrayExpression.cs @@ -1,13 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using System.Collections; using System.Collections.Generic; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; -using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// ArrayExpression - represents a property which is either a value of array of T or a string expression to bind to a array of T. @@ -44,7 +41,7 @@ namespace Microsoft.Bot.Builder.Dialogs.Adaptive /// /// Initializes a new instance of the class. /// - /// JToken which is either a collection of (T) or expression which evalutes to array. + /// JToken which is either a collection of (T) or expression which evaluates to array. public ArrayExpression(JToken value) : base(value) { diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/BoolExpression.cs b/libraries/Microsoft.Bot.Expressions.Properties/BoolExpression.cs similarity index 94% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/BoolExpression.cs rename to libraries/Microsoft.Bot.Expressions.Properties/BoolExpression.cs index 9094a444e..75d5d287e 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/BoolExpression.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/BoolExpression.cs @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; +using Microsoft.Bot.Expressions.Properties.Converters; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// BoolExpression - represents a property which is either a boolean or a string expression which resolves to a boolean. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ArrayExpressionConverter.cs b/libraries/Microsoft.Bot.Expressions.Properties/Converters/ArrayExpressionConverter.cs similarity index 83% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ArrayExpressionConverter.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Converters/ArrayExpressionConverter.cs index 99c390fab..a92fd0866 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ArrayExpressionConverter.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Converters/ArrayExpressionConverter.cs @@ -2,13 +2,11 @@ // Licensed under the MIT License. using System; -using System.Collections; -using System.Data.SqlTypes; -using Microsoft.Bot.Expressions; +using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters +namespace Microsoft.Bot.Expressions.Properties.Converters { /// /// Converter which allows json to be expression to object or static object. @@ -26,6 +24,8 @@ namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters } else { + // NOTE: This does not use the serializer because even we could deserialize here + // expression evaluation has no idea about converters. return new ArrayExpression(JToken.Load(reader)); } } diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/BoolExpressionConverter.cs b/libraries/Microsoft.Bot.Expressions.Properties/Converters/BoolExpressionConverter.cs similarity index 91% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/BoolExpressionConverter.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Converters/BoolExpressionConverter.cs index b675754db..81def6da4 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/BoolExpressionConverter.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Converters/BoolExpressionConverter.cs @@ -2,12 +2,10 @@ // Licensed under the MIT License. using System; -using System.Data.SqlTypes; -using Microsoft.Bot.Expressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters +namespace Microsoft.Bot.Expressions.Properties.Converters { /// /// Converter which allows json to be expression to object or static object. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/EnumExpressionConverter.cs b/libraries/Microsoft.Bot.Expressions.Properties/Converters/EnumExpressionConverter.cs similarity index 92% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/EnumExpressionConverter.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Converters/EnumExpressionConverter.cs index a022b5928..60d0ce7fb 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/EnumExpressionConverter.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Converters/EnumExpressionConverter.cs @@ -2,12 +2,10 @@ // Licensed under the MIT License. using System; -using System.Data.SqlTypes; -using Microsoft.Bot.Expressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters +namespace Microsoft.Bot.Expressions.Properties.Converters { /// /// Converter which allows json to be expression to object or static object. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ExpressionPropertyConverter.cs b/libraries/Microsoft.Bot.Expressions.Properties/Converters/ExpressionPropertyConverter.cs similarity index 91% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ExpressionPropertyConverter.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Converters/ExpressionPropertyConverter.cs index a75cf111c..56784529f 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ExpressionPropertyConverter.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Converters/ExpressionPropertyConverter.cs @@ -2,12 +2,10 @@ // Licensed under the MIT License. using System; -using System.Data.SqlTypes; -using Microsoft.Bot.Expressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters +namespace Microsoft.Bot.Expressions.Properties.Converters { /// /// Converter which allows json to be expression to object or static object. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/IntExpressionConverter.cs b/libraries/Microsoft.Bot.Expressions.Properties/Converters/IntExpressionConverter.cs similarity index 95% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/IntExpressionConverter.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Converters/IntExpressionConverter.cs index cd59692b7..9063ad840 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/IntExpressionConverter.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Converters/IntExpressionConverter.cs @@ -5,7 +5,7 @@ using System; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters +namespace Microsoft.Bot.Expressions.Properties.Converters { /// /// Converter which allows json to be expression to object or static object. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/NumberExpressionConverter.cs b/libraries/Microsoft.Bot.Expressions.Properties/Converters/NumberExpressionConverter.cs similarity index 91% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/NumberExpressionConverter.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Converters/NumberExpressionConverter.cs index e048e8cec..93d6b1ae7 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/NumberExpressionConverter.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Converters/NumberExpressionConverter.cs @@ -2,12 +2,10 @@ // Licensed under the MIT License. using System; -using System.Data.SqlTypes; -using Microsoft.Bot.Expressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters +namespace Microsoft.Bot.Expressions.Properties.Converters { /// /// Converter which allows json to be expression to object or static object. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ObjectExpressionConverter.cs b/libraries/Microsoft.Bot.Expressions.Properties/Converters/ObjectExpressionConverter.cs similarity index 91% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ObjectExpressionConverter.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Converters/ObjectExpressionConverter.cs index 80d7947de..500aabac7 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ObjectExpressionConverter.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Converters/ObjectExpressionConverter.cs @@ -2,12 +2,10 @@ // Licensed under the MIT License. using System; -using System.Data.SqlTypes; -using Microsoft.Bot.Expressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters +namespace Microsoft.Bot.Expressions.Properties.Converters { /// /// Converter which allows json to be expression to object or static object. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/StringExpressionConverter.cs b/libraries/Microsoft.Bot.Expressions.Properties/Converters/StringExpressionConverter.cs similarity index 91% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/StringExpressionConverter.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Converters/StringExpressionConverter.cs index d9a9cd801..8bc8bbebe 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/StringExpressionConverter.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Converters/StringExpressionConverter.cs @@ -2,12 +2,10 @@ // Licensed under the MIT License. using System; -using System.Data.SqlTypes; -using Microsoft.Bot.Expressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters +namespace Microsoft.Bot.Expressions.Properties.Converters { /// /// Converter which allows json to be expression to object or static object. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ValueExpressionConverter.cs b/libraries/Microsoft.Bot.Expressions.Properties/Converters/ValueExpressionConverter.cs similarity index 95% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ValueExpressionConverter.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Converters/ValueExpressionConverter.cs index 5a6e42d8e..311400c96 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/Converters/ValueExpressionConverter.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Converters/ValueExpressionConverter.cs @@ -5,7 +5,7 @@ using System; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Converters +namespace Microsoft.Bot.Expressions.Properties.Converters { /// /// Converter which allows json to be expression to object or static object. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/EnumExpression.cs b/libraries/Microsoft.Bot.Expressions.Properties/EnumExpression.cs similarity index 95% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/EnumExpression.cs rename to libraries/Microsoft.Bot.Expressions.Properties/EnumExpression.cs index e21e28ea6..1eb48a352 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/EnumExpression.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/EnumExpression.cs @@ -2,11 +2,9 @@ // Licensed under the MIT License. using System; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; -using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// EnumExpression - represents a property which is either a enum(T) or a string expression which resolves to a enum(T). diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ExpressionProperty.cs b/libraries/Microsoft.Bot.Expressions.Properties/ExpressionProperty.cs similarity index 95% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ExpressionProperty.cs rename to libraries/Microsoft.Bot.Expressions.Properties/ExpressionProperty.cs index 098156b38..21a88eeea 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ExpressionProperty.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/ExpressionProperty.cs @@ -1,15 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using System; -using System.Collections; -using System.Text; -using Microsoft.Bot.Builder.LanguageGeneration; -using Microsoft.Bot.Expressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// Base class which defines a Expression or value for a property. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Extensions.cs b/libraries/Microsoft.Bot.Expressions.Properties/Extensions.cs similarity index 92% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Extensions.cs rename to libraries/Microsoft.Bot.Expressions.Properties/Extensions.cs index 5c7bea522..b1d649da5 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Extensions.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/Extensions.cs @@ -1,10 +1,11 @@ -using System; +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Microsoft.Bot.Builder.LanguageGeneration; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// Extension methods for AdaptiveDialog. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/IntExpression.cs b/libraries/Microsoft.Bot.Expressions.Properties/IntExpression.cs similarity index 94% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/IntExpression.cs rename to libraries/Microsoft.Bot.Expressions.Properties/IntExpression.cs index f5decbb0a..cf400187c 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/IntExpression.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/IntExpression.cs @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; +using Microsoft.Bot.Expressions.Properties.Converters; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// IntExpression - represents a property which is either an Integer or a string expression which resolves to a Integer. diff --git a/libraries/Microsoft.Bot.Expressions.Properties/Microsoft.Bot.Expressions.Properties.csproj b/libraries/Microsoft.Bot.Expressions.Properties/Microsoft.Bot.Expressions.Properties.csproj new file mode 100644 index 000000000..b53316831 --- /dev/null +++ b/libraries/Microsoft.Bot.Expressions.Properties/Microsoft.Bot.Expressions.Properties.csproj @@ -0,0 +1,44 @@ + + + + 4.8.0-local + $(PreviewPackageVersion) + 4.8.0-local + $(PreviewPackageVersion) + Debug;Release + true + + + + bin\$(Configuration)\netstandard2.0\Microsoft.Bot.Expressions.Properties.xml + + + + Full + true + + + + netstandard2.0 + Microsoft.Bot.Expressions.Properties + This library defines properties that can be a Microsoft Bot Builder Expression or a concrete type. + Properties for Microsoft Bot Builder Expression or a concrete type. + + + + + + + + + + + + + + \ + true + + + + diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/NumberExpression.cs b/libraries/Microsoft.Bot.Expressions.Properties/NumberExpression.cs similarity index 94% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/NumberExpression.cs rename to libraries/Microsoft.Bot.Expressions.Properties/NumberExpression.cs index 4ebff2d8c..ef84ea85b 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/NumberExpression.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/NumberExpression.cs @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; +using Microsoft.Bot.Expressions.Properties.Converters; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// NumberExpression - represents a property which is either a float or a string expression which resolves to a float. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ObjectExpression.cs b/libraries/Microsoft.Bot.Expressions.Properties/ObjectExpression.cs similarity index 90% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ObjectExpression.cs rename to libraries/Microsoft.Bot.Expressions.Properties/ObjectExpression.cs index 82fb8f2bd..546e9c1b0 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ObjectExpression.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/ObjectExpression.cs @@ -1,11 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; -using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// ObjectExpression(T) - represents a property which is either an object of type T or a string expression which resolves to a object of type T. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/StringExpression.cs b/libraries/Microsoft.Bot.Expressions.Properties/StringExpression.cs similarity index 96% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/StringExpression.cs rename to libraries/Microsoft.Bot.Expressions.Properties/StringExpression.cs index 66b758122..a9a31fec2 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/StringExpression.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/StringExpression.cs @@ -1,13 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; using Microsoft.Bot.Builder.LanguageGeneration; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties.Converters; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// StringExpression - represents a property which is either a string value or a string expression. diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ValueExpression.cs b/libraries/Microsoft.Bot.Expressions.Properties/ValueExpression.cs similarity index 95% rename from libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ValueExpression.cs rename to libraries/Microsoft.Bot.Expressions.Properties/ValueExpression.cs index 3518c387c..8c91afa01 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Memory/Expressions/ValueExpression.cs +++ b/libraries/Microsoft.Bot.Expressions.Properties/ValueExpression.cs @@ -1,13 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; using Microsoft.Bot.Builder.LanguageGeneration; -using Microsoft.Bot.Expressions; +using Microsoft.Bot.Expressions.Properties.Converters; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.Bot.Builder.Dialogs.Adaptive +namespace Microsoft.Bot.Expressions.Properties { /// /// ValueExpression - represents a property which is an object of any kind or a string expression. diff --git a/libraries/Microsoft.Bot.Expressions.Properties/icon.png b/libraries/Microsoft.Bot.Expressions.Properties/icon.png new file mode 100644 index 000000000..37c81be7d Binary files /dev/null and b/libraries/Microsoft.Bot.Expressions.Properties/icon.png differ diff --git a/schemas/baseComponent.schema b/schemas/baseComponent.schema index 5ca579661..ff8f5e2a0 100644 --- a/schemas/baseComponent.schema +++ b/schemas/baseComponent.schema @@ -1,14 +1,14 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft-07/schema#", "$id": "https://raw.githubusercontent.com/microsoft/botbuilder-dotnet/{branch}/schemas/component.schema", "title": "JSON Schema definition for dialog schemas.", "description": "In order to create a component for Bot Framework .dialog files you need to create a schema file describing your configuration that meets this definition. This extends http://json-schema.org/draft-07/schema#.", "definitions": { "role": { "title": "$role", - "description": "Defines the role played in the dialog schema [lg|expression|union()].", + "description": "Defines the role played in the dialog schema [expression|union|union(Kind)].", "type": "string", - "pattern": "^((lg)|(expression)|(memoryPath)|(union)|(union\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" + "pattern": "^((expression)|(union)|(union\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" }, "id": { "title": "$id", @@ -32,27 +32,6 @@ "title": "$designer", "type": "object", "description": "Extra information for the Bot Framework Designer." - }, - "lg": { - "type": "string", - "description": "String is used for language generation." - }, - "memoryPath": { - "type": "string", - "description": "String must contain a memory path.", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$" - }, - "boolExpression": { - "type": [ "boolean", "string"] - }, - "integerExpression": { - "type": [ "integer", "string" ] - }, - "numberExpression": { - "type": [ "number", "string" ] - }, - "valueExpression": { - "type": [ "object", "array", "number", "integer", "boolean", "string"] } }, "properties": { diff --git a/schemas/component.schema b/schemas/component.schema index 21d47e2d1..412be8672 100644 --- a/schemas/component.schema +++ b/schemas/component.schema @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft-07/schema#", "$id": "https://raw.githubusercontent.com/microsoft/botbuilder-dotnet/master/schemas/component.schema", "title": "JSON Schema definition for dialog schemas.", "definitions": { @@ -45,9 +45,9 @@ }, "role": { "title": "$role", - "description": "Defines the role played in the dialog schema [lg|expression|union()].", + "description": "Defines the role played in the dialog schema [expression|union|union(Kind)].", "type": "string", - "pattern": "^((lg)|(expression)|(memoryPath)|(union)|(union\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" + "pattern": "^((expression)|(union)|(union\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" }, "id": { "title": "$id", @@ -71,19 +71,6 @@ "title": "$designer", "type": "object", "description": "Extra information for the Bot Framework Designer." - }, - "expression": { - "type": "string", - "description": "String must contain an expression." - }, - "lg": { - "type": "string", - "description": "String is used for language generation." - }, - "memoryPath": { - "type": "string", - "description": "String must contain a memory path.", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$" } }, "type": [ diff --git a/schemas/sdk.schema b/schemas/sdk.schema index 6804ce04d..932722778 100644 --- a/schemas/sdk.schema +++ b/schemas/sdk.schema @@ -875,14 +875,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "activity": { @@ -906,10 +913,10 @@ }, { "type": "string", - "title": "string" + "title": "string", + "description": "Expression evaluating to undefined." } - ], - "type": "string" + ] } }, "additionalProperties": false, @@ -1039,8 +1046,7 @@ ], "items": { "$role": "expression", - "type": "string", - "description": "String must contain an expression." + "type": "string" } }, "property": { @@ -1184,52 +1190,80 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "dialog": { - "$kind": "Microsoft.IDialog", "$role": "expression", - "type": [ - "string", - "object" - ], "title": "Dialog name", "description": "Name of the dialog to call.", "examples": [ "AddToDoDialog" ], - "$ref": "#/definitions/Microsoft.IDialog" + "oneOf": [ + { + "$kind": "Microsoft.IDialog", + "type": "object", + "title": "object", + "$ref": "#/definitions/Microsoft.IDialog" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "options": { "$role": "expression", - "type": [ - "string", - "object" - ], "title": "Options", "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options" - } + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string", + "title": "string" + }, + "title": "object" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "activityProcessed": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Activity Processed", "description": "When set to false, the dialog that is called can process the current activity.", - "default": true + "oneOf": [ + { + "type": "boolean", + "default": true, + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "resultProperty": { "$role": "expression", @@ -1299,14 +1333,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] } }, @@ -1368,14 +1409,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "eventName": { @@ -1526,8 +1574,7 @@ ], "items": { "$role": "expression", - "type": "string", - "description": "String must contain an expression." + "type": "string" } }, "property": { @@ -1613,48 +1660,52 @@ "default": "value" }, "choices": { - "anyOf": [ - { - "$role": "expression", - "type": "string", - "description": "String must contain an expression." - }, + "$role": "expression", + "oneOf": [ { "type": "array", "items": [ { - "type": "string" + "type": "string", + "title": "string" } - ] + ], + "title": "array" }, { "type": "array", "items": [ { - "title": "Choice", + "title": "object", "type": "object", "properties": { "value": { "type": "string", - "title": "Value", + "title": "string", "description": "Value to return when this choice is selected." }, "action": { "type": "object", - "title": "Action", + "title": "object", "description": "Card action for the choice." }, "synonyms": { "type": "array", - "title": "Synonyms", + "title": "array", "description": "List of synonyms to recognize in addition to the value (optional).", "items": { - "type": "string" + "type": "string", + "title": "string" } } } } - ] + ], + "title": "array" + }, + { + "type": "string", + "title": "string" } ] }, @@ -1784,8 +1835,17 @@ }, "condition": { "$role": "expression", - "type": "string", - "description": "String must contain an expression." + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "ifTrue": { "$kind": "Microsoft.ITriggerSelector", @@ -1926,8 +1986,7 @@ ], "items": { "$role": "expression", - "type": "string", - "description": "String must contain an expression." + "type": "string" } }, "property": { @@ -2034,64 +2093,84 @@ }, "choiceOptions": { "$role": "expression", - "type": "object", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Character used to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Separator inserted between the choices when their are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, inline and list style choices will be prefixed with the index of the choice.", - "default": true - } - }, - "description": "String must contain an expression." - }, - "confirmChoices": { - "$role": "expression", - "type": "array", - "items": [ + "oneOf": [ { "type": "object", "properties": { - "value": { + "inlineSeparator": { "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." + "title": "string", + "description": "Character used to separate individual choices when there are more than 2 choices", + "default": ", " }, - "action": { - "type": "object", - "title": "Action", - "description": "Card action for the choice" + "inlineOr": { + "type": "string", + "title": "string", + "description": "Separator inserted between the choices when their are only 2 choices", + "default": " or " }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional)", - "items": { - "type": "string" - } + "inlineOrMore": { + "type": "string", + "title": "string", + "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", + "default": ", or " + }, + "includeNumbers": { + "type": "boolean", + "title": "boolean", + "description": "If true, inline and list style choices will be prefixed with the index of the choice.", + "default": true } - } + }, + "title": "object" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." } - ], - "description": "String must contain an expression." + ] + }, + "confirmChoices": { + "$role": "expression", + "oneOf": [ + { + "type": "array", + "items": [ + { + "type": "object", + "properties": { + "value": { + "type": "string", + "title": "string", + "description": "Value to return when this choice is selected." + }, + "action": { + "type": "object", + "title": "object", + "description": "Card action for the choice" + }, + "synonyms": { + "type": "array", + "title": "array", + "description": "List of synonyms to recognize in addition to the value (optional)", + "items": { + "type": "string", + "title": "string" + } + } + }, + "title": "object" + } + ], + "title": "array" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] } }, "additionalProperties": false, @@ -2204,14 +2283,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] } }, @@ -2513,8 +2599,7 @@ ], "items": { "$role": "expression", - "type": "string", - "description": "String must contain an expression." + "type": "string" } }, "property": { @@ -2663,14 +2748,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] } }, @@ -2741,14 +2833,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] } }, @@ -2812,14 +2911,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "properties": { @@ -2893,14 +2999,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "property": { @@ -3021,14 +3134,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "changeType": { @@ -3127,14 +3247,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "itemsProperty": { @@ -3280,14 +3407,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "eventName": { @@ -3325,13 +3459,20 @@ }, "bubbleEvent": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Bubble event", "description": "If true this event is passed on to parent dialogs.", - "default": false + "oneOf": [ + { + "type": "boolean", + "default": false, + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] } }, "additionalProperties": false, @@ -3393,14 +3534,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "value": { @@ -3479,14 +3627,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] } }, @@ -3698,21 +3853,26 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "itemsProperty": { "$role": "expression", - "type": [ - "string" - ], + "type": "string", "title": "Items property", "description": "Property that holds the array.", "examples": [ @@ -3789,14 +3949,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "itemsProperty": { @@ -3819,13 +3986,20 @@ }, "pageSize": { "$role": "expression", - "type": [ - "integer", - "string" - ], "title": "Page size", "description": "Number of items in each page.", - "default": 10 + "oneOf": [ + { + "type": "integer", + "default": 10, + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] } }, "additionalProperties": false, @@ -3897,14 +4071,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] } }, @@ -3966,14 +4147,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] } }, @@ -4035,14 +4223,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "actionId": { @@ -4215,14 +4410,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "method": { @@ -4279,8 +4481,7 @@ "description": "One or more headers to include in the request (supports data binding).", "additionalProperties": { "$role": "expression", - "type": "string", - "description": "String must contain an expression." + "type": "string" } }, "responseType": { @@ -4795,26 +4996,40 @@ }, "condition": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Condition", "description": "Expression to evaluate.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "actions": { @@ -4999,14 +5214,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "text": { @@ -5023,13 +5245,20 @@ }, "traceActivity": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Send Trace Activity", "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator).", - "default": false + "oneOf": [ + { + "type": "boolean", + "default": false, + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] } }, "additionalProperties": false, @@ -5108,6 +5337,65 @@ "description": "LUIS prediction key used to call endpoint.", "$role": "expression" }, + "externalEntityRecognizer": { + "title": "External Entity Recognizer", + "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", + "$kind": "Microsoft.Recognizer", + "$ref": "#/definitions/Microsoft.Recognizer" + }, + "dynamicLists": { + "$role": "expression", + "title": "Dynamic lists", + "description": "Runtime defined entity lists.", + "oneOf": [ + { + "type": "array", + "items": { + "title": "object", + "description": "Lists of canonical values and synonyms for an entity.", + "type": "object", + "properties": { + "entity": { + "title": "string", + "description": "Entity to extend with a dynamic list.", + "type": "string" + }, + "list": { + "title": "array", + "description": "List of canonical forms and synonyms.", + "type": "array", + "items": { + "type": "object", + "properties": { + "canonicalForm": { + "title": "string", + "description": "Resolution if any synonym matches.", + "type": "string" + }, + "synonyms": { + "title": "array", + "description": "List of synonyms for a canonical form.", + "type": "array", + "items": { + "type": "string", + "title": "string" + } + } + }, + "title": "object" + } + } + } + }, + "title": "array" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] + }, "predictionOptions": { "type": "object", "properties": { @@ -5507,8 +5795,7 @@ ], "items": { "$role": "expression", - "type": "string", - "description": "String must contain an expression." + "type": "string" } }, "property": { @@ -5714,14 +6001,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "text": { @@ -5744,13 +6038,20 @@ }, "timeout": { "$role": "expression", - "type": [ - "integer", - "string" - ], "title": "Timeout", "description": "Time out setting for the OAuth signin card.", - "default": "900000" + "oneOf": [ + { + "type": "integer", + "default": "900000", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "property": { "$role": "expression", @@ -5781,15 +6082,22 @@ }, "maxTurnCount": { "$role": "expression", - "type": [ - "integer", - "string" - ], "title": "Max turn count", "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, "examples": [ 3 + ], + "oneOf": [ + { + "type": "integer", + "default": 3, + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "defaultValue": { @@ -5810,15 +6118,22 @@ }, "allowInterruptions": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Allow Interruptions", "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": "true", "examples": [ "true" + ], + "oneOf": [ + { + "type": "boolean", + "default": "true", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] } }, @@ -5881,7 +6196,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -5892,10 +6217,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -5968,7 +6303,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -5979,10 +6324,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6063,7 +6418,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6074,10 +6439,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6144,7 +6519,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6155,10 +6540,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6225,7 +6620,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6236,10 +6641,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6316,7 +6731,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6327,10 +6752,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6405,7 +6840,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6416,10 +6861,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6509,7 +6964,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6520,10 +6985,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6595,7 +7070,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6606,10 +7091,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6676,7 +7171,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6687,10 +7192,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6757,7 +7272,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6768,10 +7293,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6844,7 +7379,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6855,10 +7400,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -6931,7 +7486,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -6942,10 +7507,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7012,7 +7587,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7023,10 +7608,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7093,7 +7688,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7104,10 +7709,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7174,7 +7789,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7185,10 +7810,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7255,7 +7890,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7266,10 +7911,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7336,7 +7991,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7347,10 +8012,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7430,7 +8105,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7441,10 +8126,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7511,7 +8206,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7522,10 +8227,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7592,7 +8307,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7603,10 +8328,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7673,7 +8408,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7684,10 +8429,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7754,7 +8509,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7765,10 +8530,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7835,7 +8610,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7846,10 +8631,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7916,7 +8711,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -7927,10 +8732,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -7997,7 +8812,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -8008,10 +8833,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -8078,7 +8913,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "actions": { "type": "array", @@ -8089,10 +8934,20 @@ } }, "priority": { - "type": "string", "title": "priority", "description": "Priority expression of rule with 0 being the most important", - "$role": "expression" + "$role": "expression", + "oneOf": [ + { + "type": "integer", + "title": "integer" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "runOnce": { "type": "boolean", @@ -8342,13 +9197,20 @@ }, "threshold": { "$role": "expression", - "type": [ - "number", - "string" - ], "title": "Threshold", "description": "Threshold score to filter results.", - "default": 0.3 + "oneOf": [ + { + "type": "number", + "default": 0.3, + "title": "number" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "activeLearningCardTitle": { "$role": "expression", @@ -8373,37 +9235,52 @@ }, "strictFilters": { "$role": "expression", - "type": [ - "array", - "string" - ], "title": "Strict Filters", "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name", - "maximum": 100 + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "string", + "maximum": 100 + }, + "value": { + "type": "string", + "title": "string", + "maximum": 100 + } + }, + "title": "object" }, - "value": { - "type": "string", - "title": "Value", - "maximum": 100 - } + "title": "array" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." } - } + ] }, "top": { "$role": "expression", - "type": [ - "number", - "string" - ], "title": "Top", "description": "The number of answers you want to retrieve.", - "default": 3 + "oneOf": [ + { + "type": "number", + "default": 3, + "title": "number" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "isTest": { "type": "boolean", @@ -8483,27 +9360,27 @@ }, "knowledgeBaseId": { "$role": "expression", + "type": "string", "title": "KnowledgeBase Id", "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", - "default": "settings.qna.knowledgebaseid", - "type": "string" + "default": "settings.qna.knowledgebaseid" }, "endpointKey": { "$role": "expression", + "type": "string", "title": "Endpoint Key", "description": "Endpoint key for the QnA Maker KB.", - "default": "settings.qna.endpointkey", - "type": "string" + "default": "settings.qna.endpointkey" }, "hostname": { "$role": "expression", + "type": "string", "title": "Hostname", "description": "Hostname for your QnA Maker service.", "default": "settings.qna.hostname", "examples": [ "https://yourserver.azurewebsites.net/qnamaker" - ], - "type": "string" + ] }, "threshold": { "type": "number", @@ -8930,38 +9807,59 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "options": { "$role": "expression", - "type": [ - "string", - "object" - ], "title": "Options", "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options" - } + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string", + "title": "string" + }, + "title": "object" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "activityProcessed": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Activity Processed", "description": "When set to false, the dialog that is called can process the current activity.", - "default": true + "oneOf": [ + { + "type": "boolean", + "default": true, + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] } }, "additionalProperties": false, @@ -9022,23 +9920,27 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "dialog": { "$kind": "Microsoft.IDialog", "$role": "expression", - "type": [ - "string", - "object" - ], + "type": "string", "title": "Dialog name", "description": "Name of the dialog to call.", "examples": [ @@ -9048,26 +9950,40 @@ }, "options": { "$role": "expression", - "type": [ - "string", - "object" - ], "title": "Options", "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options" - } + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string", + "title": "string" + }, + "title": "object" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "activityProcessed": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Activity Processed", "description": "When set to false, the dialog that is called can process the current activity.", - "default": true + "oneOf": [ + { + "type": "boolean", + "default": true, + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] } }, "additionalProperties": false, @@ -9128,14 +10044,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "activity": { @@ -9203,14 +10126,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "assignments": { @@ -9310,14 +10240,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "property": { @@ -9423,14 +10360,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] } }, @@ -9559,14 +10503,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "cases": { @@ -9728,7 +10679,17 @@ "examples": [ "user.age > 10" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] }, "description": { "type": "string", @@ -9818,7 +10779,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] } } }, @@ -9895,7 +10866,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] } } }, @@ -9985,7 +10966,17 @@ "examples": [ "user.vip == true" ], - "type": "string" + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } + ] } } }, @@ -10556,8 +11547,7 @@ ], "items": { "$role": "expression", - "type": "string", - "description": "String must contain an expression." + "type": "string" } }, "property": { @@ -10758,14 +11748,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "name": { @@ -10910,14 +11907,21 @@ }, "disabled": { "$role": "expression", - "type": [ - "boolean", - "string" - ], "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ "user.age > 3" + ], + "oneOf": [ + { + "type": "boolean", + "title": "boolean" + }, + { + "type": "string", + "title": "string", + "description": "Expression evaluating to undefined." + } ] }, "activityId": { @@ -10927,8 +11931,7 @@ "dDescription": "An string expression with the activity id to update.", "examples": [ "=dialog.lastActivityId" - ], - "description": "String must contain an expression." + ] }, "activity": { "$kind": "Microsoft.IActivityTemplate", diff --git a/tests/Microsoft.Bot.Builder.AI.LUIS.Tests/Microsoft.Bot.Builder.AI.Luis.Tests.csproj b/tests/Microsoft.Bot.Builder.AI.LUIS.Tests/Microsoft.Bot.Builder.AI.Luis.Tests.csproj index e6a72f4ce..e691add04 100644 --- a/tests/Microsoft.Bot.Builder.AI.LUIS.Tests/Microsoft.Bot.Builder.AI.Luis.Tests.csproj +++ b/tests/Microsoft.Bot.Builder.AI.LUIS.Tests/Microsoft.Bot.Builder.AI.Luis.Tests.csproj @@ -30,12 +30,6 @@ - - - System - - - PreserveNewest diff --git a/tests/Microsoft.Bot.Builder.Ai.LUISV3.tests/Microsoft.Bot.Builder.AI.LuisV3.Tests.csproj b/tests/Microsoft.Bot.Builder.Ai.LUISV3.tests/Microsoft.Bot.Builder.AI.LuisV3.Tests.csproj index 572c2768b..9696764ca 100644 --- a/tests/Microsoft.Bot.Builder.Ai.LUISV3.tests/Microsoft.Bot.Builder.AI.LuisV3.Tests.csproj +++ b/tests/Microsoft.Bot.Builder.Ai.LUISV3.tests/Microsoft.Bot.Builder.AI.LuisV3.Tests.csproj @@ -27,10 +27,4 @@ - - - - System - - diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Templates.Tests/MessageGeneratorTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Templates.Tests/MessageGeneratorTests.cs index fb6709271..e286e0c59 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Templates.Tests/MessageGeneratorTests.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Templates.Tests/MessageGeneratorTests.cs @@ -7,6 +7,7 @@ using Microsoft.Bot.Builder.Dialogs.Declarative; using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; using Microsoft.Bot.Builder.Dialogs.Declarative.Types; using Microsoft.Bot.Builder.LanguageGeneration; +using Microsoft.Bot.Expressions.Properties; using Microsoft.Bot.Schema; using Microsoft.Extensions.Configuration; using Microsoft.VisualStudio.TestTools.UnitTesting; diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ChoiceSetTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ChoiceSetTests.cs index 6bb8041bf..dd92a83d2 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ChoiceSetTests.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ChoiceSetTests.cs @@ -4,12 +4,10 @@ #pragma warning disable SA1649 // File name should match first type name using System.Collections.Generic; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; using Microsoft.Bot.Builder.Dialogs.Adaptive.Input; using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Converters; +using Microsoft.Bot.Expressions.Properties; +using Microsoft.Bot.Expressions.Properties.Converters; using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json; using Newtonsoft.Json.Linq; diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ExpressionPropertyTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ExpressionPropertyTests.cs index 97b3b954d..0a7bb6fa0 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ExpressionPropertyTests.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ExpressionPropertyTests.cs @@ -14,6 +14,8 @@ using System.Drawing; using Microsoft.Bot.Builder.Dialogs.Adaptive.Converters; using Microsoft.Bot.Builder.Dialogs.Adaptive.Input; using Microsoft.Bot.Builder.Dialogs.Choices; +using Microsoft.Bot.Expressions.Properties; +using Microsoft.Bot.Expressions.Properties.Converters; using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json; using Newtonsoft.Json.Converters; diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/GeneratorTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/GeneratorTests.cs index a5601e942..1d8150f7f 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/GeneratorTests.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/GeneratorTests.cs @@ -2,7 +2,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. using System.Threading.Tasks; -using Microsoft.Bot.Builder.Dialogs.Declarative.Types; using Microsoft.Bot.Builder.MockLuis; using Microsoft.Extensions.Configuration; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -16,23 +15,21 @@ namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Tests private readonly string unitTestsDirectory = PathUtils.NormalizePath(@"..\..\..\..\..\tests\Microsoft.Bot.Builder.Dialogs.Adaptive.Tests\Tests\GeneratorTests\unittests\"); [TestMethod] - public async Task SandwichOrder() + public async Task Generator_sandwich() { var config = new ConfigurationBuilder() - .AddInMemoryCollection() - .UseLuisSettings(sandwichDirectory, "generatorTests") + .UseLuisSettings(sandwichDirectory, "TestBot") .Build(); - await TestUtils.RunTestScript("generator_sandwich.test.dialog", configuration: config); + await TestUtils.RunTestScript(configuration: config); } [TestMethod] - public async Task UnitTests() + public async Task Generator_unittests() { var config = new ConfigurationBuilder() - .AddInMemoryCollection() - .UseLuisSettings(unitTestsDirectory, "generatorTests") + .UseLuisSettings(unitTestsDirectory, "TestBot") .Build(); - await TestUtils.RunTestScript("generator_unittests.test.dialog", configuration: config); + await TestUtils.RunTestScript(configuration: config); } } } diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/LuisRecognizerTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/LuisRecognizerTests.cs new file mode 100644 index 000000000..aaa507b09 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/LuisRecognizerTests.cs @@ -0,0 +1,136 @@ +// Licensed under the MIT License. +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Luis; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Recognizers; +using Microsoft.Bot.Builder.MockLuis; +using Microsoft.Bot.Expressions.Properties; +using Microsoft.Bot.Expressions.Properties.Converters; +using Microsoft.Extensions.Configuration; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Newtonsoft.Json; + +namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Tests +{ + [TestClass] + public class LuisRecognizerTests + { + private const string DynamicListJSon = @"[ + { + 'entity': 'alphaEntity', + 'list': [ + { + 'canonicalForm': 'a', + 'synonyms': [ + 'a', + 'aa' + ] + }, + { + 'canonicalForm': 'b', + 'synonyms': [ + 'b', + 'bb' + ] +} + ] + }, + { + 'entity': 'numberEntity', + 'list': [ + { + 'canonicalForm': '1', + 'synonyms': [ + '1', + 'one' + ] + }, + { + 'canonicalForm': '2', + 'synonyms': [ + '2', + 'two' + ] + } + ] + } + ]"; + + private const string RecognizerJson = @"{ + '$kind': 'Microsoft.LuisRecognizer', + 'applicationId': '=settings.luis.DynamicLists_test_en-us_lu', + 'endpoint': '=settings.luis.endpoint', + 'endpointKey': '=settings.luis.endpointKey', 'dynamicLists': " + DynamicListJSon + "}"; + + private readonly string dynamicListsDirectory = PathUtils.NormalizePath(@"..\..\..\..\..\tests\Microsoft.Bot.Builder.Dialogs.Adaptive.Tests\Tests\LuisRecognizerTests"); + + [TestMethod] + public async Task DynamicLists() + { + var config = new ConfigurationBuilder() + .UseLuisSettings(dynamicListsDirectory, "TestBot") + .Build(); + await TestUtils.RunTestScript(configuration: config); + } + + [TestMethod] + public async Task DynamicListsExpression() + { + var config = new ConfigurationBuilder() + .UseLuisSettings(dynamicListsDirectory, "TestBot") + .Build(); + await TestUtils.RunTestScript(configuration: config); + } + + [TestMethod] + public async Task ExternalEntities() + { + var config = new ConfigurationBuilder() + .UseLuisSettings(dynamicListsDirectory, "TestBot") + .Build(); + await TestUtils.RunTestScript(configuration: config); + } + + [TestMethod] + public void DeserializeDynamicList() + { + var dl = JsonConvert.DeserializeObject>(DynamicListJSon); + Assert.AreEqual(2, dl.Count); + Assert.AreEqual("alphaEntity", dl[0].Entity); + Assert.AreEqual(2, dl[0].List.Count); + } + + [TestMethod] + public void DeserializeSerializedDynamicList() + { + var ol = JsonConvert.DeserializeObject>(DynamicListJSon); + var json = JsonConvert.SerializeObject(ol); + var dl = JsonConvert.DeserializeObject>(json); + Assert.AreEqual(2, dl.Count); + Assert.AreEqual("alphaEntity", dl[0].Entity); + Assert.AreEqual(2, dl[0].List.Count); + } + + [TestMethod] + public void DeserializeArrayExpression() + { + var ae = JsonConvert.DeserializeObject>(DynamicListJSon, new ArrayExpressionConverter()); + var dl = ae.GetValue(null); + Assert.AreEqual(2, dl.Count); + Assert.AreEqual("alphaEntity", dl[0].Entity); + Assert.AreEqual(2, dl[0].List.Count); + } + + [TestMethod] + public void DeserializeLuisAdaptiveRecognizer() + { + var recognizer = JsonConvert.DeserializeObject(RecognizerJson, new ArrayExpressionConverter()); + var dl = recognizer.DynamicLists.GetValue(null); + Assert.AreEqual(2, dl.Count); + Assert.AreEqual("alphaEntity", dl[0].Entity); + Assert.AreEqual(2, dl[0].List.Count); + } + } +} diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests.csproj b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests.csproj index d9c2e9e34..f16725236 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests.csproj +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests.csproj @@ -140,4 +140,8 @@ + + + + diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/generator_sandwich.test.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/Generator_sandwich.test.dialog similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/generator_sandwich.test.dialog rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/Generator_sandwich.test.dialog diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/generator_unittests.test.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/Generator_unittests.test.dialog similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/generator_unittests.test.dialog rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/Generator_unittests.test.dialog diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/2092802335.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1078770328.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/2092802335.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1078770328.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1433479955.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1770008724.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1433479955.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1770008724.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1369200236.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1835879915.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1369200236.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1835879915.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1398984689.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1871959158.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1398984689.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1871959158.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1236542976.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1967472007.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1236542976.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1967472007.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/2662076917.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/2724006514.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/2662076917.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/2724006514.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/2245504220.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/3106322267.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/2245504220.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/3106322267.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/4239464293.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/3225423074.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/4239464293.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/3225423074.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/3731741184.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/3801923975.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/3731741184.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/3801923975.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1057361391.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/66524776.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/1057361391.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/66524776.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/455026286.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/669924841.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/455026286.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/669924841.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/360168015.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/696689096.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/360168015.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/696689096.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/141232855.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/882512208.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/141232855.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/cachedResponses/sandwich_en-us_lu/882512208.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/luis/sandwich.en-us.lu.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/luis/sandwich.en-us.lu.dialog index 2c396ad72..3a5334b3c 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/luis/sandwich.en-us.lu.dialog +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/sandwich/luis/sandwich.en-us.lu.dialog @@ -2,9 +2,9 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/botbuilder-dotnet/master/schemas/sdk.schema", "$kind": "Microsoft.LuisRecognizer", - "applicationId": "{settings.luis.sandwich_en-us_lu}", - "endpoint": "{settings.luis.endpoint}", - "endpointKey": "{settings.luis.endpointKey}", + "applicationId": "=settings.luis.sandwich_en-us_lu", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey", "predictionOptions": { "includeInstanceData": true } diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/19522071.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1037629840.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/19522071.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1037629840.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2108541064.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1096602383.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2108541064.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1096602383.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2063579347.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1175364436.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2063579347.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1175364436.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2075774777.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1195955390.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2075774777.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1195955390.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1842498579.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1361270676.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1842498579.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1361270676.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/876742609.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/145955926.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/876742609.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/145955926.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/874887311.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/148153096.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/874887311.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/148153096.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1579948635.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1658651100.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1579948635.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1658651100.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1304334247.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1901040672.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1304334247.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1901040672.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/929700970.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/194709485.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/929700970.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/194709485.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/821409446.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/201633057.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/821409446.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/201633057.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1143015717.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2026902178.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/1143015717.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2026902178.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3162815224.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2155192703.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3162815224.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2155192703.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2892062428.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2425374043.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2892062428.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2425374043.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2745357792.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2673069671.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2745357792.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2673069671.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2662076917.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2724006514.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2662076917.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2724006514.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/749451549.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/274375322.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/749451549.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/274375322.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2466717130.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2952136269.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2466717130.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2952136269.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/786526808.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/303065567.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/786526808.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/303065567.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2310623463.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3041413984.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/2310623463.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3041413984.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3843651349.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3655888018.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3843651349.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3655888018.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3875167354.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3658172413.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3875167354.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3658172413.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3528672691.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/4003618356.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3528672691.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/4003618356.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3450514987.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/4049319340.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3450514987.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/4049319340.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3340878002.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/4224768821.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3340878002.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/4224768821.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3273998392.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/4292107199.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/3273998392.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/4292107199.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/655188851.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/469530868.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/655188851.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/469530868.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/189585520.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/935183351.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/189585520.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/935183351.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/83716306.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/940340053.json similarity index 100% rename from tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/83716306.json rename to tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/cachedResponses/unittests_en-us_lu/940340053.json diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/luis/luis.settings.development.westus.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/luis/luis.settings.development.westus.json new file mode 100644 index 000000000..718e858b2 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/luis/luis.settings.development.westus.json @@ -0,0 +1,5 @@ +{ + "luis": { + "unittests_en-us_lu": "1e092fbd-d304-44c1-98c4-1eaf81f7b654" + } +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/luis/unittests.en-us.lu.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/luis/unittests.en-us.lu.dialog index 60f4942e0..801cc6a8d 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/luis/unittests.en-us.lu.dialog +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/GeneratorTests/unittests/luis/unittests.en-us.lu.dialog @@ -2,9 +2,9 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/botbuilder-dotnet/master/schemas/sdk.schema", "$kind": "Microsoft.LuisRecognizer", - "applicationId": "{settings.luis.unittests_en-us_lu}", - "endpoint": "{settings.luis.endpoint}", - "endpointKey": "{settings.luis.endpointKey}", + "applicationId": "=settings.luis.unittests_en-us_lu", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey", "predictionOptions": { "includeInstanceData": true } diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.dialog new file mode 100644 index 000000000..fac4d81c1 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.dialog @@ -0,0 +1,116 @@ +{ + "$schema": "../../../../schemas/sdk.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "recognizer": { + "$kind": "Microsoft.LuisRecognizer", + "applicationId": "=settings.luis.DynamicLists_test_en-us_lu", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey", + "dynamicLists": [ + { + "entity": "alphaEntity", + "list": [ + { + "canonicalForm": "a", + "synonyms": [ + "a", + "aa" + ] + }, + { + "canonicalForm": "b", + "synonyms": [ + "b", + "bb" + ] + } + ] + }, + { + "entity": "numberEntity", + "list": [ + { + "canonicalForm": "1", + "synonyms": [ + "1", + "one" + ] + }, + { + "canonicalForm": "2", + "synonyms": [ + "2", + "two" + ] + } + ] + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "intent", + "entities": [ + "alphaEntity" + ], + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "alphaEntity" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "intent", + "entities": [ + "numberEntity" + ], + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "numberEntity" + } + ] + } + ] + }, + "locale": "en-us", + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "word1" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "alphaEntity" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "a" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "alphaEntity" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "three" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "numberEntity" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "one" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "numberEntity" + } + ] +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.en-us.lu.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.en-us.lu.dialog new file mode 100644 index 000000000..18ac55209 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.en-us.lu.dialog @@ -0,0 +1,6 @@ +{ + "$type": "Microsoft.LuisRecognizer", + "applicationId": "=settings.luis.DynamicLists_test_en-us_lu", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey" +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.lu b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.lu new file mode 100644 index 000000000..0fdfcf58f --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.lu @@ -0,0 +1,14 @@ +$alphaEntity:word1= +$alphaEntity:word2= + +$numberEntity:3= +- three + +$numberEntity:4= +- four + +# intent +- word1 +- word2 +- three +- four \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.lu.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.lu.dialog new file mode 100644 index 000000000..8798aafde --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicLists.test.lu.dialog @@ -0,0 +1,7 @@ +{ + "$type": "Microsoft.MultiLanguageRecognizer", + "recognizers": { + "en-us": "DynamicLists.test.en-us.lu", + "": "DynamicLists.test.en-us.lu" + } +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicListsExpression.test.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicListsExpression.test.dialog new file mode 100644 index 000000000..bf24a87fc --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/DynamicListsExpression.test.dialog @@ -0,0 +1,77 @@ +{ + "$schema": "../../../../schemas/sdk.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "recognizer": { + "$kind": "Microsoft.LuisRecognizer", + "applicationId": "=settings.luis.DynamicLists_test_en-us_lu", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey", + "dynamicLists": "json(\"[{'entity': 'alphaEntity', 'list': [{'canonicalForm': 'a', 'synonyms': ['a', 'aa']}, {'canonicalForm': 'b', 'synonyms': ['b', 'bb']}]}, {'entity': 'numberEntity', 'list': [{'canonicalForm': '1', 'synonyms': ['1', 'one']}, {'canonicalForm': '2', 'synonyms': ['2', 'two']}]}]\")" + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "intent", + "entities": [ + "alphaEntity" + ], + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "alphaEntity" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "intent", + "entities": [ + "numberEntity" + ], + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "numberEntity" + } + ] + } + ] + }, + "locale": "en-us", + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "word1" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "alphaEntity" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "a" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "alphaEntity" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "three" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "numberEntity" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "one" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "numberEntity" + } + ] +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.Recognizer.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.Recognizer.dialog new file mode 100644 index 000000000..5785c715d --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.Recognizer.dialog @@ -0,0 +1,17 @@ +{ + "$schema": "../../../../schemas/sdk.schema", + "$kind": "Microsoft.RegexRecognizer", + "intents": [], + "entities": [ + { + "$kind":"Microsoft.RegexEntityRecognizer", + "name": "alphaEntity", + "pattern": "a" + }, + { + "$kind":"Microsoft.RegexEntityRecognizer", + "name": "numberEntity", + "pattern": "one" + } + ] +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.dialog new file mode 100644 index 000000000..011e7a48c --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.dialog @@ -0,0 +1,80 @@ +{ + "$schema": "../../../../schemas/sdk.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "recognizer": { + "$kind": "Microsoft.LuisRecognizer", + "applicationId": "=settings.luis.ExternalEntities_test_en-us_lu", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey", + "externalEntityRecognizer": "ExternalEntities.Recognizer", + "predictionOptions": { + "preferExternalEntities": true + } + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "intent", + "entities": [ + "alphaEntity" + ], + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "alphaEntity" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "intent", + "entities": [ + "numberEntity" + ], + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "numberEntity" + } + ] + } + ] + }, + "locale": "en-us", + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "word1" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "alphaEntity" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "a" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "alphaEntity" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "three" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "numberEntity" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "one" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "numberEntity" + } + ] +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.en-us.lu.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.en-us.lu.dialog new file mode 100644 index 000000000..0b56bba42 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.en-us.lu.dialog @@ -0,0 +1,6 @@ +{ + "$type": "Microsoft.LuisRecognizer", + "applicationId": "=settings.luis.ExternalEntities_test_en-us_lu", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey" +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.lu b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.lu new file mode 100644 index 000000000..283abeda5 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.lu @@ -0,0 +1,13 @@ +$alphaEntity:simple + +$numberEntity:3= +- three + +$numberEntity:4= +- four + +# intent +- {alphaEntity=word1} +- {alphaEntity=word2 +- three +- four \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.lu.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.lu.dialog new file mode 100644 index 000000000..d228d290b --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/ExternalEntities.test.lu.dialog @@ -0,0 +1,7 @@ +{ + "$type": "Microsoft.MultiLanguageRecognizer", + "recognizers": { + "en-us": "ExternalEntities.test.en-us.lu", + "": "ExternalEntities.test.en-us.lu" + } +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/LUISBuild.cmd b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/LUISBuild.cmd new file mode 100644 index 000000000..eabb7ad54 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/LUISBuild.cmd @@ -0,0 +1,2 @@ +@echo off +bf luis:build --in . --authoringKey %LUIS_AUTHORING_KEY% --botName LUISRecognizerTests --dialog %1 \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/1639354569.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/1639354569.json new file mode 100644 index 000000000..6a87c6abc --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/1639354569.json @@ -0,0 +1 @@ +{"query":"three","prediction":{"topIntent":"intent","intents":{"intent":{"score":0.968526}},"entities":{"numberEntity":[["3"]]}}} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/283019056.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/283019056.json new file mode 100644 index 000000000..3d48a5c60 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/283019056.json @@ -0,0 +1 @@ +{"query":"a","prediction":{"topIntent":"intent","intents":{"intent":{"score":0.8640835}},"entities":{"alphaEntity":[["a"]]}}} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/2859100238.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/2859100238.json new file mode 100644 index 000000000..6c29d16d7 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/2859100238.json @@ -0,0 +1 @@ +{"query":"one","prediction":{"topIntent":"intent","intents":{"intent":{"score":0.8640835}},"entities":{"numberEntity":[["1"]]}}} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/894663559.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/894663559.json new file mode 100644 index 000000000..e0732fd7e --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/DynamicLists_test_en-us_lu/894663559.json @@ -0,0 +1 @@ +{"query":"word1","prediction":{"topIntent":"intent","intents":{"intent":{"score":0.8677989}},"entities":{"alphaEntity":[["word1"]]}}} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/1056632245.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/1056632245.json new file mode 100644 index 000000000..ec07f18a0 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/1056632245.json @@ -0,0 +1 @@ +{"query":"three","prediction":{"topIntent":"intent","intents":{"intent":{"score":0.9651823}},"entities":{"numberEntity":[["3"]]}}} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/1335032396.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/1335032396.json new file mode 100644 index 000000000..c3ad18afd --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/1335032396.json @@ -0,0 +1 @@ +{"query":"a","prediction":{"topIntent":"intent","intents":{"intent":{"score":0.829455853}},"entities":{"alphaEntity":[["a"]]}}} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/1780418299.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/1780418299.json new file mode 100644 index 000000000..7c4e3c31a --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/1780418299.json @@ -0,0 +1 @@ +{"query":"word1","prediction":{"topIntent":"intent","intents":{"intent":{"score":0.8492372}},"entities":{"alphaEntity":["word1"]}}} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/4112913714.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/4112913714.json new file mode 100644 index 000000000..fade6d9f2 --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/cachedResponses/ExternalEntities_test_en-us_lu/4112913714.json @@ -0,0 +1 @@ +{"query":"one","prediction":{"topIntent":"intent","intents":{"intent":{"score":0.829455853}},"entities":{"numberEntity":[["one"]]}}} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/luis.settings.development.westus.json b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/luis.settings.development.westus.json new file mode 100644 index 000000000..740f5369e --- /dev/null +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/LuisRecognizerTests/luis.settings.development.westus.json @@ -0,0 +1,6 @@ +{ + "luis": { + "DynamicLists_test_en-us_lu": "e9768105-e984-4144-af3c-25ff3a0ffcea", + "ExternalEntities_test_en-us_lu": "f09e1e47-2f29-44bf-b4e4-7af2890cd88a" + } +} \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.LanguageGeneration.Tests/Microsoft.Bot.Builder.LanguageGeneration.Tests.csproj b/tests/Microsoft.Bot.Builder.LanguageGeneration.Tests/Microsoft.Bot.Builder.LanguageGeneration.Tests.csproj index 2361038ea..3407f9b9f 100644 --- a/tests/Microsoft.Bot.Builder.LanguageGeneration.Tests/Microsoft.Bot.Builder.LanguageGeneration.Tests.csproj +++ b/tests/Microsoft.Bot.Builder.LanguageGeneration.Tests/Microsoft.Bot.Builder.LanguageGeneration.Tests.csproj @@ -217,12 +217,6 @@ - - - System - - - PreserveNewest diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/CustomSteps/JavascriptAction.cs b/tests/Microsoft.Bot.Builder.TestBot.Json/CustomSteps/JavascriptAction.cs index 5e10d299a..be337267d 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/CustomSteps/JavascriptAction.cs +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/CustomSteps/JavascriptAction.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Jint; using Microsoft.Bot.Builder.Dialogs; using Microsoft.Bot.Builder.Dialogs.Adaptive; +using Microsoft.Bot.Expressions.Properties; using Newtonsoft.Json; using Newtonsoft.Json.Linq; diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/CustomSteps/Testbot.JavascriptAction.schema b/tests/Microsoft.Bot.Builder.TestBot.Json/CustomSteps/Testbot.JavascriptAction.schema index e00f39174..f273265aa 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/CustomSteps/Testbot.JavascriptAction.schema +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/CustomSteps/Testbot.JavascriptAction.schema @@ -13,7 +13,7 @@ }, "disabled": { "$role": "expression", - "type": [ "boolean", "string" ], + "type": "boolean", "title": "Disabled", "description": "Optional condition which if true will disable this action.", "examples": [ @@ -27,7 +27,7 @@ }, "options": { "$role": "expression", - "type": [ "string", "object" ], + "type": "object", "title": "Options", "description": "One or more options that are passed to the function as args.", "additionalProperties": { diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/Program.cs b/tests/Microsoft.Bot.Builder.TestBot.Json/Program.cs index eefd273fa..a74babcd1 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/Program.cs +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/Program.cs @@ -2,8 +2,11 @@ // Licensed under the MIT License. using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Reflection.Emit; +using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; @@ -19,28 +22,34 @@ namespace Microsoft.Bot.Builder.TestBot.Json public static void Help() { - Trace.TraceInformation("--region : LUIS Authoring region. Default westus"); + Trace.TraceInformation("--root : Absolute path to the root directory for declarative resources all *.main.dialog be options. Default current directory"); + Trace.TraceInformation("--region : LUIS endpoint region. Default westus"); + Trace.TraceInformation("--environment : LUIS environment settings to use. Default 'devlopment' or user alias."); Trace.TraceInformation("--help: This help."); - Trace.TraceInformation("--root: Root directory for declartive resources."); System.Environment.Exit(-1); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration((hostingContext, config) => + .ConfigureAppConfiguration((hostingContext, config) => + { + var luisRegion = Environment.GetEnvironmentVariable("LUIS_AUTHORING_REGION") ?? "westus"; + var environment = "development"; + var botRoot = "."; + for (var i = 0; i < args.Length; ++i) { - var env = hostingContext.HostingEnvironment; - var luisAuthoringRegion = Environment.GetEnvironmentVariable("LUIS_AUTHORING_REGION") ?? "westus"; - for (var i = 0; i < args.Length; ++i) + var arg = args[i]; + + // No args has %LAUNCHER_ARGS% as the single argument so ignore it + if (!arg.StartsWith("%")) { - var arg = args[i]; switch (arg) { case "--region": { if (++i < args.Length) { - luisAuthoringRegion = args[i]; + luisRegion = args[i]; } } @@ -49,36 +58,50 @@ namespace Microsoft.Bot.Builder.TestBot.Json { if (++i < args.Length) { - env.ContentRootPath = args[i]; + botRoot = args[i]; } } break; - default: - Help(); + case "--environment": + { + if (++i < args.Length) + { + environment = args[i]; + } + } + break; + + default: Help(); break; } } + } - config.AddUserSecrets(); + var settings = new Dictionary(); + settings["luis:endpoint"] = $"https://{luisRegion}.api.cognitive.microsoft.com"; + settings["BotRoot"] = botRoot; + config.AddInMemoryCollection(settings); - // Add general and then user specific luis.settings files to config - var di = new DirectoryInfo(env.ContentRootPath); - var generalPattern = $"{env.EnvironmentName}.{luisAuthoringRegion}.json"; - foreach (var file in di.GetFiles($"luis.settings.{generalPattern}", SearchOption.AllDirectories)) - { - config.AddJsonFile(file.FullName, optional: false, reloadOnChange: true); - } + config.AddUserSecrets(); - var userPattern = $"{Environment.UserName}.{luisAuthoringRegion}.json"; - foreach (var file in di.GetFiles($"luis.settings.{userPattern}", SearchOption.AllDirectories)) - { - config.AddJsonFile(file.FullName, optional: false, reloadOnChange: true); - } - }) - .ConfigureWebHostDefaults(webBuilder => + // Add general and then user specific luis.settings files to config + var di = new DirectoryInfo(botRoot); + var generalPattern = $"{environment}.{luisRegion}.json"; + foreach (var file in di.GetFiles($"luis.settings.{generalPattern}", SearchOption.AllDirectories)) { - webBuilder.UseStartup(); - }); + config.AddJsonFile(file.FullName, optional: false, reloadOnChange: true); + } + + var userPattern = $"{Environment.UserName}.{luisRegion}.json"; + foreach (var file in di.GetFiles($"luis.settings.{userPattern}", SearchOption.AllDirectories)) + { + config.AddJsonFile(file.FullName, optional: false, reloadOnChange: true); + } + }) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); } } diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/Samples/GeneratedForm/luis/sandwich.en-us.lu.dialog b/tests/Microsoft.Bot.Builder.TestBot.Json/Samples/GeneratedForm/luis/sandwich.en-us.lu.dialog index 2c396ad72..3a5334b3c 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/Samples/GeneratedForm/luis/sandwich.en-us.lu.dialog +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/Samples/GeneratedForm/luis/sandwich.en-us.lu.dialog @@ -2,9 +2,9 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/botbuilder-dotnet/master/schemas/sdk.schema", "$kind": "Microsoft.LuisRecognizer", - "applicationId": "{settings.luis.sandwich_en-us_lu}", - "endpoint": "{settings.luis.endpoint}", - "endpointKey": "{settings.luis.endpointKey}", + "applicationId": "=settings.luis.sandwich_en-us_lu", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey", "predictionOptions": { "includeInstanceData": true } diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/Samples/ToDoLuisBot/ToDoLuis.en-us.lu.dialog b/tests/Microsoft.Bot.Builder.TestBot.Json/Samples/ToDoLuisBot/ToDoLuis.en-us.lu.dialog index 935543a11..335f4a564 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/Samples/ToDoLuisBot/ToDoLuis.en-us.lu.dialog +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/Samples/ToDoLuisBot/ToDoLuis.en-us.lu.dialog @@ -1,6 +1,6 @@ { "$kind": "Microsoft.LuisRecognizer", - "applicationId": "@{settings.luis.ToDoLuis_en-us_lu}", - "endpoint": "@{settings.luis.endpoint}", - "endpointKey": "@{settings.luis.endpointKey}" + "applicationId": "=settings.luis.ToDoLuis_en-us_lu", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey" } \ No newline at end of file diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/Startup.cs b/tests/Microsoft.Bot.Builder.TestBot.Json/Startup.cs index 473502bf7..35908bbad 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/Startup.cs +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/Startup.cs @@ -49,7 +49,7 @@ namespace Microsoft.Bot.Builder.TestBot.Json // Create the Conversation state. (Used by the Dialog system itself.) services.AddSingleton(); - var resourceExplorer = new ResourceExplorer().AddFolder(this.HostingEnvironment.ContentRootPath); + var resourceExplorer = new ResourceExplorer().AddFolder(this.Configuration.GetValue("BotRoot")); services.AddSingleton(resourceExplorer); // Create the bot In this case the ASP Controller is expecting an IBot. diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/TestBot.cs b/tests/Microsoft.Bot.Builder.TestBot.Json/TestBot.cs index 0cf6b8e64..c72faf49f 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/TestBot.cs +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/TestBot.cs @@ -7,6 +7,7 @@ using System.Data; using System.Diagnostics; using System.IO; using System.Linq; +using System.Reflection.Metadata; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Filters; @@ -64,6 +65,7 @@ namespace Microsoft.Bot.Builder.TestBot.Json Prompt = new ActivityTemplate("What declarative sample do you want to run?"), Property = "conversation.dialogChoice", AlwaysPrompt = true, + Choices = new ChoiceSet(new List()) }; var handleChoice = new SwitchCondition() @@ -72,6 +74,7 @@ namespace Microsoft.Bot.Builder.TestBot.Json Cases = new List() }; + Dialog lastDialog = null; var choices = new ChoiceSet(); foreach (var resource in this.resourceExplorer.GetResources(".dialog").Where(r => r.Id.EndsWith(".main.dialog"))) @@ -81,6 +84,7 @@ namespace Microsoft.Bot.Builder.TestBot.Json var name = Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(resource.Id)); choices.Add(new Choice(name)); var dialog = DeclarativeTypeLoader.Load(resource, this.resourceExplorer, DebugSupport.SourceMap); + lastDialog = dialog; handleChoice.Cases.Add(new Case($"{name}", new List() { dialog })); } catch (SyntaxErrorException err) @@ -93,22 +97,36 @@ namespace Microsoft.Bot.Builder.TestBot.Json } } - choiceInput.Choices = choices; - choiceInput.Style = ListStyle.Auto; - rootDialog.Triggers.Add(new OnBeginDialog() + if (handleChoice.Cases.Count() == 1) { - Actions = new List() + rootDialog.Triggers.Add(new OnBeginDialog() + { + Actions = new List() + { + lastDialog, + new RepeatDialog() + } + }); + } + else + { + choiceInput.Choices = choices; + choiceInput.Style = ListStyle.Auto; + rootDialog.Triggers.Add(new OnBeginDialog() + { + Actions = new List() { choiceInput, new SendActivity("# Running @{conversation.dialogChoice}.main.dialog"), handleChoice, new RepeatDialog() } - }); + }); + } this.dialogManager = new DialogManager(rootDialog); - System.Diagnostics.Trace.TraceInformation("Done loading resources."); + Trace.TraceInformation("Done loading resources."); } } } diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/TestBotHttpAdapter.cs b/tests/Microsoft.Bot.Builder.TestBot.Json/TestBotHttpAdapter.cs index 9bebdf386..6ddc89fda 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/TestBotHttpAdapter.cs +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/TestBotHttpAdapter.cs @@ -1,11 +1,9 @@ using System; using Microsoft.Bot.Builder.AI.QnA; using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Debugging; using Microsoft.Bot.Builder.Dialogs.Declarative; using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.LanguageGeneration; using Microsoft.Bot.Connector.Authentication; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; @@ -37,7 +35,9 @@ namespace Microsoft.Bot.Builder.TestBot.Json this.UseAdaptiveDialogs(); this.UseQnAMaker(); this.UseLanguageGeneration(resourceExplorer); - this.UseDebugger(configuration.GetValue("debugport", 4712), events: new Events()); + this.Use(new RegisterClassMiddleware(configuration)); + + // this.UseDebugger(configuration.GetValue("debugport", 4712), events: new Events()); this.OnTurnError = async (turnContext, exception) => { diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/appsettings.json b/tests/Microsoft.Bot.Builder.TestBot.Json/appsettings.json index 7ccaae416..b4239a6b4 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/appsettings.json +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/appsettings.json @@ -1,9 +1,4 @@ { - "luis": { - "endpoint": "https://westus.api.cognitive.microsoft.com", - // This setting could be set here, but best practice would be to put it in KeyVault or User Secrets - "endpointKey": "00000000-0000-0000-0000-000000000000" - }, "Logging": { "IncludeScopes": false, "Debug": {