dayuian commited on
Commit
d0c90a3
·
verified ·
1 Parent(s): 53091ac

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -21
app.py CHANGED
@@ -3,7 +3,7 @@ import random
3
  from vocab import get_sources, get_words_from_source
4
  from sentences import generate_sentences
5
  from ai_sentence import MODEL_LIST
6
- from quiz import generate_fill_in_blank_exam, check_exam
7
 
8
  def process_sentence(mode, word, source, num, use_ai, model_name):
9
  try:
@@ -36,6 +36,7 @@ def project_description():
36
  - 查詢單字 → 獲取例句
37
  - 抽取單字 → 批量獲取例句
38
  - 可選 AI 生成句子(模型:GPT2 / Pythia)
 
39
  ## 🧑‍💻 技術架構
40
  - Gradio Blocks + Transformers (Hugging Face)
41
  - SQLite 句庫管理
@@ -114,12 +115,19 @@ with gr.Blocks(css="""
114
  )
115
 
116
  with gr.Tab("英文小考"):
 
 
117
  quiz_source_dropdown = gr.Dropdown(
118
  choices=get_sources(),
119
  value="common3000",
120
  label="選擇單字庫"
121
  )
122
  quiz_num_slider = gr.Slider(minimum=1, maximum=5, value=2, step=1, label="題目數量")
 
 
 
 
 
123
 
124
  quiz_generate_button = gr.Button("📄 生成試卷")
125
  quiz_submit_button = gr.Button("✅ 提交試卷")
@@ -127,21 +135,20 @@ with gr.Blocks(css="""
127
  quiz_score_display = gr.HTML()
128
  quiz_questions_state = gr.State([])
129
 
130
- radios = []
131
- for i in range(5):
132
- radios.append(
133
- gr.Radio(choices=[], label=f" {i + 1} ", visible=False, interactive=True)
134
- )
 
135
 
136
- def display_exam(source, num):
137
  questions = generate_fill_in_blank_exam(source, num)
138
  quiz_questions_state.value = questions
139
 
140
  updates = []
141
  for i, q in enumerate(questions):
142
- updates.append(
143
- gr.update(choices=q["options"], label=f"第 {i + 1} 題:{q['sentence']}", visible=True)
144
- )
145
  for i in range(len(questions), 5):
146
  updates.append(gr.update(visible=False))
147
 
@@ -152,16 +159,7 @@ with gr.Blocks(css="""
152
  score_html = check_exam(user_answers[:len(questions)], questions)
153
  return score_html
154
 
155
- quiz_generate_button.click(
156
- display_exam,
157
- inputs=[quiz_source_dropdown, quiz_num_slider],
158
- outputs=radios
159
- )
160
-
161
- quiz_submit_button.click(
162
- submit_exam,
163
- inputs=radios,
164
- outputs=quiz_score_display
165
- )
166
 
167
  demo.launch()
 
3
  from vocab import get_sources, get_words_from_source
4
  from sentences import generate_sentences
5
  from ai_sentence import MODEL_LIST
6
+ from quiz import generate_fill_in_blank_exam, check_exam, render_exam_interface
7
 
8
  def process_sentence(mode, word, source, num, use_ai, model_name):
9
  try:
 
36
  - 查詢單字 → 獲取例句
37
  - 抽取單字 → 批量獲取例句
38
  - 可選 AI 生成句子(模型:GPT2 / Pythia)
39
+ - 英文小考 → 單字填空選擇題,自動批改計分
40
  ## 🧑‍💻 技術架構
41
  - Gradio Blocks + Transformers (Hugging Face)
42
  - SQLite 句庫管理
 
115
  )
116
 
117
  with gr.Tab("英文小考"):
118
+ model_note = gr.Markdown(visible=True)
119
+
120
  quiz_source_dropdown = gr.Dropdown(
121
  choices=get_sources(),
122
  value="common3000",
123
  label="選擇單字庫"
124
  )
125
  quiz_num_slider = gr.Slider(minimum=1, maximum=5, value=2, step=1, label="題目數量")
126
+ quiz_model_dropdown = gr.Dropdown(
127
+ choices=MODEL_LIST,
128
+ value="gpt2",
129
+ label="選擇 AI 模型"
130
+ )
131
 
132
  quiz_generate_button = gr.Button("📄 生成試卷")
133
  quiz_submit_button = gr.Button("✅ 提交試卷")
 
135
  quiz_score_display = gr.HTML()
136
  quiz_questions_state = gr.State([])
137
 
138
+ radios = [gr.Radio(choices=[], label=f"第 {i + 1} 題", visible=False, interactive=True) for i in range(5)]
139
+
140
+ def update_model_note(model):
141
+ return f"本功能目前使用 **{model}** 作為語言模型生成題目。"
142
+
143
+ quiz_model_dropdown.change(update_model_note, inputs=[quiz_model_dropdown], outputs=[model_note])
144
 
145
+ def display_exam(source, num, model):
146
  questions = generate_fill_in_blank_exam(source, num)
147
  quiz_questions_state.value = questions
148
 
149
  updates = []
150
  for i, q in enumerate(questions):
151
+ updates.append(gr.update(choices=q["options"], label=f"第 {i + 1} 題:{q['sentence']}", visible=True))
 
 
152
  for i in range(len(questions), 5):
153
  updates.append(gr.update(visible=False))
154
 
 
159
  score_html = check_exam(user_answers[:len(questions)], questions)
160
  return score_html
161
 
162
+ quiz_generate_button.click(display_exam, inputs=[quiz_source_dropdown, quiz_num_slider, quiz_model_dropdown], outputs=radios)
163
+ quiz_submit_button.click(submit_exam, inputs=radios, outputs=quiz_score_display)
 
 
 
 
 
 
 
 
 
164
 
165
  demo.launch()