api/models.py (59 lines of code) (raw):

# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # """ API Models module """ from datetime import date from django.db import models class Dataset(models.Model): name = models.CharField(max_length=128, unique=True) region = models.CharField(max_length=128, unique=True) class Algorithm(models.Model): ''' The MLAlgorithm represent the ML algorithm object. Attributes ---------- classifier: The name of the algorithm. description: The short description of how the algorithm works. code: The code of the algorithm. version: The version of the algorithm similar to software versioning. status: The status of algorithm in the endpoint. Can be: testing, staging, production, ab_testing. created_by: The name of the owner. created_at: The date when MLAlgorithm was added. ''' classifier: str = models.CharField(max_length=128) description: str = models.TextField(blank=True, null=True) version: str = models.CharField(max_length=128) status: str = models.CharField(max_length=128) dataset: Dataset = models.ForeignKey(Dataset, to_field="name", null=True, on_delete=models.SET_NULL) created_at: date = models.DateTimeField(auto_now_add=True, blank=True) created_by: str = models.CharField(max_length=128) def __str__(self): return f""" ML Algorithm Classifier: {self.classifier} Description: {self.description} Version: {self.version} Status: {self.status} Created By: {self.created_by} Created At: {self.created_at} """ class Meta: ordering = ['created_at'] class PredictionRequest(models.Model): ''' The MLRequest will keep information about all requests to ML algorithms. Attributes ---------- input: The input data to ML algorithm in JSON format. response: The full response of the ML algorithm in JSON format. prediction: The the prediction from ML request. feedback: The feedback about the response in JSON format. created_by: The name of creator. created_at: The date when request was created. algorithm: The reference to MLAlgorithm used to compute response. ''' input = models.JSONField() response = models.JSONField() prediction = models.CharField(max_length=128) feedback = models.CharField(max_length=128, blank=True, null=True) notes = models.TextField(blank=True, null=True) algorithm: Algorithm = models.ForeignKey(Algorithm, on_delete=models.DO_NOTHING, blank=True, null=True) created_at: date = models.DateTimeField(auto_now_add=True, blank=True) created_by = models.CharField(max_length=128) def __str__(self): return f""" ML Request Input Data: {self.input_data} Response: {self.response} Feedback: {self.feedback} Algorithm: {self.algorithm} Created By: {self.created_by} Created At: {self.created_at} """ class Meta: ordering = ['created_at']