Esempio n. 1
0
        private async Task ProcessRecognitionResultsAsync(SpeechRecognitionResult results, RequestExtras requestExtras)
        {
            if (!string.IsNullOrWhiteSpace(results.Text))
            {
                var request = new AIRequest();
                request.Query = new[] { results.Text };
                try
                {
                    request.Confidence = new[] { Convert.ToSingle(results.RawConfidence) };
                }
                catch
                {
                }

                try
                {
                    if (requestExtras != null)
                    {
                        requestExtras.CopyTo(request);
                    }

                    var response = await dataService.RequestAsync(request);

                    FireOnResult(response);
                }
                catch (Exception e)
                {
                    FireOnError(new AIServiceException(e));
                }
            }
        }
        private AIRequest CreateAIRequest(SpeechRecognitionResult recognitionResults)
        {
            var texts = new List <string> {
                recognitionResults.Text
            };
            var confidences = new List <float> {
                ConfidenceToFloat(recognitionResults.Confidence)
            };

            var aiRequest = new AIRequest();

            var alternates = recognitionResults.GetAlternates(5);

            if (alternates != null)
            {
                foreach (var a in alternates)
                {
                    texts.Add(a.Text);
                    confidences.Add(ConfidenceToFloat(a.Confidence));
                }
            }
            aiRequest.Query      = texts.ToArray();
            aiRequest.Confidence = confidences.ToArray();
            return(aiRequest);
        }
        public async Task SessionTest()
        {
            var config = new AIConfiguration(SUBSCRIPTION_KEY, ACCESS_TOKEN, SupportedLanguage.English);

            var firstService  = new AIDataService(config);
            var secondService = new AIDataService(config);

            {
                var weatherRequest  = new AIRequest("weather");
                var weatherResponse = await MakeRequestAsync(firstService, weatherRequest);

                Assert.IsNotNull(weatherResponse);
            }

            {
                var checkSecondRequest  = new AIRequest("check weather");
                var checkSecondResponse = await MakeRequestAsync(secondService, checkSecondRequest);

                Assert.IsTrue(string.IsNullOrEmpty(checkSecondResponse.Result.Action));
            }

            {
                var checkFirstRequest  = new AIRequest("check weather");
                var checkFirstResponse = await MakeRequestAsync(firstService, checkFirstRequest);

                Assert.IsNotNull(checkFirstResponse.Result.Action);
                Assert.IsTrue(checkFirstResponse.Result.Action.Equals("checked", StringComparison.CurrentCultureIgnoreCase));
            }
        }
Esempio n. 4
0
        public AIResponse TextRequest(AIRequest request)
        {
            var preditor   = new BotPredictor();
            var doc        = preditor.Predict(agent, request).Result;
            var parameters = new Dictionary <String, Object>();

            doc.Sentences[0].Entities.ForEach(x => parameters.Add(x.Entity, x.Value));

            return(new AIResponse
            {
                Lang = request.Language,
                Timestamp = DateTime.UtcNow,
                SessionId = request.SessionId,
                Status = new AIResponseStatus(),
                Result = new AIResponseResult
                {
                    Score = doc.Sentences[0].Intent == null ? 0 : doc.Sentences[0].Intent.Confidence,
                    ResolvedQuery = doc.Sentences[0].Text,
                    Fulfillment = new AIResponseFulfillment {
                    },
                    Parameters = parameters,
                    Metadata = new AIResponseMetadata
                    {
                        IntentName = doc.Sentences[0].Intent?.Label
                    }
                }
            });
        }
        public AIResponse VoiceRequest(Stream voiceStream, RequestExtras requestExtras = null)
        {
            var request = new AIRequest();

            request.Language  = config.Language.code;
            request.Timezone  = TimeZone.CurrentTimeZone.StandardName;
            request.SessionId = sessionId;

            if (requestExtras != null)
            {
                requestExtras.CopyTo(request);
            }

            try
            {
                var httpRequest = (HttpWebRequest)WebRequest.Create(config.RequestUrl);
                httpRequest.Method = "POST";
                httpRequest.Accept = "application/json";

                httpRequest.Headers.Add("Authorization", "Bearer " + config.ClientAccessToken);
                httpRequest.Headers.Add("ocp-apim-subscription-key", config.SubscriptionKey);

                var jsonSettings = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                };

                var jsonRequest = JsonConvert.SerializeObject(request, Formatting.None, jsonSettings);

                if (config.DebugLog)
                {
                    Debug.WriteLine("Request: " + jsonRequest);
                }

                var multipartClient = new MultipartHttpClient(httpRequest);
                multipartClient.connect();

                multipartClient.addStringPart("request", jsonRequest);
                multipartClient.addFilePart("voiceData", "voice.wav", voiceStream);

                multipartClient.finish();

                var responseJsonString = multipartClient.getResponse();

                if (config.DebugLog)
                {
                    Debug.WriteLine("Response: " + responseJsonString);
                }

                var aiResponse = JsonConvert.DeserializeObject <AIResponse>(responseJsonString);

                CheckForErrors(aiResponse);

                return(aiResponse);
            }
            catch (Exception e)
            {
                throw new AIServiceException(e);
            }
        }
        public async Task WrongEntitiesTest()
        {
            var config      = new AIConfiguration(ACCESS_TOKEN, SupportedLanguage.English);
            var dataService = new AIDataService(config);

            var aiRequest = new AIRequest("hi nori");

            var myDwarfs = new Entity("not_dwarfs");

            myDwarfs.AddEntry(new EntityEntry("Ori", new[] { "ori", "Nori" }));
            myDwarfs.AddEntry(new EntityEntry("bifur", new[] { "Bofur", "Bombur" }));

            var extraEntities = new List <Entity> {
                myDwarfs
            };

            aiRequest.Entities = extraEntities;

            try
            {
                var aiResponse = await MakeRequestAsync(dataService, aiRequest);

                Assert.IsTrue(false, "Request should throws bad_request exception");
            }
            catch (AIServiceException e)
            {
                Assert.IsTrue(true);
            }
        }
Esempio n. 7
0
        private void UpdateAndroidResult()
        {
            var wrapper = androidResultWrapper;

            if (wrapper.IsReady)
            {
                var recognitionResult = wrapper.GetResult();
                androidResultWrapper = null;
                androidRecognizer.Clean();

                if (recognitionResult.IsError)
                {
                    FireOnError(new Exception(recognitionResult.ErrorMessage));
                }
                else
                {
                    var request = new AIRequest
                    {
                        Query      = recognitionResult.RecognitionResults,
                        Confidence = recognitionResult.Confidence
                    };
                    for (int i = 0; i < recognitionResult.RecognitionResults.Length; i++)
                    {
                        Debug.Log("Speech recognize: " + recognitionResult.RecognitionResults[i] + "  " + recognitionResult.Confidence[i]);
                    }
                    d_OnNativeResult(recognitionResult.RecognitionResults, recognitionResult.Confidence);
                    //var aiResponse = apiAi.TextRequest(request);
                    //ProcessResult(aiResponse);
                }
            }
        }
Esempio n. 8
0
        public AIResponse TextRequest(AIRequest request)
        {
            var preditor = new BotPreditor();
            var text     = preditor.Predict(agent, request);

            return(null);
        }
Esempio n. 9
0
        private void UpdateAndroidResult()
        {
            Debug.Log("UpdateAndroidResult");
            var wrapper = androidResultWrapper;

            if (wrapper.IsReady)
            {
                var recognitionResult = wrapper.GetResult();
                androidResultWrapper = null;
                androidRecognizer.Clean();

                if (recognitionResult.IsError)
                {
                    FireOnError(new Exception(recognitionResult.ErrorMessage));
                }
                else
                {
                    var request = new AIRequest {
                        Query      = recognitionResult.RecognitionResults,
                        Confidence = recognitionResult.Confidence
                    };

                    var aiResponse = apiAi.TextRequest(request);
                    ProcessResult(aiResponse);
                }
            }
        }
Esempio n. 10
0
        public void InputContextLifespanTest()
        {
            var dataService = CreateDataService();
            var aiRequest   = new AIRequest("and for tomorrow");
            var aiContext   = new AIContext
            {
                Name       = "weather",
                Parameters = new Dictionary <string, string>
                {
                    { "location", "London" }
                },
                Lifespan = 3
            };

            aiRequest.Contexts =
                new List <AIContext>
            {
                aiContext
            };

            var response = MakeRequest(dataService, aiRequest);

            Assert.IsNotNull(response.Result.GetContext("weather"));

            for (int i = 0; i < 2; i++)
            {
                response = MakeRequest(dataService, new AIRequest("next request"));
            }

            Assert.IsNotNull(response.Result.GetContext("weather"));
            response = MakeRequest(dataService, new AIRequest("next request"));
            Assert.IsNull(response.Result.GetContext("weather"));
        }
        public AiResponseExtract ProcessUserRequest(Conversation conversation, UserRequest userRequest)
        {
            AiResponseExtract response = new AiResponseExtract();

            AIRequest aiRequest = new AIRequest(userRequest.Body);
            AIContext aiContext = new AIContext()
            {
                Name = conversation.CurrentMessage.Name
            };

            aiRequest.Contexts = new List <AIContext>()
            {
                aiContext
            };

            AIResponse aiResponse = apiAi.TextRequest(aiRequest);

            response.Intent = aiResponse.Result.Action;

            if (aiResponse.Result.Action.Contains("smalltalk"))
            {
                response.SmallTalk = true;
            }

            response.Speech = aiResponse.Result.Fulfillment.Speech;

            return(response);
        }
Esempio n. 12
0
        public void SessionTest()
        {
            var config = new AIConfiguration(ACCESS_TOKEN, SupportedLanguage.English);

            var firstService  = new AIDataService(config);
            var secondService = new AIDataService(config);

            {
                var weatherRequest  = new AIRequest("weather");
                var weatherResponse = MakeRequest(firstService, weatherRequest);
                Assert.IsNotNull(weatherResponse);
            }

            {
                var checkSecondRequest  = new AIRequest("check weather");
                var checkSecondResponse = MakeRequest(secondService, checkSecondRequest);
                Assert.IsEmpty(checkSecondResponse.Result.Action);
            }

            {
                var checkFirstRequest  = new AIRequest("check weather");
                var checkFirstResponse = MakeRequest(firstService, checkFirstRequest);
                Assert.IsNotNull(checkFirstResponse.Result.Action);
                Assert.IsTrue(checkFirstResponse.Result.Action.Equals("checked", StringComparison.InvariantCultureIgnoreCase));
            }
        }
        public async Task DifferentAgentsTest()
        {
            var query = "I want pizza";

            {
                var config      = new AIConfiguration(ACCESS_TOKEN, SupportedLanguage.English);
                var dataService = new AIDataService(config);

                var request = new AIRequest(query);

                var response = await dataService.RequestAsync(request);

                Assert.IsNotNull(response.Result);
                Assert.AreEqual("pizza", response.Result.Action);
            }

            {
                var config      = new AIConfiguration("968235e8e4954cf0bb0dc07736725ecd", SupportedLanguage.English);
                var dataService = new AIDataService(config);
                var request     = new AIRequest(query);

                var response = await dataService.RequestAsync(request);

                Assert.IsNotNull(response.Result);
                Assert.IsTrue(string.IsNullOrEmpty(response.Result.Action));
            }
        }
Esempio n. 14
0
        public async Task <AIResponse> RequestAsync(AIRequest request, CancellationToken cancellationToken)
        {
            request.Language  = config.Language.code;
            request.Timezone  = TimeZoneInfo.Local.StandardName;
            request.SessionId = sessionId;

            try
            {
                var jsonRequest = JsonConvert.SerializeObject(request, Formatting.None, jsonSettings);

                if (config.DebugLog)
                {
                    Debug.WriteLine($"Request: {jsonRequest}");
                }

                var content = new HttpStringContent(jsonRequest, UnicodeEncoding.Utf8, "application/json");

                var response = await httpClient.PostAsync(new Uri(config.RequestUrl), content).AsTask(cancellationToken);

                return(await ProcessResponse(response));
            }
            catch (AIServiceException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new AIServiceException(e);
            }
        }
Esempio n. 15
0
        public async Task <AIResponse> RequestAsync(AIRequest request)
        {
            request.Language  = config.Language.code;
            request.Timezone  = TimeZoneInfo.Local.StandardName;
            request.SessionId = sessionId;

            try
            {
                var httpRequest = (HttpWebRequest)WebRequest.Create(config.RequestUrl);
                httpRequest.Method      = "POST";
                httpRequest.ContentType = "application/json; charset=utf-8";
                httpRequest.Accept      = "application/json";

                httpRequest.Headers["Authorization"]             = "Bearer " + config.ClientAccessToken;
                httpRequest.Headers["ocp-apim-subscription-key"] = config.SubscriptionKey;

                var jsonSettings = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                };

                var jsonRequest = JsonConvert.SerializeObject(request, Formatting.None, jsonSettings);

                if (config.DebugLog)
                {
                    Debug.WriteLine("Request: " + jsonRequest);
                }

                var requestStream = await httpRequest.GetRequestStreamAsync();

                using (var streamWriter = new StreamWriter(requestStream))
                {
                    streamWriter.Write(jsonRequest);
                    streamWriter.Dispose();
                }

                var httpResponse = await httpRequest.GetResponseAsync() as HttpWebResponse;

                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();

                    if (config.DebugLog)
                    {
                        Debug.WriteLine("Response: " + result);
                    }

                    var aiResponse = JsonConvert.DeserializeObject <AIResponse>(result);

                    CheckForErrors(aiResponse);

                    return(aiResponse);
                }
            }
            catch (Exception e)
            {
                throw new AIServiceException(e);
            }
        }
Esempio n. 16
0
        public AIResponse TextRequest(AIRequest request)
        {
            AIResponse aiResponse = new AIResponse();

            string model  = RasaRequestExtension.GetModelPerContexts(agent, AiConfig, request, dc);
            var    result = CallRasa(agent.Id, request.Query.First(), model);

            result.Content.Log();

            RasaResponse response = result.Data;

            aiResponse.Id        = Guid.NewGuid().ToString();
            aiResponse.Lang      = agent.Language;
            aiResponse.Status    = new AIResponseStatus {
            };
            aiResponse.SessionId = AiConfig.SessionId;
            aiResponse.Timestamp = DateTime.UtcNow;

            var intentResponse = RasaRequestExtension.HandleIntentPerContextIn(agent, AiConfig, request, result.Data, dc);

            RasaRequestExtension.HandleParameter(agent, intentResponse, response, request);

            RasaRequestExtension.HandleMessage(intentResponse);

            aiResponse.Result = new AIResponseResult
            {
                Source        = "agent",
                ResolvedQuery = request.Query.First(),
                Action        = intentResponse?.Action,
                Parameters    = intentResponse?.Parameters?.ToDictionary(x => x.Name, x => (object)x.Value),
                Score         = response.Intent.Confidence,
                Metadata      = new AIResponseMetadata {
                    IntentId = intentResponse?.IntentId, IntentName = intentResponse?.IntentName
                },
                Fulfillment = new AIResponseFulfillment
                {
                    Messages = intentResponse?.Messages?.Select(x => {
                        if (x.Type == AIResponseMessageType.Custom)
                        {
                            return((new
                            {
                                x.Type,
                                Payload = JsonConvert.DeserializeObject(x.PayloadJson)
                            }) as Object);
                        }
                        else
                        {
                            return((new { x.Type, x.Speech }) as Object);
                        }
                    }).ToList()
                }
            };

            RasaRequestExtension.HandleContext(dc, AiConfig, intentResponse, aiResponse);

            Console.WriteLine(JsonConvert.SerializeObject(aiResponse.Result));

            return(aiResponse);
        }
Esempio n. 17
0
        public AIResponse TextRequest(AIRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            return(dataService.Request(request));
        }
Esempio n. 18
0
        public async Task <AIResponse> TextRequestAsync(AIRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            return(await dataService.RequestAsync(request));
        }
Esempio n. 19
0
        public AIResponse Request(AIRequest request)
        {
            request.Language  = config.Language.code;
            request.Timezone  = TimeZone.CurrentTimeZone.StandardName;
            request.SessionId = SessionId;

            try
            {
                var httpRequest = (HttpWebRequest)WebRequest.Create(config.RequestUrl);
                httpRequest.Method      = "POST";
                httpRequest.ContentType = "application/json; charset=utf-8";
                httpRequest.Accept      = "application/json";

                httpRequest.Headers.Add("Authorization", "Bearer " + config.ClientAccessToken);

                var jsonSettings = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore,
                    ContractResolver  = new CamelCasePropertyNamesContractResolver()
                };

                var jsonRequest = JsonConvert.SerializeObject(request, Formatting.None, jsonSettings);

                if (config.DebugLog)
                {
                    Debug.WriteLine("Request: " + jsonRequest);
                }

                using (var streamWriter = new StreamWriter(httpRequest.GetRequestStream()))
                {
                    streamWriter.Write(jsonRequest);
                    streamWriter.Close();
                }

                var httpResponse = httpRequest.GetResponse() as HttpWebResponse;
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();

                    if (config.DebugLog)
                    {
                        Debug.WriteLine("Response: " + result);
                    }

                    var aiResponse = JsonConvert.DeserializeObject <AIResponse>(result);

                    CheckForErrors(aiResponse);

                    return(aiResponse);
                }
            }
            catch (Exception e)
            {
                throw new AIServiceException(e);
            }
        }
        private async Task <AIResponse> MakeRequestAsync(AIDataService service, AIRequest request)
        {
            var aiResponse = await service.RequestAsync(request);

            Assert.IsNotNull(aiResponse);
            Assert.IsFalse(aiResponse.IsError);
            Assert.IsFalse(string.IsNullOrEmpty(aiResponse.Id));
            Assert.IsNotNull(aiResponse.Result);
            return(aiResponse);
        }
Esempio n. 21
0
        private AIResponse MakeRequest(AIDataService service, AIRequest request)
        {
            var aiResponse = service.Request(request);

            Assert.IsNotNull(aiResponse);
            Assert.IsFalse(aiResponse.IsError);
            Assert.IsFalse(string.IsNullOrEmpty(aiResponse.Id));
            Assert.IsNotNull(aiResponse.Result);
            return(aiResponse);
        }
Esempio n. 22
0
        static void WaitText()
        {
            string        text    = Console.ReadLine();
            RequestExtras extras  = new RequestExtras();
            AIRequest     request = new AIRequest(text);

            request.SessionId = _SessionId;
            AIResponse response = _ApiAi.TextRequest(request);

            HandleResponse(response);
        }
Esempio n. 23
0
        public static string getDialogflow(Request request)
        {
            var config      = new AIConfiguration(accessToken, SupportedLanguage.English);
            var dataService = new AIDataService(config);
            var aiRequest   = new AIRequest(request.Message);
            var aiResponse  = dataService.Request(aiRequest);

            var dialogflowresult = aiResponse.Result.Fulfillment.Speech;

            return(dialogflowresult);
        }
Esempio n. 24
0
        public void TextRequestTest()
        {
            var dataService = CreateDataService();

            var request = new AIRequest("Hello");

            var response = dataService.Request(request);

            Assert.IsNotNull(response);
            Assert.AreEqual("greeting", response.Result.Action);
            Assert.AreEqual("Hi! How are you?", response.Result.Fulfillment.Speech);
        }
        public void CopyTo(AIRequest request)
        {
            if (HasContexts)
            {
                request.Contexts = Contexts;
            }

            if (HasEntities)
            {
                request.Entities = Entities;
            }
        }
        public async Task TestTextRequest()
        {
            var config      = new AIConfiguration(ACCESS_TOKEN, SupportedLanguage.English);
            var dataService = new AIDataService(config);

            var request = new AIRequest("Hello");

            var response = await dataService.RequestAsync(request);

            Assert.IsNotNull(response);
            Assert.AreEqual("greeting", response.Result.Action);
            Assert.AreEqual("Hi! How are you?", response.Result.Fulfillment.Speech);
        }
Esempio n. 27
0
        public void TextRequestStart(AIRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            AIResponseList = new List <AIResponse>();
            for (var i = 0; i < m; i++)
            {
                tasks[i] = Task.Factory.StartNew(() => TextRequestExecAsync(request));
            }
        }
Esempio n. 28
0
        public void ContextsTest()
        {
            var dataService = CreateDataService();
            var aiRequest   = new AIRequest("weather");

            dataService.ResetContexts();

            var aiResponse = MakeRequest(dataService, aiRequest);
            var action     = aiResponse.Result.Action;

            Assert.AreEqual("showWeather", action);
            Assert.IsTrue(aiResponse.Result.Contexts.Any(c => c.Name == "weather"));
        }
Esempio n. 29
0
        public void TextAIRequestTest()
        {
            var config = new AIConfiguration(ACCESS_TOKEN, SupportedLanguage.English);

            var apiAi = new ApiAi(config);

            var request  = new AIRequest("hello");
            var response = apiAi.TextRequest(request);

            Assert.IsNotNull(response);
            Assert.AreEqual("greeting", response.Result.Action);
            Assert.AreEqual("Hi! How are you?", response.Result.Fulfillment.Speech);
        }
Esempio n. 30
0
        public bool ResetContexts()
        {
            var cleanRequest = new AIRequest("empty_query_for_resetting_contexts");

            cleanRequest.ResetContexts = true;
            try {
                var response = Request(cleanRequest);
                return(!response.IsError);
            } catch (AIServiceException e) {
                Debug.WriteLine("Exception while contexts clean." + e);
                return(false);
            }
        }