Sina Media Lab commited on
Commit
9d6157e
·
1 Parent(s): b2ea00a
Files changed (1) hide show
  1. app.py +44 -38
app.py CHANGED
@@ -8,7 +8,7 @@ if 'session_id' not in st.session_state:
8
  st.session_state.session_id = str(uuid.uuid4())
9
 
10
  if 'questions' not in st.session_state:
11
- st.session_state.questions = [] # To store generated questions
12
  if 'current_index' not in st.session_state:
13
  st.session_state.current_index = 0
14
  if 'current_module' not in st.session_state:
@@ -25,8 +25,6 @@ if 'selected_answer' not in st.session_state:
25
  st.session_state.selected_answer = None
26
  if 'answered' not in st.session_state:
27
  st.session_state.answered = False
28
- if 'question_list' not in st.session_state:
29
- st.session_state.question_list = [None] * 100 # Placeholder for 100 questions
30
 
31
  def reset_pdf_cache():
32
  st.session_state.pdf_data = None
@@ -104,7 +102,6 @@ def generate_new_question(module_name, module):
104
  # Ensure there are exactly 4 options
105
  if len(question_data['options']) != 4:
106
  st.warning(f"Question in module '{module_name}' does not have 4 options. Found {len(question_data['options'])}.")
107
-
108
  return question_data
109
 
110
  def navigate_question(direction):
@@ -128,20 +125,17 @@ for module in modules:
128
  selected_module = module
129
  break
130
 
131
- # Ensure the current module is tracked correctly
132
  if selected_module != st.session_state.current_module:
133
  st.session_state.current_module = selected_module
134
  st.session_state.current_index = 0
 
135
  st.session_state.module_question_count[selected_module] = 0
136
  st.session_state.module_correct_count[selected_module] = 0
137
  st.session_state.selected_answer = None
138
  st.session_state.answered = False
139
 
140
  # Load the current module's question
141
- if st.session_state.question_list[st.session_state.current_index] is None:
142
- st.session_state.question_list[st.session_state.current_index] = generate_new_question(selected_module, modules[selected_module])
143
-
144
- current_question = st.session_state.question_list[st.session_state.current_index]
145
 
146
  # Display module title and description
147
  st.title(modules[selected_module]["title"])
@@ -153,12 +147,8 @@ with col1:
153
  if st.button("⬅️ Prev", disabled=st.session_state.current_index == 0):
154
  navigate_question("prev")
155
  with col2:
156
- if st.button("➡️ Next"):
157
- if st.session_state.current_index < len(st.session_state.question_list) - 1:
158
- st.session_state.current_index += 1
159
- if st.session_state.question_list[st.session_state.current_index] is None:
160
- st.session_state.question_list[st.session_state.current_index] = generate_new_question(selected_module, modules[selected_module])
161
- st.session_state.answered = False
162
  with col3:
163
  if len(st.session_state.questions) > 0:
164
  pdf = generate_pdf_report()
@@ -172,29 +162,45 @@ with col3:
172
 
173
  st.write(current_question["question"])
174
 
175
- # Handle the selection of an option and check the answer immediately
176
- selected_answer = st.radio(
177
- "Choose an answer:",
178
- options=current_question['options'],
179
- index=current_question['options'].index(current_question['selected']) if current_question['answered'] else None,
180
- key=f"question_{st.session_state.current_index}_options"
181
- )
182
-
183
- if selected_answer is not None and not current_question['answered']:
184
- # Process the answer
185
- current_question['selected'] = selected_answer
186
- current_question['answered'] = True
187
- st.session_state.module_question_count[selected_module] += 1
188
-
189
- if selected_answer == current_question['correct_answer']:
190
- st.session_state.correct_count += 1
191
- st.session_state.module_correct_count[selected_module] += 1
192
-
193
- # Set answered to true to disable options
194
- st.session_state.questions[st.session_state.current_index]['answered'] = True
195
- st.session_state.selected_answer = selected_answer
196
-
197
- # Show correct/incorrect feedback immediately
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  for option in current_question['options']:
199
  if option == current_question['correct_answer']:
200
  st.markdown(f"<span style='color:green;'>{option} ✅</span>", unsafe_allow_html=True)
 
8
  st.session_state.session_id = str(uuid.uuid4())
9
 
10
  if 'questions' not in st.session_state:
11
+ st.session_state.questions = []
12
  if 'current_index' not in st.session_state:
13
  st.session_state.current_index = 0
14
  if 'current_module' not in st.session_state:
 
25
  st.session_state.selected_answer = None
26
  if 'answered' not in st.session_state:
27
  st.session_state.answered = False
 
 
28
 
29
  def reset_pdf_cache():
30
  st.session_state.pdf_data = None
 
102
  # Ensure there are exactly 4 options
103
  if len(question_data['options']) != 4:
104
  st.warning(f"Question in module '{module_name}' does not have 4 options. Found {len(question_data['options'])}.")
 
105
  return question_data
106
 
107
  def navigate_question(direction):
 
125
  selected_module = module
126
  break
127
 
 
128
  if selected_module != st.session_state.current_module:
129
  st.session_state.current_module = selected_module
130
  st.session_state.current_index = 0
131
+ st.session_state.questions = [generate_new_question(selected_module, modules[selected_module])]
132
  st.session_state.module_question_count[selected_module] = 0
133
  st.session_state.module_correct_count[selected_module] = 0
134
  st.session_state.selected_answer = None
135
  st.session_state.answered = False
136
 
137
  # Load the current module's question
138
+ current_question = st.session_state.questions[st.session_state.current_index]
 
 
 
139
 
140
  # Display module title and description
141
  st.title(modules[selected_module]["title"])
 
147
  if st.button("⬅️ Prev", disabled=st.session_state.current_index == 0):
148
  navigate_question("prev")
149
  with col2:
150
+ if st.button("➡️ Next", disabled=st.session_state.current_index >= len(st.session_state.questions) - 1):
151
+ navigate_question("next")
 
 
 
 
152
  with col3:
153
  if len(st.session_state.questions) > 0:
154
  pdf = generate_pdf_report()
 
162
 
163
  st.write(current_question["question"])
164
 
165
+ # Create the form for the question
166
+ with st.form(key=f'question_form_{st.session_state.current_index}'):
167
+ selected_answer = st.radio(
168
+ "Choose an answer:",
169
+ options=current_question['options'],
170
+ index=current_question['options'].index(current_question['selected']) if current_question['answered'] else None,
171
+ key=f"question_{st.session_state.current_index}_options"
172
+ )
173
+
174
+ submit_button = st.form_submit_button(label="Submit/Next")
175
+
176
+ # Handle button state and answer submission
177
+ if submit_button:
178
+ if selected_answer is None:
179
+ st.warning("Please select an option before submitting.")
180
+ else:
181
+ if not current_question['answered']:
182
+ # Process the answer
183
+ current_question['selected'] = selected_answer
184
+ current_question['answered'] = True
185
+ st.session_state.module_question_count[selected_module] += 1
186
+
187
+ if selected_answer == current_question['correct_answer']:
188
+ st.session_state.correct_count += 1
189
+ st.session_state.module_correct_count[selected_module] += 1
190
+
191
+ # Set answered to true to disable options
192
+ st.session_state.questions[st.session_state.current_index]['answered'] = True
193
+ st.session_state.selected_answer = selected_answer
194
+
195
+ else:
196
+ # If already answered, move to the next question
197
+ new_question = generate_new_question(selected_module, modules[selected_module])
198
+ st.session_state.questions.append(new_question)
199
+ st.session_state.current_index = len(st.session_state.questions) - 1
200
+ st.session_state.answered = False
201
+
202
+ # Show correct/incorrect feedback after submission
203
+ if current_question.get('answered', False):
204
  for option in current_question['options']:
205
  if option == current_question['correct_answer']:
206
  st.markdown(f"<span style='color:green;'>{option} ✅</span>", unsafe_allow_html=True)