luulinh90s
commited on
Commit
•
00c0d2b
1
Parent(s):
4600a8b
update
Browse files
app.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
import uuid
|
2 |
-
from flask import Flask, render_template, request, redirect, url_for, send_from_directory
|
3 |
import json
|
4 |
import random
|
5 |
import os
|
@@ -27,6 +27,10 @@ else:
|
|
27 |
app = Flask(__name__)
|
28 |
app.config['SECRET_KEY'] = 'supersecretkey' # Change this to a random secret key
|
29 |
|
|
|
|
|
|
|
|
|
30 |
# Directories for visualizations
|
31 |
VISUALIZATION_DIRS = {
|
32 |
"No-XAI": "htmls_NO_XAI_mod",
|
@@ -53,6 +57,19 @@ def generate_session_id():
|
|
53 |
return str(uuid.uuid4())
|
54 |
|
55 |
def save_session_data(session_id, data):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
try:
|
57 |
username = data.get('username', 'unknown')
|
58 |
seed = data.get('seed', 'unknown')
|
@@ -128,7 +145,6 @@ def introduction():
|
|
128 |
def attribution():
|
129 |
return render_template('attribution.html')
|
130 |
|
131 |
-
|
132 |
@app.route('/index', methods=['GET', 'POST'])
|
133 |
def index():
|
134 |
if request.method == 'POST':
|
@@ -156,8 +172,8 @@ def index():
|
|
156 |
'start_time': start_time,
|
157 |
'session_id': session_id
|
158 |
}
|
159 |
-
|
160 |
-
logger.info(f"Session data stored for user {username}, method {method}")
|
161 |
|
162 |
# Redirect based on the selected method
|
163 |
if method == 'No-XAI':
|
@@ -171,7 +187,7 @@ def index():
|
|
171 |
|
172 |
@app.route('/explanation/<session_id>')
|
173 |
def explanation(session_id):
|
174 |
-
session_data =
|
175 |
if not session_data:
|
176 |
logger.error(f"No session data found for session ID: {session_id}")
|
177 |
return redirect(url_for('index'))
|
@@ -194,7 +210,7 @@ def explanation(session_id):
|
|
194 |
@app.route('/experiment/<session_id>', methods=['GET', 'POST'])
|
195 |
def experiment(session_id):
|
196 |
try:
|
197 |
-
session_data =
|
198 |
if not session_data:
|
199 |
return redirect(url_for('index'))
|
200 |
|
@@ -230,13 +246,13 @@ def subjective(session_id):
|
|
230 |
if request.method == 'POST':
|
231 |
understanding = request.form.get('understanding')
|
232 |
|
233 |
-
session_data =
|
234 |
if not session_data:
|
235 |
logger.error(f"No session data found for session: {session_id}")
|
236 |
return redirect(url_for('index'))
|
237 |
|
238 |
session_data['subjective_feedback'] = understanding
|
239 |
-
|
240 |
|
241 |
return redirect(url_for('completed', session_id=session_id))
|
242 |
|
@@ -248,7 +264,7 @@ def feedback():
|
|
248 |
session_id = request.form['session_id']
|
249 |
prediction = request.form['prediction']
|
250 |
|
251 |
-
session_data =
|
252 |
if not session_data:
|
253 |
logger.error(f"No session data found for session: {session_id}")
|
254 |
return redirect(url_for('index'))
|
@@ -259,7 +275,7 @@ def feedback():
|
|
259 |
})
|
260 |
|
261 |
session_data['current_index'] += 1
|
262 |
-
|
263 |
logger.info(f"Prediction saved for session {session_id}, sample {session_data['current_index'] - 1}")
|
264 |
|
265 |
if session_data['current_index'] >= len(session_data['selected_samples']):
|
@@ -273,7 +289,7 @@ def feedback():
|
|
273 |
@app.route('/completed/<session_id>')
|
274 |
def completed(session_id):
|
275 |
try:
|
276 |
-
session_data =
|
277 |
if not session_data:
|
278 |
logger.error(f"No session data found for session: {session_id}")
|
279 |
return redirect(url_for('index'))
|
@@ -338,10 +354,10 @@ def completed(session_id):
|
|
338 |
session_data['false_percentage'] = false_percentage
|
339 |
|
340 |
# Save all the data to Hugging Face at the end
|
341 |
-
|
342 |
|
343 |
-
#
|
344 |
-
|
345 |
|
346 |
return render_template('completed.html',
|
347 |
accuracy=accuracy,
|
@@ -371,6 +387,5 @@ def send_visualization(filename):
|
|
371 |
def send_examples(filename):
|
372 |
return send_from_directory('', filename)
|
373 |
|
374 |
-
|
375 |
if __name__ == "__main__":
|
376 |
app.run(host="0.0.0.0", port=7860, debug=True)
|
|
|
1 |
import uuid
|
2 |
+
from flask import Flask, render_template, request, redirect, url_for, send_from_directory
|
3 |
import json
|
4 |
import random
|
5 |
import os
|
|
|
27 |
app = Flask(__name__)
|
28 |
app.config['SECRET_KEY'] = 'supersecretkey' # Change this to a random secret key
|
29 |
|
30 |
+
# File-based session storage
|
31 |
+
SESSION_DIR = '/tmp/sessions'
|
32 |
+
os.makedirs(SESSION_DIR, exist_ok=True)
|
33 |
+
|
34 |
# Directories for visualizations
|
35 |
VISUALIZATION_DIRS = {
|
36 |
"No-XAI": "htmls_NO_XAI_mod",
|
|
|
57 |
return str(uuid.uuid4())
|
58 |
|
59 |
def save_session_data(session_id, data):
|
60 |
+
file_path = os.path.join(SESSION_DIR, f'{session_id}.json')
|
61 |
+
with open(file_path, 'w') as f:
|
62 |
+
json.dump(data, f)
|
63 |
+
logger.info(f"Session data saved for session {session_id}")
|
64 |
+
|
65 |
+
def load_session_data(session_id):
|
66 |
+
file_path = os.path.join(SESSION_DIR, f'{session_id}.json')
|
67 |
+
if os.path.exists(file_path):
|
68 |
+
with open(file_path, 'r') as f:
|
69 |
+
return json.load(f)
|
70 |
+
return None
|
71 |
+
|
72 |
+
def save_session_data_to_hf(session_id, data):
|
73 |
try:
|
74 |
username = data.get('username', 'unknown')
|
75 |
seed = data.get('seed', 'unknown')
|
|
|
145 |
def attribution():
|
146 |
return render_template('attribution.html')
|
147 |
|
|
|
148 |
@app.route('/index', methods=['GET', 'POST'])
|
149 |
def index():
|
150 |
if request.method == 'POST':
|
|
|
172 |
'start_time': start_time,
|
173 |
'session_id': session_id
|
174 |
}
|
175 |
+
save_session_data(session_id, session_data)
|
176 |
+
logger.info(f"Session data stored for user {username}, method {method}, session_id {session_id}")
|
177 |
|
178 |
# Redirect based on the selected method
|
179 |
if method == 'No-XAI':
|
|
|
187 |
|
188 |
@app.route('/explanation/<session_id>')
|
189 |
def explanation(session_id):
|
190 |
+
session_data = load_session_data(session_id)
|
191 |
if not session_data:
|
192 |
logger.error(f"No session data found for session ID: {session_id}")
|
193 |
return redirect(url_for('index'))
|
|
|
210 |
@app.route('/experiment/<session_id>', methods=['GET', 'POST'])
|
211 |
def experiment(session_id):
|
212 |
try:
|
213 |
+
session_data = load_session_data(session_id)
|
214 |
if not session_data:
|
215 |
return redirect(url_for('index'))
|
216 |
|
|
|
246 |
if request.method == 'POST':
|
247 |
understanding = request.form.get('understanding')
|
248 |
|
249 |
+
session_data = load_session_data(session_id)
|
250 |
if not session_data:
|
251 |
logger.error(f"No session data found for session: {session_id}")
|
252 |
return redirect(url_for('index'))
|
253 |
|
254 |
session_data['subjective_feedback'] = understanding
|
255 |
+
save_session_data(session_id, session_data)
|
256 |
|
257 |
return redirect(url_for('completed', session_id=session_id))
|
258 |
|
|
|
264 |
session_id = request.form['session_id']
|
265 |
prediction = request.form['prediction']
|
266 |
|
267 |
+
session_data = load_session_data(session_id)
|
268 |
if not session_data:
|
269 |
logger.error(f"No session data found for session: {session_id}")
|
270 |
return redirect(url_for('index'))
|
|
|
275 |
})
|
276 |
|
277 |
session_data['current_index'] += 1
|
278 |
+
save_session_data(session_id, session_data)
|
279 |
logger.info(f"Prediction saved for session {session_id}, sample {session_data['current_index'] - 1}")
|
280 |
|
281 |
if session_data['current_index'] >= len(session_data['selected_samples']):
|
|
|
289 |
@app.route('/completed/<session_id>')
|
290 |
def completed(session_id):
|
291 |
try:
|
292 |
+
session_data = load_session_data(session_id)
|
293 |
if not session_data:
|
294 |
logger.error(f"No session data found for session: {session_id}")
|
295 |
return redirect(url_for('index'))
|
|
|
354 |
session_data['false_percentage'] = false_percentage
|
355 |
|
356 |
# Save all the data to Hugging Face at the end
|
357 |
+
save_session_data_to_hf(session_id, session_data)
|
358 |
|
359 |
+
# Remove the local session data file
|
360 |
+
os.remove(os.path.join(SESSION_DIR, f'{session_id}.json'))
|
361 |
|
362 |
return render_template('completed.html',
|
363 |
accuracy=accuracy,
|
|
|
387 |
def send_examples(filename):
|
388 |
return send_from_directory('', filename)
|
389 |
|
|
|
390 |
if __name__ == "__main__":
|
391 |
app.run(host="0.0.0.0", port=7860, debug=True)
|