diff --git a/joeynmt_server/models/evaluation_results.py b/joeynmt_server/models/evaluation_results.py index c72fc09ad2bb070357a55a194e2d7bd320b01cd9..a2f6391165f95828ceb601ca81408e623307d89f 100644 --- a/joeynmt_server/models/evaluation_results.py +++ b/joeynmt_server/models/evaluation_results.py @@ -13,3 +13,9 @@ class EvaluationResult(BaseModel): @property def accuracy(self): return self.correct / self.total + + + def json_ready_dict(self) -> dict: + d = super().json_ready_dict() + d['accuracy'] = self.accuracy + return d diff --git a/joeynmt_server/views/__init__.py b/joeynmt_server/views/__init__.py index 0d709ad19010e0dcccc72469e9f74a088e1106cc..13a3149f99bde51ddd84cd21f9ebc912ae905488 100644 --- a/joeynmt_server/views/__init__.py +++ b/joeynmt_server/views/__init__.py @@ -3,3 +3,4 @@ from .feedback import (get_feedback, edit_feedback, query_feedback, save_feedback) from .translate import translate from .train import train +from .validate import validate, validations diff --git a/joeynmt_server/views/train.py b/joeynmt_server/views/train.py index b1b72d3175fe31539d2cd0c9f8c00a058e9465cb..075a94310a9e773f990b1963533dff4903a0225c 100644 --- a/joeynmt_server/views/train.py +++ b/joeynmt_server/views/train.py @@ -7,7 +7,7 @@ from flask import current_app, jsonify, request from joeynmt_server.app import create_app from joeynmt_server.models import Lock -from joeynmt_server.trainer import train_n_rounds, validate as validate_on_data +from joeynmt_server.trainer import train_n_rounds from joeynmt_server.utils.helper import get_utc_now @@ -49,29 +49,3 @@ def check_train_status(): still_training = False return jsonify({'still_training': still_training}) - - -@current_app.route('/validate', methods=['POST']) -def validate(): - data = request.json - config_basename = data.get('model') - - dataset = data.get('dataset', 'dev') - - def validate_in_thread(): - app = create_app() - with app.app_context(): - try: - validate_on_data(config_basename, dataset) - except: - logging.error('Training failed.') - logging.error(traceback.format_exc()) - - thread = threading.Thread(target=validate_in_thread) - thread.start() - - time.sleep(0.1) - response = {'validating': thread.is_alive()} - status = 200 if response['validating'] else 500 - return jsonify(response), status - diff --git a/joeynmt_server/views/validate.py b/joeynmt_server/views/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..e0c3a8f79d8bef08f1ae7e8ec9551e32a2cb9ffd --- /dev/null +++ b/joeynmt_server/views/validate.py @@ -0,0 +1,48 @@ +import logging +import threading +import time +import traceback + +from flask import current_app, jsonify, request + +from joeynmt_server.app import create_app +from joeynmt_server.models import EvaluationResult +from joeynmt_server.trainer import validate as validate_on_data + + +@current_app.route('/validate', methods=['POST']) +def validate(): + data = request.json + config_basename = data.get('model') + + dataset = data.get('dataset', 'dev') + + def validate_in_thread(): + app = create_app() + with app.app_context(): + try: + validate_on_data(config_basename, dataset) + except: + logging.error('Training failed.') + logging.error(traceback.format_exc()) + + thread = threading.Thread(target=validate_in_thread) + thread.start() + + time.sleep(0.1) + response = {'validating': thread.is_alive()} + status = 200 if response['validating'] else 500 + return jsonify(response), status + + +@current_app.route('/validations', methods='GET') +def validations(): + label = request.args.get('label') + + if label: + results = EvaluationResult.query.filter_by(label=label).all() + else: + results = EvaluationResult.query.all() + + results = [result.json_ready_dict() for result in results] + return jsonify(results)