DevBM commited on
Commit
74406b7
1 Parent(s): 5fde50b

fixing issues with session_id states, adding visualizations

Browse files

questions were not getting printed in the states so fix the issue (code still had session_state.generated_questions in it there so.. :) )

Files changed (1) hide show
  1. app.py +57 -46
app.py CHANGED
@@ -36,7 +36,8 @@ st.set_page_config(
36
  "About" : "#Hi this our project."
37
  }
38
  )
39
-
 
40
  # Initialize Wikipedia API with a user agent
41
  user_agent = 'QGen/1.0 (channingfisher7@gmail.com)'
42
  wiki_wiki = wikipediaapi.Wikipedia(user_agent= user_agent,language='en')
@@ -65,7 +66,7 @@ def set_state(session_id, key, value):
65
 
66
  @st.cache_resource
67
  def load_model():
68
- model_name = "DevBM/t5-large-squad"
69
  model = T5ForConditionalGeneration.from_pretrained(model_name)
70
  tokenizer = T5Tokenizer.from_pretrained(model_name)
71
  return model, tokenizer
@@ -198,7 +199,6 @@ def get_synonyms(word, n=3):
198
  def generate_options(answer, context, n=3):
199
  options = [answer]
200
 
201
-
202
  # Add contextually relevant words using a pre-trained model
203
  context_embedding = context_model.encode(context)
204
  answer_embedding = context_model.encode(answer)
@@ -337,9 +337,6 @@ def main():
337
  st.title(":blue[Question Generator System]")
338
  session_id = get_session_id()
339
  state = initialize_state(session_id)
340
- # Initialize session state
341
- if 'generated_questions' not in st.session_state:
342
- st.session_state.generated_questions = []
343
 
344
  with st.sidebar:
345
  st.subheader("Customization Options")
@@ -359,6 +356,7 @@ def main():
359
  extract_all_keywords = st.toggle("Extract Max Keywords",value=False)
360
  with col2:
361
  enable_feedback_mode = st.toggle("Enable Feedback Mode",False)
 
362
  text = None
363
  if input_type == "Text Input":
364
  text = st.text_area("Enter text here:", value="Joe Biden, the current US president is on a weak wicket going in for his reelection later this November against former President Donald Trump.")
@@ -370,7 +368,8 @@ def main():
370
  text = clean_text(text)
371
  segments = segment_text(text)
372
  generate_questions_button = st.button("Generate Questions")
373
- if generate_questions_button and text:
 
374
  state['generated_questions'] = []
375
  # st.session_state.generated_questions = []
376
  for text in segments:
@@ -380,6 +379,8 @@ def main():
380
  for i, (keyword, context) in enumerate(keyword_sentence_mapping.items()):
381
  if i >= num_questions:
382
  break
 
 
383
  question = generate_question(context, keyword, num_beams=num_beams)
384
  options = generate_options(keyword,context)
385
  overall_score, relevance_score, complexity_score, spelling_correctness = assess_question_quality(context,question,keyword)
@@ -395,20 +396,22 @@ def main():
395
  "complexity_score" : complexity_score,
396
  "spelling_correctness" : spelling_correctness,
397
  }
 
398
  # st.session_state.generated_questions.append(tpl)
399
  state['generated_questions'].append(tpl)
400
-
 
 
 
401
  set_state(session_id, 'generated_questions', state['generated_questions'])
 
402
 
403
  # sort question based on their quality score
404
- # st.session_state.generated_questions = sorted(st.session_state.generated_questions,key = lambda x: x['overall_score'], reverse=True)
405
  state['generated_questions'] = sorted(state['generated_questions'],key = lambda x: x['overall_score'], reverse=True)
406
  # Display generated questions
407
- # if st.session_state.generated_questions:
408
  if state['generated_questions']:
409
  st.header("Generated Questions:",divider='blue')
410
- for i, q in enumerate(st.session_state.generated_questions):
411
- # with st.expander(f"Question {i+1}"):
412
  st.subheader(body=f":orange[Q{i+1}:] {q['question']}")
413
 
414
  if show_context is True:
@@ -430,7 +433,7 @@ def main():
430
  m3.metric("Complexity Score", value=f"{q['complexity_score']:,.2f}")
431
  m4.metric("Spelling Correctness", value=f"{q['spelling_correctness']:,.2f}")
432
 
433
- # q['context'] = st.text_area(f"Edit Context {i+1}:", value=q['context'], key=f"context_{i}")
434
  if enable_feedback_mode:
435
  q['question'] = st.text_input(f"Edit Question {i+1}:", value=q['question'], key=f"question_{i}")
436
  q['rating'] = st.selectbox(f"Rate this question (1-5)", options=[1, 2, 3, 4, 5], key=f"rating_{i}")
@@ -443,43 +446,51 @@ def main():
443
  # if st.session_state.generated_questions:
444
  if state['generated_questions']:
445
  with st.sidebar:
446
- csv_data = export_to_csv(st.session_state.generated_questions)
447
  st.download_button(label="Download CSV", data=csv_data, file_name='questions.csv', mime='text/csv')
448
 
449
- pdf_data = export_to_pdf(st.session_state.generated_questions)
450
  st.download_button(label="Download PDF", data=pdf_data, file_name='questions.pdf', mime='application/pdf')
451
-
452
- # View Feedback Statistics
453
- with st.expander("View Feedback Statistics"):
454
- feedback_file = 'question_feedback.json'
455
- if os.path.exists(feedback_file):
456
- with open(feedback_file, 'r') as f:
457
- feedback_data = json.load(f)
458
-
459
- st.subheader("Feedback Statistics")
460
-
461
- # Calculate average rating
462
- ratings = [feedback['rating'] for feedback in feedback_data]
463
- avg_rating = sum(ratings) / len(ratings) if ratings else 0
464
- st.write(f"Average Question Rating: {avg_rating:.2f}")
465
-
466
- # Show distribution of ratings
467
- rating_counts = {i: ratings.count(i) for i in range(1, 6)}
468
- st.bar_chart(rating_counts)
 
 
 
 
 
 
 
 
 
469
 
470
- # Show some highly rated questions
471
- st.subheader("Highly Rated Questions")
472
- sorted_feedback = sorted(feedback_data, key=lambda x: x['rating'], reverse=True)
473
- top_questions = sorted_feedback[:5]
474
- for feedback in top_questions:
475
- st.write(f"Question: {feedback['question']}")
476
- st.write(f"Answer: {feedback['answer']}")
477
- st.write(f"Rating: {feedback['rating']}")
478
- st.write("---")
479
- else:
480
- st.write("No feedback data available yet.")
481
-
482
- print("********************************************************************************")
483
 
484
  if __name__ == '__main__':
485
  main()
 
36
  "About" : "#Hi this our project."
37
  }
38
  )
39
+ # st.set_option(deprecation.showPyplotGlobalUse=False)
40
+ # st.set_option('base','dark')
41
  # Initialize Wikipedia API with a user agent
42
  user_agent = 'QGen/1.0 (channingfisher7@gmail.com)'
43
  wiki_wiki = wikipediaapi.Wikipedia(user_agent= user_agent,language='en')
 
66
 
67
  @st.cache_resource
68
  def load_model():
69
+ model_name = "DevBM/t5-small-squad"
70
  model = T5ForConditionalGeneration.from_pretrained(model_name)
71
  tokenizer = T5Tokenizer.from_pretrained(model_name)
72
  return model, tokenizer
 
199
  def generate_options(answer, context, n=3):
200
  options = [answer]
201
 
 
202
  # Add contextually relevant words using a pre-trained model
203
  context_embedding = context_model.encode(context)
204
  answer_embedding = context_model.encode(answer)
 
337
  st.title(":blue[Question Generator System]")
338
  session_id = get_session_id()
339
  state = initialize_state(session_id)
 
 
 
340
 
341
  with st.sidebar:
342
  st.subheader("Customization Options")
 
356
  extract_all_keywords = st.toggle("Extract Max Keywords",value=False)
357
  with col2:
358
  enable_feedback_mode = st.toggle("Enable Feedback Mode",False)
359
+ # set_state(session_id, 'generated_questions', state['generated_questions'])
360
  text = None
361
  if input_type == "Text Input":
362
  text = st.text_area("Enter text here:", value="Joe Biden, the current US president is on a weak wicket going in for his reelection later this November against former President Donald Trump.")
 
368
  text = clean_text(text)
369
  segments = segment_text(text)
370
  generate_questions_button = st.button("Generate Questions")
371
+ q_count = 0
372
+ if generate_questions_button:
373
  state['generated_questions'] = []
374
  # st.session_state.generated_questions = []
375
  for text in segments:
 
379
  for i, (keyword, context) in enumerate(keyword_sentence_mapping.items()):
380
  if i >= num_questions:
381
  break
382
+ if q_count>num_questions:
383
+ break
384
  question = generate_question(context, keyword, num_beams=num_beams)
385
  options = generate_options(keyword,context)
386
  overall_score, relevance_score, complexity_score, spelling_correctness = assess_question_quality(context,question,keyword)
 
396
  "complexity_score" : complexity_score,
397
  "spelling_correctness" : spelling_correctness,
398
  }
399
+ print("\n\n",tpl,"\n\n")
400
  # st.session_state.generated_questions.append(tpl)
401
  state['generated_questions'].append(tpl)
402
+ q_count += 1
403
+ print("\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n")
404
+ data = get_state(session_id)
405
+ print(data)
406
  set_state(session_id, 'generated_questions', state['generated_questions'])
407
+ a = get_state(session_id)
408
 
409
  # sort question based on their quality score
 
410
  state['generated_questions'] = sorted(state['generated_questions'],key = lambda x: x['overall_score'], reverse=True)
411
  # Display generated questions
 
412
  if state['generated_questions']:
413
  st.header("Generated Questions:",divider='blue')
414
+ for i, q in enumerate(state['generated_questions']):
 
415
  st.subheader(body=f":orange[Q{i+1}:] {q['question']}")
416
 
417
  if show_context is True:
 
433
  m3.metric("Complexity Score", value=f"{q['complexity_score']:,.2f}")
434
  m4.metric("Spelling Correctness", value=f"{q['spelling_correctness']:,.2f}")
435
 
436
+ # q['context'] = st.text_area(f"Edit Context {i+1}:", value=q['context'], key=f"context_{i}")
437
  if enable_feedback_mode:
438
  q['question'] = st.text_input(f"Edit Question {i+1}:", value=q['question'], key=f"question_{i}")
439
  q['rating'] = st.selectbox(f"Rate this question (1-5)", options=[1, 2, 3, 4, 5], key=f"rating_{i}")
 
446
  # if st.session_state.generated_questions:
447
  if state['generated_questions']:
448
  with st.sidebar:
449
+ csv_data = export_to_csv(state['generated_questions'])
450
  st.download_button(label="Download CSV", data=csv_data, file_name='questions.csv', mime='text/csv')
451
 
452
+ pdf_data = export_to_pdf(state['generated_questions'])
453
  st.download_button(label="Download PDF", data=pdf_data, file_name='questions.pdf', mime='application/pdf')
454
+ with st.expander("View Visualizations"):
455
+ questions = [tpl['question'] for tpl in state['generated_questions']]
456
+ overall_scores = [tpl['overall_score'] for tpl in state['generated_questions']]
457
+ st.subheader('WordCloud of Questions',divider='rainbow')
458
+ display_word_cloud(questions)
459
+ st.subheader('Overall Scores',divider='violet')
460
+ overall_scores = pd.DataFrame(overall_scores,columns=['Overall Scores'])
461
+ st.line_chart(overall_scores)
462
+
463
+
464
+ # View Feedback Statistics
465
+ with st.expander("View Feedback Statistics"):
466
+ feedback_file = 'question_feedback.json'
467
+ if os.path.exists(feedback_file):
468
+ with open(feedback_file, 'r') as f:
469
+ feedback_data = json.load(f)
470
+
471
+ st.subheader("Feedback Statistics")
472
+
473
+ # Calculate average rating
474
+ ratings = [feedback['rating'] for feedback in feedback_data]
475
+ avg_rating = sum(ratings) / len(ratings) if ratings else 0
476
+ st.write(f"Average Question Rating: {avg_rating:.2f}")
477
+
478
+ # Show distribution of ratings
479
+ rating_counts = {i: ratings.count(i) for i in range(1, 6)}
480
+ st.bar_chart(rating_counts)
481
 
482
+ # Show some highly rated questions
483
+ st.subheader("Highly Rated Questions")
484
+ sorted_feedback = sorted(feedback_data, key=lambda x: x['rating'], reverse=True)
485
+ top_questions = sorted_feedback[:5]
486
+ for feedback in top_questions:
487
+ st.write(f"Question: {feedback['question']}")
488
+ st.write(f"Answer: {feedback['answer']}")
489
+ st.write(f"Rating: {feedback['rating']}")
490
+ st.write("---")
491
+ else:
492
+ st.write("No feedback data available yet.")
493
+ print("********************************************************************************")
 
494
 
495
  if __name__ == '__main__':
496
  main()