| from flask import render_template, request, redirect, url_for, flash |
| from . import infer_bp |
| from database import History, db |
| from flask_login import current_user |
| from inference.infer_single import * |
| from utils.util_func import * |
| import uuid |
|
|
| |
| results_db = {} |
|
|
| @infer_bp.route('/infer') |
| def infer(): |
| result_id = request.args.get('result_id') |
| |
| if not result_id or result_id not in results_db: |
| flash('No results found. Please submit an essay first.') |
| return redirect(url_for('infer.index')) |
| |
| data = results_db[result_id] |
| |
| return render_template('infer.html', |
| result=data['scores'], |
| topic=data['topic'], |
| essay=data['essay'].replace('\n', '<br>'), |
| corrected_essay=data['feedback'].get('Corrected_essay', '').replace('\n', '<br>'), |
| tr=data['feedback'].get('TR_feedback', ''), |
| cc=data['feedback'].get('CC_feedback', ''), |
| lr=data['feedback'].get('LR_feedback', ''), |
| gra=data['feedback'].get('GRA_feedback', '') |
| ) |
|
|
| @infer_bp.route('/', methods=['GET', 'POST']) |
| def index(): |
| set_seed(42) |
| if request.method == 'POST': |
| topic = request.form['topic'].strip() |
| essay = request.form['essay'].strip() |
| |
| if not topic or not essay: |
| flash('Please provide both a topic and an essay text.') |
| return render_template('index.html', isempty='True') |
| |
| |
| result_id = str(uuid.uuid4()) |
| |
| |
| if len(essay.split()) < 20: |
| results_db[result_id] = { |
| 'scores': [1, 1, 1, 1], |
| 'topic': topic, |
| 'essay': essay, |
| 'feedback': { |
| 'TR_feedback': 'Essay too short for proper evaluation', |
| 'CC_feedback': 'Essay too short for proper evaluation', |
| 'LR_feedback': 'Essay too short for proper evaluation', |
| 'GRA_feedback': 'Essay too short for proper evaluation', |
| 'Corrected_essay': 'No suggestions available for short essays' |
| } |
| } |
| else: |
| scores, feedback = generate_and_score_essay(topic, essay) |
| results_db[result_id] = { |
| 'scores': scores, |
| 'topic': topic, |
| 'essay': essay.replace('\\n', '\n'), |
| 'feedback': feedback or {} |
| } |
| |
| |
| if current_user.is_authenticated: |
| new_history = History( |
| user_id=current_user.id, |
| topic=topic, |
| essay=essay, |
| score_tr=int(results_db[result_id]['scores'][0]), |
| score_cc=int(results_db[result_id]['scores'][1]), |
| score_lr=int(results_db[result_id]['scores'][2]), |
| score_gra=int(results_db[result_id]['scores'][3]) |
| ) |
| db.session.add(new_history) |
| db.session.commit() |
| |
| |
| return redirect(url_for('infer.infer', result_id=result_id)) |
| |
| return render_template('index.html', isempty='False', |
| username=current_user.nickname if current_user.is_authenticated else '') |
| @infer_bp.route('/rubric_explanation') |
| def rubric_explanation(): |
| return render_template('rubric_explanation.html') |
|
|
| @infer_bp.route('/rubric_explanation/task_response') |
| def task_response(): |
| return render_template('task_response.html') |
|
|
| @infer_bp.route('/rubric_explanation/coherence_cohesion') |
| def coherence_cohesion(): |
| return render_template('coherence_cohesion.html') |
|
|
| @infer_bp.route('/rubric_explanation/lexical_resource') |
| def lexical_resource(): |
| return render_template('lexical_resource.html') |
|
|
| @infer_bp.route('/rubric_explanation/grammatical_range_accuracy') |
| def grammatical_range_accuracy(): |
| return render_template('grammatical_range_accuracy.html') |
|
|