File size: 4,379 Bytes
215d189
146b688
40c29ba
215d189
 
 
 
 
 
146b688
ea2d6ae
215d189
 
 
b14be2c
215d189
 
 
40c29ba
ea2d6ae
146b688
 
b845998
146b688
f7e9cda
 
 
40c29ba
 
 
 
ca60da9
40c29ba
 
 
 
 
 
 
 
 
 
ca60da9
 
40c29ba
 
 
 
 
 
 
 
 
b845998
40c29ba
 
 
146b688
 
40c29ba
b14be2c
b845998
 
 
 
b42419d
 
 
 
215d189
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea2d6ae
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import os
import pandas as pd
import utils
import base64
import shutil
import zipfile
from flask import Flask, render_template, request, redirect, url_for
from postmarker.core import PostmarkClient
from werkzeug.utils import secure_filename

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'  # Directory where files will be stored
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
app.config['ALLOWED_EXTENSIONS'] = {'zip'}

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']

@app.route('/')
def index():
    # Load the CSV file into a DataFrame
    df = pd.read_csv('static/leaderboard.csv')

    df = df.round(3)
    df.insert(0, '#', '')

    # up_arrow, down_arrow = "⬆️", "⬇️"
    up_arrow, down_arrow = "↑", "↓"
    # up_arrow, down_arrow = "▲", "▼"

    df = df.rename(columns={
        "Ordinal (Win rate)": f"Ordinal - Win rate ({up_arrow})",
        "Cardinal (Score)": f"Cardinal - Score ({up_arrow})",
        "RO Stability": f"RO Stability ({up_arrow})",
        "Stress": f"Stress ({down_arrow})",
        "Rank Distance": f"Rank Distance ({down_arrow})",
        "Separability": f"Separability ({up_arrow})",
        "CFI": f"CFI ({up_arrow})",
        "SRMR": f"SRMR ({down_arrow})",
        "RMSEA": f"RMSEA ({down_arrow})",
        "Cronbach alpha": f"Cronbach alpha ({up_arrow})"
    })

    # Generate full table HTML with clickable model names
    ################
    main_table_metrics = [
        "#",
        "Model",
        f"Ordinal - Win rate ({up_arrow})",
        f"Cardinal - Score ({up_arrow})",
        f"RO Stability ({up_arrow})"
    ]

    main_df = df[main_table_metrics].copy()
    main_table_html = utils.df_to_table_html(main_df, additional_class="main-table")
    full_table_html = utils.df_to_table_html(df, additional_class="full-table")

    # Render the template with the table HTML
    return render_template('index.html', main_table_html=main_table_html, full_table_html=full_table_html)

@app.route('/model/<model_name>')
def model_detail(model_name):
    return render_template('model_detail.html', model_name=model_name)

@app.route('/about')
def about():
    return render_template('about.html')

@app.route('/new_model')
def new_model():
    return render_template('new_model.html')

@app.route('/model_submitted')
def model_submitted():
    return render_template('model_submitted.html')

@app.route('/failed_submission')
def failed_submission():
    return render_template('failed_submission.html')


@app.route('/submit_model', methods=['POST'])
def submit_model():
    model_name = request.form['model_name']
    pull_request_link = request.form['pull_request_link']
    email = request.form['email']
    description = request.form['description']

    # Handle ZIP file upload
    if 'model_files' not in request.files:
        return redirect(url_for('failed_submission'))

    file = request.files['model_files']

    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        file.save(file_path)

        # Read the file content and encode it in base64
        with open(file_path, 'rb') as f:
            file_content = base64.b64encode(f.read()).decode('ascii')

        # Set up Postmark email client
        postmark = PostmarkClient(server_token=os.getenv('POSTMARK_SERVER_API'))

        # Send the email with the attachment
        postmark.emails.send(
            From='[email protected]',
            To='[email protected]',
            Subject=f'Stick to Your Role! Model Submission: {model_name}',
            HtmlBody=f"""
            <p><strong>Model Name:</strong> {model_name}</p>
            <p><strong>Pull Request Link:</strong> {pull_request_link}</p>
            <p><strong>Email:</strong> {email}</p>
            <p><strong>Description:</strong> {description}</p>
            """,
            Attachments=[{
                'Name': filename,
                'Content': file_content,
                'ContentType': 'application/zip'
            }]
        )
    else:
        return redirect(url_for('failed_submission'))

    return redirect(url_for('model_submitted'))


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7860, debug=True)