youngtsai commited on
Commit
653c3a3
·
1 Parent(s): 5957456

add user_email

Browse files
Files changed (4) hide show
  1. app.py +20 -4
  2. assignment_ui.py +6 -0
  3. dashboard_service.py +33 -7
  4. submission_service.py +2 -1
app.py CHANGED
@@ -758,6 +758,7 @@ def get_paragraph_practice_log_session_content(file_name):
758
  # 全文批改歷史紀錄
759
  def generate_paragraph_evaluate_history(
760
  user_data,
 
761
  user_nickname,
762
  session_timestamp,
763
  request_origin,
@@ -774,6 +775,7 @@ def generate_paragraph_evaluate_history(
774
 
775
  print("====生成全文批改歷史紀錄====")
776
  print(f"user_data: {user_data}")
 
777
  print(f"session_timestamp: {session_timestamp}")
778
  print(f"request_origin: {request_origin}")
779
 
@@ -800,7 +802,7 @@ def generate_paragraph_evaluate_history(
800
  GCS_SERVICE.upload_json_string("jutor_logs", file_name, json.dumps(content))
801
 
802
  if assignment_id_input:
803
- submission_id = submit_assignment(assignment_id_input, user_data, user_nickname, content, file_name)
804
  if submission_id:
805
  print(f"Assignment submitted successfully. Submission ID: {submission_id}")
806
  else:
@@ -952,6 +954,7 @@ def update_exam_contents(selected_title):
952
  # === Chinese ===
953
  def generate_chinese_paragraph_practice_history(
954
  user_data,
 
955
  user_nickname,
956
  session_timestamp,
957
  request_origin,
@@ -984,7 +987,7 @@ def generate_chinese_paragraph_practice_history(
984
  GCS_SERVICE.upload_json_string("jutor_logs", file_name, json.dumps(content))
985
 
986
  if assignment_id_input:
987
- submission_id = submit_assignment(assignment_id_input, user_data, user_nickname, content, file_name)
988
  if submission_id:
989
  print(f"Assignment submitted successfully. Submission ID: {submission_id}")
990
  else:
@@ -1000,11 +1003,12 @@ def generate_chinese_paragraph_practice_history(
1000
  chinese_full_paragraph_refine_output_table, \
1001
  chinese_full_paragraph_save_output
1002
 
1003
- def submit_assignment(assignment_id, user_data, user_nickname, submission_content, file_name):
1004
  try:
1005
  submission_id = _SubmissionService.submit_assignment(
1006
  assignment_id=assignment_id,
1007
  student_id=user_data,
 
1008
  student_name=user_nickname,
1009
  submission_content=submission_content,
1010
  file_name=file_name,
@@ -1575,7 +1579,10 @@ def init_params(request: gr.Request):
1575
  assignment_group = gr.update(visible=False)
1576
 
1577
  user_data = gr.update(value="")
 
 
1578
 
 
1579
  # check if origin is from junyiacademy
1580
  query_params = dict(request.query_params)
1581
  request_origin = request.headers.get("origin", "").replace("https://", "").replace("http://", "")
@@ -1595,10 +1602,14 @@ def init_params(request: gr.Request):
1595
  if is_env_local:
1596
  admin_group = gr.update(visible=True)
1597
  user_data = gr.update(value="aa")
 
 
1598
 
1599
  if "hf.space" in request_origin:
1600
  admin_group = gr.update(visible=True)
1601
  user_data = gr.update(value="aa")
 
 
1602
 
1603
  # session timestamp 用 2024-01-01-12-00-00 格式, 要用 UTC+8 時間
1604
  session_timestamp = datetime.now(pytz.utc).astimezone(pytz.timezone('Asia/Taipei')).strftime("%Y-%m-%d-%H-%M-%S")
@@ -1659,7 +1670,7 @@ def init_params(request: gr.Request):
1659
  assignment_id_input = gr.update(value=None)
1660
  assignment_json = gr.update(value=None)
1661
 
1662
- return user_data, \
1663
  admin_group, session_timestamp, request_origin, \
1664
  assignment_id_input, assignment_json, \
1665
  chinese_assignment_row, \
@@ -1749,6 +1760,7 @@ with gr.Blocks(theme=THEME, css=CSS) as demo:
1749
 
1750
  with gr.Row(visible=False) as admin_group:
1751
  user_data = gr.Textbox(label="User Data", value="", elem_id="jutor_user_data_input")
 
1752
  user_nickname = gr.Textbox(label="User Nickname", value="", elem_id="jutor_user_nickname_input")
1753
  session_timestamp = gr.Textbox(label="Session Timestamp", value="", elem_id="jutor_session_timestamp_input")
1754
  request_origin = gr.Textbox(label="Request Domain", value="")
@@ -2817,6 +2829,7 @@ with gr.Blocks(theme=THEME, css=CSS) as demo:
2817
  fn=generate_paragraph_evaluate_history,
2818
  inputs=[
2819
  user_data,
 
2820
  user_nickname,
2821
  session_timestamp,
2822
  request_origin,
@@ -3439,6 +3452,7 @@ with gr.Blocks(theme=THEME, css=CSS) as demo:
3439
  fn=generate_chinese_paragraph_practice_history,
3440
  inputs=[
3441
  user_data,
 
3442
  user_nickname,
3443
  session_timestamp,
3444
  request_origin,
@@ -3632,6 +3646,8 @@ with gr.Blocks(theme=THEME, css=CSS) as demo:
3632
  inputs =[],
3633
  outputs = [
3634
  user_data,
 
 
3635
  admin_group,
3636
  session_timestamp,
3637
  request_origin,
 
758
  # 全文批改歷史紀錄
759
  def generate_paragraph_evaluate_history(
760
  user_data,
761
+ user_email,
762
  user_nickname,
763
  session_timestamp,
764
  request_origin,
 
775
 
776
  print("====生成全文批改歷史紀錄====")
777
  print(f"user_data: {user_data}")
778
+ print(f"user_email: {user_email}")
779
  print(f"session_timestamp: {session_timestamp}")
780
  print(f"request_origin: {request_origin}")
781
 
 
802
  GCS_SERVICE.upload_json_string("jutor_logs", file_name, json.dumps(content))
803
 
804
  if assignment_id_input:
805
+ submission_id = submit_assignment(assignment_id_input, user_data, user_email, user_nickname, content, file_name)
806
  if submission_id:
807
  print(f"Assignment submitted successfully. Submission ID: {submission_id}")
808
  else:
 
954
  # === Chinese ===
955
  def generate_chinese_paragraph_practice_history(
956
  user_data,
957
+ user_email,
958
  user_nickname,
959
  session_timestamp,
960
  request_origin,
 
987
  GCS_SERVICE.upload_json_string("jutor_logs", file_name, json.dumps(content))
988
 
989
  if assignment_id_input:
990
+ submission_id = submit_assignment(assignment_id_input, user_data, user_email, user_nickname, content, file_name)
991
  if submission_id:
992
  print(f"Assignment submitted successfully. Submission ID: {submission_id}")
993
  else:
 
1003
  chinese_full_paragraph_refine_output_table, \
1004
  chinese_full_paragraph_save_output
1005
 
1006
+ def submit_assignment(assignment_id, user_data, user_email, user_nickname, submission_content, file_name):
1007
  try:
1008
  submission_id = _SubmissionService.submit_assignment(
1009
  assignment_id=assignment_id,
1010
  student_id=user_data,
1011
+ student_email=user_email,
1012
  student_name=user_nickname,
1013
  submission_content=submission_content,
1014
  file_name=file_name,
 
1579
  assignment_group = gr.update(visible=False)
1580
 
1581
  user_data = gr.update(value="")
1582
+ user_email = gr.update(value="")
1583
+ user_nickname = gr.update(value="")
1584
 
1585
+ # check if origin is from junyiacademy
1586
  # check if origin is from junyiacademy
1587
  query_params = dict(request.query_params)
1588
  request_origin = request.headers.get("origin", "").replace("https://", "").replace("http://", "")
 
1602
  if is_env_local:
1603
  admin_group = gr.update(visible=True)
1604
  user_data = gr.update(value="aa")
1605
+ user_email = gr.update(value="[email protected]")
1606
+ user_nickname = gr.update(value="aa_name")
1607
 
1608
  if "hf.space" in request_origin:
1609
  admin_group = gr.update(visible=True)
1610
  user_data = gr.update(value="aa")
1611
+ user_email = gr.update(value="[email protected]")
1612
+ user_nickname = gr.update(value="aa_name")
1613
 
1614
  # session timestamp 用 2024-01-01-12-00-00 格式, 要用 UTC+8 時間
1615
  session_timestamp = datetime.now(pytz.utc).astimezone(pytz.timezone('Asia/Taipei')).strftime("%Y-%m-%d-%H-%M-%S")
 
1670
  assignment_id_input = gr.update(value=None)
1671
  assignment_json = gr.update(value=None)
1672
 
1673
+ return user_data, user_email, user_nickname, \
1674
  admin_group, session_timestamp, request_origin, \
1675
  assignment_id_input, assignment_json, \
1676
  chinese_assignment_row, \
 
1760
 
1761
  with gr.Row(visible=False) as admin_group:
1762
  user_data = gr.Textbox(label="User Data", value="", elem_id="jutor_user_data_input")
1763
+ user_email = gr.Textbox(label="User Email", value="", elem_id="jutor_user_email_input")
1764
  user_nickname = gr.Textbox(label="User Nickname", value="", elem_id="jutor_user_nickname_input")
1765
  session_timestamp = gr.Textbox(label="Session Timestamp", value="", elem_id="jutor_session_timestamp_input")
1766
  request_origin = gr.Textbox(label="Request Domain", value="")
 
2829
  fn=generate_paragraph_evaluate_history,
2830
  inputs=[
2831
  user_data,
2832
+ user_email,
2833
  user_nickname,
2834
  session_timestamp,
2835
  request_origin,
 
3452
  fn=generate_chinese_paragraph_practice_history,
3453
  inputs=[
3454
  user_data,
3455
+ user_email,
3456
  user_nickname,
3457
  session_timestamp,
3458
  request_origin,
 
3646
  inputs =[],
3647
  outputs = [
3648
  user_data,
3649
+ user_email,
3650
+ user_nickname,
3651
  admin_group,
3652
  session_timestamp,
3653
  request_origin,
assignment_ui.py CHANGED
@@ -266,6 +266,12 @@ def create_assignment_ui(user_data, assignment_service, submission_service, dash
266
  {submission_json.get('student_name', '未提供')}
267
  </div>
268
  </div>
 
 
 
 
 
 
269
  <div style="margin-bottom: 20px;">
270
  <div style="font-weight: bold; color: #6c757d; margin-bottom: 5px;">🆔 學生ID</div>
271
  <div style="background-color: #f8f9fa; padding: 10px 15px; border-radius: 5px;">
 
266
  {submission_json.get('student_name', '未提供')}
267
  </div>
268
  </div>
269
+ <div style="margin-bottom: 20px;">
270
+ <div style="font-weight: bold; color: #6c757d; margin-bottom: 5px;">📧 學生Email</div>
271
+ <div style="background-color: #f8f9fa; padding: 10px 15px; border-radius: 5px;">
272
+ {submission_json.get('student_email', '未提供')}
273
+ </div>
274
+ </div>
275
  <div style="margin-bottom: 20px;">
276
  <div style="font-weight: bold; color: #6c757d; margin-bottom: 5px;">🆔 學生ID</div>
277
  <div style="background-color: #f8f9fa; padding: 10px 15px; border-radius: 5px;">
dashboard_service.py CHANGED
@@ -41,6 +41,7 @@ class DashboardService:
41
  submissions.append({
42
  "submission_id": submission_id,
43
  "student_id": submission_data["student_id"],
 
44
  "student_name": submission_data["student_name"],
45
  "submission_date": submission_data["timestamp"]
46
  })
@@ -76,7 +77,8 @@ class DashboardService:
76
  all_submissions.append({
77
  "作業名稱": assignment_data["metadata"]["topic"],
78
  "作業類型": assignment_data["assignment_type"],
79
- "學生_id": submission_data["student_id"],
 
80
  "學生姓名": submission_data["student_name"],
81
  "繳交日期": submission_data["timestamp"],
82
  "分數": score
@@ -87,17 +89,41 @@ class DashboardService:
87
 
88
  def extract_score(self, submission_data):
89
  try:
90
- content = submission_data.get("submission_data", {}).get("content", {})
91
  if isinstance(content, str):
92
  content = json.loads(content)
93
 
94
- output_table = content.get("chinese_full_paragraph_evaluate_output_table", [])
 
 
95
 
96
- for item in output_table:
97
- if item.get("架構") == "綜合評分":
98
- return item.get("評分", "N/A")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  except Exception as e:
100
  print(f"提取分數時出錯:{str(e)}")
101
- print(f"提交數據:{submission_data}")
102
 
 
103
  return "N/A"
 
41
  submissions.append({
42
  "submission_id": submission_id,
43
  "student_id": submission_data["student_id"],
44
+ "student_email": submission_data.get("student_email", "未提供"),
45
  "student_name": submission_data["student_name"],
46
  "submission_date": submission_data["timestamp"]
47
  })
 
77
  all_submissions.append({
78
  "作業名稱": assignment_data["metadata"]["topic"],
79
  "作業類型": assignment_data["assignment_type"],
80
+ # "學生_id": submission_data["student_id"],
81
+ "學生Email": submission_data.get("student_email", "未提供"),
82
  "學生姓名": submission_data["student_name"],
83
  "繳交日期": submission_data["timestamp"],
84
  "分數": score
 
89
 
90
  def extract_score(self, submission_data):
91
  try:
92
+ content = submission_data.get("submission_data", {})
93
  if isinstance(content, str):
94
  content = json.loads(content)
95
 
96
+ if not isinstance(content, dict):
97
+ print(f"內容格式不正確:{type(content)}")
98
+ return "N/A"
99
 
100
+ content = content.get("content", {})
101
+ if isinstance(content, str):
102
+ content = json.loads(content)
103
+
104
+ output_tables = content.get("chinese_full_paragraph_refine_output_table", [])
105
+ print(f"output_tables: {output_tables}") # 調試輸出
106
+ last_score = "N/A"
107
+
108
+ # 只取最後一個「綜合評分」
109
+ for table in reversed(output_tables):
110
+ print(f"檢查 table: {table}") # 調試輸出
111
+ if isinstance(table, str):
112
+ try:
113
+ table = json.loads(table)
114
+ except json.JSONDecodeError:
115
+ continue
116
+ if isinstance(table, dict) and table.get("架構") == "綜合評分":
117
+ last_score = table.get("評分", "N/A")
118
+ print(f"找到最後的評分: {last_score}") # 調試輸出
119
+ break
120
+
121
+ return last_score
122
+
123
+ except json.JSONDecodeError as e:
124
+ print(f"JSON 解析錯誤:{str(e)}")
125
  except Exception as e:
126
  print(f"提取分數時出錯:{str(e)}")
 
127
 
128
+ print(f"提交數據:{submission_data}")
129
  return "N/A"
submission_service.py CHANGED
@@ -19,7 +19,7 @@ class SubmissionService:
19
  if not self.gcs_service.check_file_exists(self.bucket_name, file_name):
20
  return submission_id
21
 
22
- def submit_assignment(self, assignment_id, student_id, student_name, submission_content, file_name=None, bucket_name=None):
23
  submission_id = self.create_submission_id()
24
  timestamp_now = datetime.now(pytz.utc).astimezone(pytz.timezone('Asia/Taipei')).strftime("%Y-%m-%d %H:%M:%S")
25
  submission_data = {
@@ -31,6 +31,7 @@ class SubmissionService:
31
  "submission_id": submission_id,
32
  "assignment_id": assignment_id,
33
  "student_id": student_id,
 
34
  "student_name": student_name,
35
  "submission_data": submission_data,
36
  "timestamp": timestamp_now
 
19
  if not self.gcs_service.check_file_exists(self.bucket_name, file_name):
20
  return submission_id
21
 
22
+ def submit_assignment(self, assignment_id, student_id, student_name, student_email, submission_content, file_name=None, bucket_name=None):
23
  submission_id = self.create_submission_id()
24
  timestamp_now = datetime.now(pytz.utc).astimezone(pytz.timezone('Asia/Taipei')).strftime("%Y-%m-%d %H:%M:%S")
25
  submission_data = {
 
31
  "submission_id": submission_id,
32
  "assignment_id": assignment_id,
33
  "student_id": student_id,
34
+ "student_email": student_email,
35
  "student_name": student_name,
36
  "submission_data": submission_data,
37
  "timestamp": timestamp_now