// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddSingleton(_ => Configuration); services.AddBot <MultiBot>(options => { options.CredentialProvider = new ConfigurationCredentialProvider(Configuration); var middleware = options.Middleware; middleware.Add(new ConversationState <ConversationData>(new MemoryStorage())); // Regex Intents middleware.Add(new RegExpRecognizerMiddleware() .AddIntent("mainMenu", new Regex("main menu(.*)", RegexOptions.IgnoreCase)) .AddIntent("help", new Regex("help(.*)", RegexOptions.IgnoreCase)) .AddIntent("cancel", new Regex("cancel(.*)", RegexOptions.IgnoreCase))); // Setup LUIS Middleware var luisRecognizerOptions = new LuisRecognizerOptions { Verbose = false }; var luisModel = new LuisModel( Configuration["LUIS:AppId"], Configuration["LUIS:SubscriptionKey"], new Uri("https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/")); middleware.Add(new LuisRecognizerMiddleware(luisModel, luisRecognizerOptions)); }); }
private IRecognizer GetLuisRecognizer(bool verbose = false, ILuisOptions luisOptions = null) { var luisRecognizerOptions = new LuisRecognizerOptions { Verbose = verbose }; var luisModel = new LuisModel(_luisAppId, _subscriptionKey, new Uri(_luisUriBase), LuisApiVersion.V2); return(new LuisRecognizer(luisModel, luisRecognizerOptions, luisOptions)); }
private IRecognizer GetLuisRecognizer(HttpMessageHandler messageHandler, bool verbose = false, ILuisOptions luisOptions = null) { var client = new HttpClient(messageHandler); var luisRecognizerOptions = new LuisRecognizerOptions { Verbose = verbose }; var luisModel = new LuisModel(_luisAppId, _subscriptionKey, new Uri(_luisUriBase), LuisApiVersion.V2); return(new LuisRecognizer(luisModel, luisRecognizerOptions, luisOptions, client)); }
private LuisRecognizerMiddleware GetLuisRecognizerMiddleware(bool verbose = false, ILuisOptions luisOptions = null) { var luisRecognizerOptions = new LuisRecognizerOptions { Verbose = verbose }; var luisModel = new LuisModel(_luisAppId, _subscriptionKey, new Uri(_luisUriBase)); return(new LuisRecognizerMiddleware(luisModel, luisRecognizerOptions, luisOptions ?? new LuisRequest { Verbose = verbose })); }
//private readonly WeatherBotAccessors _accessors; //private readonly ILogger _logger; public WeatherBotBot(IConfiguration c) { _dialogs = ComposeRootDialog(); var options = new LuisRecognizerOptions { Verbose = true }; var luisModel = new LuisModel(Constantes.LuisApplicationID, Constantes.LuisAuthorizationKey, new Uri(Constantes.LuisEndpoint)); LuisRecognizer = new LuisRecognizer(luisModel, options, null); }
public async Task Telemetry_OverrideOnLogAsync() { // Arrange // Note this is NOT a real LUIS application ID nor a real LUIS subscription-key // theses are GUIDs edited to look right to the parsing and validation code. var endpoint = "https://westus.api.cognitive.microsoft.com/luis/v3.0-preview/apps/b31aeaf3-3511-495b-a07f-571fc873214b/slots/production/predict?verbose=true&timezoneOffset=-360&subscription-key=048ec46dc58e495482b0c447cfdbd291&q="; var clientHandler = new EmptyLuisResponseClientHandler(); var luisApp = new LuisApplication(endpoint); var telemetryClient = new Mock <IBotTelemetryClient>(); var adapter = new NullAdapter(); var options = new LuisRecognizerOptions { TelemetryClient = telemetryClient.Object, LogPersonalInformation = false, HttpClient = clientHandler, }; var activity = new Activity { Type = ActivityTypes.Message, Text = "please book from May 5 to June 6", Recipient = new ChannelAccount(), // to no where From = new ChannelAccount(), // from no one Conversation = new ConversationAccount(), // on no conversation }; var turnContext = new TurnContext(adapter, activity); var recognizer = new LuisRecognizer(luisApp, options); // Act var additionalProperties = new Dictionary <string, string> { { "test", "testvalue" }, { "foo", "foovalue" }, }; var result = await recognizer.RecognizeAsync(turnContext, additionalProperties).ConfigureAwait(false); // Assert Assert.IsNotNull(result); Assert.AreEqual(telemetryClient.Invocations.Count, 1); Assert.AreEqual(telemetryClient.Invocations[0].Arguments[0].ToString(), "LuisResult"); Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("test")); Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1])["test"] == "testvalue"); Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("foo")); Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1])["foo"] == "foovalue"); Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("applicationId")); Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("intent")); Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("intentScore")); Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("fromId")); Assert.IsTrue(((Dictionary <string, string>)telemetryClient.Invocations[0].Arguments[1]).ContainsKey("entities")); }
public void LuisRecognizer_Timeout() { var endpoint = "https://westus.api.cognitive.microsoft.com/luis/v3.0-preview/apps/b31aeaf3-3511-495b-a07f-571fc873214b/slots/production/predict?verbose=true&timezoneOffset=-360&subscription-key=048ec46dc58e495482b0c447cfdbd291&q="; var expectedTimeout = 300; var optionsWithTimeout = new LuisRecognizerOptions() { Timeout = new TimeSpan(0, 0, 0, 0, expectedTimeout), }; var recognizerWithTimeout = new LuisRecognizer(new LuisApplication(endpoint), optionsWithTimeout); Assert.IsNotNull(recognizerWithTimeout); Assert.AreEqual(expectedTimeout, LuisRecognizer.DefaultHttpClient.Timeout.Milliseconds); }
public MainBot(IConfiguration configuration) { // Create DialogSet _dialogs = ComposeRootDialog(); // Create the LUIS recognizer for our model. var luisRecognizerOptions = new LuisRecognizerOptions { Verbose = true }; var luisModel = new LuisModel( configuration[Keys.LuisModel], configuration[Keys.LuisSubscriptionKey], new Uri(configuration[Keys.LuisUriBase]), LuisApiVersion.V2); LuisRecognizer = new LuisRecognizer(luisModel, luisRecognizerOptions, null); }
public TelemetryOverrideRecognizer(LuisApplication application, LuisRecognizerOptions recognizerOptions = null) : base(application, recognizerOptions) { }
public OverrideFillRecognizer(LuisApplication application, LuisRecognizerOptions recognizerOptions = null) : base(application, recognizerOptions) { }
public async Task OnTurn(ITurnContext context) { //TODO: is this the right way to handle cards? string utterance = context.Activity.Text; JObject cardData = (JObject)context.Activity.Value; if (cardData != null && cardData.Property("intent") != null) { utterance = cardData["utterance"].ToString(); } var userState = context.GetUserState <CafeBotUserState>(); var conversationState = context.GetConversationState <CafeBotConvState>(); switch (context.Activity.Type) { case ActivityTypes.ConversationUpdate: var newUserName = context.Activity.MembersAdded[0].Name; if (!string.IsNullOrWhiteSpace(newUserName) && newUserName != "Bot" && string.IsNullOrEmpty(userState.name)) { await context.SendActivity($"Hello {newUserName}! I'm the Cafe bot!"); // remember the user's name userState.name = newUserName; //userState.sendCards = true; await context.SendActivity("I can help you find contoso cafe locations, book a table and answer questions about Contoso cafe!"); // send a welcome card if (userState.sendCards) { await context.SendActivity(CreateCardResponse(context.Activity, createWelcomeCardAttachment())); } } break; case ActivityTypes.Message: // create dialogContext var dc = _dialogs.CreateContext(context, conversationState); // continue with any active dialogs await dc.Continue(); if (!context.Responded) { // call LUIS and get results LuisRecognizerOptions lOptions = new LuisRecognizerOptions() { Verbose = true }; LuisModel lModel = new LuisModel( "edaadd9b-b632-4733-a25c-5b67271035dd", "be30825b782843dcbbe520ac5338f567", new System.Uri("https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/"), Microsoft.Cognitive.LUIS.LuisApiVersion.V2); LuisRecognizer lRecognizer = new LuisRecognizer(lModel, lOptions); System.Threading.CancellationToken ct; cafeLUISModel lResult = await lRecognizer.Recognize <cafeLUISModel>(context.Activity.Text, ct); // top level dispatch switch (lResult.TopIntent().intent) { case cafeLUISModel.Intent.Greeting: //case "hi": await context.SendActivity("Hello, I'm the contoso cafe bot. How can I help you?"); if (userState.sendCards) { await context.SendActivity(CreateCardResponse(context.Activity, createWelcomeCardAttachment())); } break; case cafeLUISModel.Intent.Book_Table: // case "book table": await dc.Begin("BookTable"); break; case cafeLUISModel.Intent.Who_are_you_intent: // case "who are you?": await dc.Begin("WhoAreYou"); break; case cafeLUISModel.Intent.None: default: var qEndpoint = new QnAMakerEndpoint() { Host = "https://contosocafeqnamaker.azurewebsites.net/qnamaker", EndpointKey = "09e2d55b-a44c-41b6-a08a-76a7df9ddffe", KnowledgeBaseId = "b5534d70-bded-45e1-998a-5945174d4ff3" }; var qOptions = new QnAMakerOptions() { ScoreThreshold = 0.4F, Top = 1 }; var qnamaker = new QnAMaker(qEndpoint, qOptions); QueryResult[] qResult = await qnamaker.GetAnswers(context.Activity.Text); if (qResult.Length == 0) { await context.SendActivity("Sorry, I do not understand."); await context.SendActivity("You can say hi or book table or find locations"); } else { await context.SendActivity(qResult[0].Answer); } //await context.SendActivity("Sorry, I do not understand."); //await context.SendActivity("You can say hi or book table or find locations"); break; } } break; } }
public TelemetryOverrideRecognizer(LuisRecognizerOptions recognizerOptions, HttpClientHandler clientHandler = null) : base(recognizerOptions, clientHandler) { }
public OverrideFillRecognizer(LuisRecognizerOptions recognizerOptions, HttpClientHandler clientHandler = null) : base(recognizerOptions, clientHandler) { }