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); }
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); } }
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; } } }