예제 #1
0
        public async Task <PredictionResponse> Predict(PredictionRequest predictionRequest)
        {
            var guid = Guid.NewGuid().ToString();
            var predictionResponseItem = new PredictionResponseItem();
            var response        = new PredictionResponse();
            var databaseContext = this.CreateContext();
            var cache           = await databaseContext.PredictionRequests.Where(g => g.Guid == guid).ToListAsync();

            await this.InsertRequests(predictionRequest, guid);

            foreach (var loopItem in predictionRequest.Items)
            {
                predictionResponseItem = new PredictionResponseItem();
                await CalculateProbability(loopItem, predictionResponseItem);

                response.Predictions.Add(predictionResponseItem);
            }

            // Experiment
            if (this.serviceConfiguration.ExperimentEnabled)
            {
                await this.InsertFilePredictionForExperiment(predictionRequest, guid);

                response = await this.FilterResponseForExperiment(predictionRequest, response);
            }

            return(response);
        }
예제 #2
0
        private async Task <PredictionResponse> GenerateResponse(PredictionRequest predictionRequest, string guid)
        {
            using (var databaseContext = this.CreateContext())
            {
                var cache = await databaseContext.PredictionRequests.Where(g => g.Guid == guid).ToListAsync();

                var response = new PredictionResponse();
                foreach (var requestItem in predictionRequest.Items)
                {
                    var cachedItem = cache.FirstOrDefault(g => g.Path == requestItem.Path);
                    if (cachedItem == null)
                    {
                        throw new ApplicationException($"Cached item for path '{requestItem.Path}' not found");
                    }

                    var predictionResponseItem = new PredictionResponseItem();
                    predictionResponseItem.ProbableSuccess    = cachedItem.BuildResultPredictionClass;
                    predictionResponseItem.SuccessProbability = 1 - cachedItem.BuildResultFaildPrediction;
                    response.Predictions.Add(predictionResponseItem);
                }

                return(response);
            }
        }
예제 #3
0
        private async Task CalculateProbability(PredictionRequestFile predictionRequestFile, PredictionResponseItem predictionResponseItem)
        {
            string apiKey = this.serviceConfiguration.PredictionServiceKey;
            string apiUrl = this.serviceConfiguration.PredictionServiceUrl;
            var    configurationTypeFullyQualifiedName = this.serviceConfiguration.PredictionServiceConfigurationType;
            var    configurationType = Type.GetType(configurationTypeFullyQualifiedName, true);

            var configuration = (IPredictionServiceConfiguration)Activator.CreateInstance(configurationType);

            predictionResponseItem.SuccessProbability = 0;
            predictionResponseItem.ProbableSuccess    = false;

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(apiUrl);
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);

                HttpResponseMessage httpResponse = await client.PostAsync("", new StringContent(configuration.Serialize(predictionRequestFile)));

                if (httpResponse.IsSuccessStatusCode)
                {
                    string result = await httpResponse.Content.ReadAsStringAsync();

                    JObject jObject = JObject.Parse(result);

                    var scoredProbabilities = jObject.SelectToken("Results.output1[0]['Scored Probabilities']").ToObject <double>();
                    var scoredLabels        = jObject.SelectToken("Results.output1[0]['Scored Labels']").ToObject <int>();

                    predictionResponseItem.SuccessProbability = scoredProbabilities;
                    predictionResponseItem.ProbableSuccess    = scoredLabels == 1 ? true : false;
                }
            }
        }