backend/time-series-forecasting/models/completed_forecast_job.py (31 lines of code) (raw):
# Copyright 2022 Google LLC
#
# Licensed 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.
from datetime import datetime, timedelta
from humanize.time import precisedelta
from typing import Any, Dict, Optional
from models import forecast_job_request
class CompletedForecastJob:
"""
Encapsulates the results of a train-eval-forecast job.
"""
def __init__(
self,
end_time: datetime,
request: forecast_job_request.ForecastJobRequest,
model_uri: Optional[str] = None,
evaluation_uri: Optional[Dict[str, Any]] = None,
prediction_uri: Optional[Dict[str, Any]] = None,
error_message: Optional[str] = None,
) -> None:
"""The forecast job results.
Args:
start_time (datetime.datetime): The request start time.
start_time (datetime.datetime): The request end time.
model_uri (Optional[str], optional): The URI to the model. Defaults to None.
evaluation_uri (Optional[Dict[str, Any]], optional): The BigQuery URI of the evaluation. Defaults to None.
prediction_uri (Optional[Dict[str, Any]], optional): The BigQuery URI of the prediction. Defaults to None.
error_message (Optional[str], optional): The error message encountered during training. Defaults to None.
"""
super().__init__()
self.end_time = end_time
self.request = request
self.model_uri = model_uri
self.evaluation_uri = evaluation_uri
self.prediction_uri = prediction_uri
self.error_message = error_message
@property
def duration(self) -> timedelta:
return self.end_time - self.request.start_time
def as_response(self) -> Dict:
return {
"jobId": self.request.id,
"request": self.request.as_response(),
"endTime": self.end_time,
"errorMessage": self.error_message,
}