public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, TraceWriter log) { var r = new StreamReader(req.Body); log.Info("Prediction trigger function started..."); var content = await r.ReadToEndAsync(); log.Info(content); //if (typeof(Microsoft.ML.Runtime.Data.LoadTransform) == null || // typeof(Microsoft.ML.Runtime.Learners.LinearClassificationTrainer) == null || // typeof(Microsoft.ML.Runtime.Internal.CpuMath.SseUtils) == null) //{ // log.Info("Assemblies are NOT loaded correctly"); // return new BadRequestObjectResult("ML model failed to load"); //} var request = JsonConvert.DeserializeObject <PredictionRequest>(content); var model = await PredictionModel.ReadAsync <BankStatementLineItem, PredictedLabel>(PredictionModelWrapper.GetModel()); var predicted = model.Predict(BankStatementLineItem.ToBankStatementLineItem(request)); //return predicted != null // ? (ActionResult) new OkObjectResult(predicted.SubCategory) // : new BadRequestObjectResult("prediction failed"); return(new BadRequestObjectResult("no dice")); }
public static string Create(FetchAllResponse response) { if (response == null) { return(null); } var list = new List <BankStatementLineItem>(); foreach (var account in response.Accounts) { var item = new BankStatementLineItem(); foreach (var detail in account.StatementData.Details) { // item.TransactionUtcDate = detail.DateObj.Date.DateTime; item.Description = detail.Text; item.Amount = detail.Amount; item.Notes = Convert.ToString(detail.Notes); // item.AccountNumber = account.AccountNumber; item.Bank = account.Institution; item.Tags = string.Join(",", detail.Tags); list.Add(item); } } var sb = new StringBuilder(); const string delimiter = ","; var tmp = new BankStatementLineItem(); sb.AppendLine(nameof(tmp.SubCategory) + delimiter + nameof(tmp.Description) + delimiter + nameof(tmp.Bank) + delimiter + nameof(tmp.Amount) + delimiter + nameof(tmp.AccountName) + delimiter + nameof(tmp.Notes) + delimiter + nameof(tmp.Tags)); foreach (var item in list) { sb.AppendLine(item.SubCategory + delimiter + item.Description + delimiter + item.Bank + delimiter + item.Amount + delimiter + item.AccountName + delimiter + item.Notes + delimiter + item.Tags); } return(sb.ToString()); }
public static string Create(IEnumerable <PocketBook> pbs, string delimiter = ",") { if (pbs == null) { return(null); } var list = new List <BankStatementLineItem>(); foreach (var pb in pbs) { var item = new BankStatementLineItem(); item.SubCategory = CategoryTypeConverter.ExtractSubCategory(pb.Category); item.AccountName = pb.AccountName; //item.AccountNumber = pb.AccountNumber; item.Description = pb.Description; item.Amount = Convert.ToDouble(pb.Amount); item.Tags = pb.Tags; item.Notes = pb.Tags; // item.TransactionUtcDate = FromPlace.ToDateTime(pb.Date); item.Bank = pb.Bank; list.Add(item); } var sb = new StringBuilder(); var tmp = new BankStatementLineItem(); sb.AppendLine(nameof(tmp.SubCategory) + delimiter + nameof(tmp.Description) + delimiter + nameof(tmp.Bank) + delimiter + nameof(tmp.Amount) + delimiter + nameof(tmp.AccountName) + delimiter + nameof(tmp.Notes) + delimiter + nameof(tmp.Tags)); foreach (var item in list) { sb.AppendLine(item.SubCategory + delimiter + item.Description + delimiter + item.Bank + delimiter + item.Amount + delimiter + item.AccountName + delimiter + item.Notes + delimiter + item.Tags); } return(sb.ToString()); }
public async Task <string> PredictAsync(PredictionRequest request) { if (_model == null) { _model = await PredictionModel.ReadAsync <BankStatementLineItem, PredictedLabel>( PredictionModelWrapper.GetModel()); } var item = new BankStatementLineItem { Description = request.Description, Amount = request.Amount, //AccountNumber = request.AccountNumber, //AccountName = request.AccountName, Bank = request.Bank //TransactionUtcDate = request.TransactionUtcDate, //Notes = request.Notes, //Tags = request.Tags }; await SemaphoreSlim.WaitAsync(); PredictedLabel predicted = null; try { predicted = _model.Predict(item); } catch (Exception ex) { Log.Warning(ex, "error {err}", request); throw; } finally { //When the task is ready, release the semaphore. It is vital to ALWAYS release the semaphore when we are ready, or else we will end up with a Semaphore that is forever locked. SemaphoreSlim.Release(); } return(predicted.SubCategory); }
public static string Create(IEnumerable <BankStatementLineItem> data, string delimiter = ",") { if (data == null) { return(null); } var sb = new StringBuilder(); var tmp = new BankStatementLineItem(); sb.AppendLine(nameof(tmp.SubCategory) + delimiter + nameof(tmp.Description) + delimiter + nameof(tmp.Bank) + delimiter + nameof(tmp.Amount) + delimiter + nameof(tmp.AccountName) + delimiter + nameof(tmp.Notes) + delimiter + nameof(tmp.Tags)); foreach (var item in data) { sb.AppendLine(item.SubCategory + delimiter + item.Description + delimiter + item.Bank + delimiter + item.Amount + delimiter + item.AccountName + delimiter + item.Notes + delimiter + item.Tags); } return(sb.ToString()); }