# | |
# 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'] |