iffazainab commited on
Commit
c57020d
ยท
verified ยท
1 Parent(s): 8330125

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -53
app.py CHANGED
@@ -1,3 +1,4 @@
 
1
  import gradio as gr
2
  import requests
3
  import os
@@ -66,7 +67,7 @@ def tutor_bot(mode, selected_class, selected_subject, selected_chapter, action_t
66
  file_text = read_uploaded_file(uploaded_file)
67
  if not file_text.strip():
68
  return "Could not read text from the uploaded file."
69
- prompt = f"Based on the following content, {action_type.lower()}: \n\n{file_text[:4000]}"
70
  gpt_response = query_gpt(prompt)
71
  return gpt_response
72
 
@@ -89,57 +90,44 @@ def tutor_bot(mode, selected_class, selected_subject, selected_chapter, action_t
89
 
90
  return "Invalid mode or missing input."
91
 
92
- # ------------------ HANGMAN GAME ------------------
93
- hangman_questions = [
94
- {"question": "This is the basic unit of life.", "answer": "cell"},
95
- {"question": "Powerhouse of the cell.", "answer": "mitochondria"},
96
- {"question": "The force pulling objects toward the Earth.", "answer": "gravity"}
97
- ]
98
-
99
- hangman_state = {"question": "", "answer": "", "display": [], "wrong": [], "guessed": [], "max": 6}
100
-
101
- def init_hangman():
102
- q = random.choice(hangman_questions)
103
- hangman_state.update({
104
- "question": q["question"],
105
- "answer": q["answer"].lower(),
106
- "display": ["_" if c.isalpha() else c for c in q["answer"]],
107
- "wrong": [],
108
- "guessed": []
109
- })
110
- return format_hangman()
111
-
112
- def guess_hangman(letter):
113
- letter = letter.lower()
114
- if letter in hangman_state["guessed"] or letter in hangman_state["wrong"]:
115
- return format_hangman("Already guessed that.")
116
-
117
- if letter in hangman_state["answer"]:
118
- for i, l in enumerate(hangman_state["answer"]):
119
- if l == letter:
120
- hangman_state["display"][i] = letter
121
- else:
122
- hangman_state["wrong"].append(letter)
123
-
124
- hangman_state["guessed"].append(letter)
125
-
126
- if "_" not in hangman_state["display"]:
127
- return format_hangman("๐ŸŽ‰ You won!")
128
- if len(hangman_state["wrong"]) >= hangman_state["max"]:
129
- return format_hangman(f"๐Ÿ’€ You lost! Answer: {hangman_state['answer']}")
130
 
131
- return format_hangman()
 
 
132
 
133
- def format_hangman(msg=""):
134
- return f"""
135
- **โ“ Question:** {hangman_state['question']}
 
 
136
 
137
- **๐Ÿ”  Word:** {' '.join(hangman_state['display'])}
 
138
 
139
- **โŒ Wrong Guesses:** {' '.join(hangman_state['wrong'])} ({len(hangman_state['wrong'])}/{hangman_state['max']})
 
 
140
 
141
- {msg}
142
- """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
 
144
  # ------------------ GRADIO UI ------------------
145
  with gr.Blocks(title="AI Textbook Tutor") as app:
@@ -190,12 +178,33 @@ with gr.Blocks(title="AI Textbook Tutor") as app:
190
  outputs=output_box
191
  )
192
 
193
- # Hangman Game Section
194
- gr.Markdown("## ๐ŸŽฎ Educational Hangman Game")
195
- hangman_display = gr.Markdown(value=init_hangman())
196
- letter_input = gr.Textbox(label="Enter a Letter")
197
- letter_input.submit(guess_hangman, inputs=letter_input, outputs=hangman_display)
198
- gr.Button("๐Ÿ”„ New Question").click(init_hangman, outputs=hangman_display)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
 
200
  app.launch()
201
 
 
 
1
+
2
  import gradio as gr
3
  import requests
4
  import os
 
67
  file_text = read_uploaded_file(uploaded_file)
68
  if not file_text.strip():
69
  return "Could not read text from the uploaded file."
70
+ prompt = f"Based on the following content, {action_type.lower()}: \n\n{file_text[:4000]}" # keep it under token limits
71
  gpt_response = query_gpt(prompt)
72
  return gpt_response
73
 
 
90
 
91
  return "Invalid mode or missing input."
92
 
93
+ # ------------------ HANGMAN GAME FUNCTIONS ------------------
94
+ def generate_question_answer(class_level, subject, chapter):
95
+ prompt = f"Give one short quiz question and a one-word answer from the chapter '{chapter}' in Class {class_level} {subject}. Format:\nQuestion: ...\nAnswer: ..."
96
+ result = query_gpt(prompt)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
 
98
+ lines = result.strip().split("\n")
99
+ question = ""
100
+ answer = ""
101
 
102
+ for line in lines:
103
+ if line.lower().startswith("question:"):
104
+ question = line.split(":", 1)[1].strip()
105
+ elif line.lower().startswith("answer:"):
106
+ answer = line.split(":", 1)[1].strip().lower()
107
 
108
+ answer = ''.join(filter(str.isalpha, answer)) # remove non-alpha characters
109
+ return question, answer
110
 
111
+ def start_hangman_game(class_level, subject, chapter):
112
+ question, answer = generate_question_answer(class_level, subject, chapter)
113
+ return question, "_" * len(answer), "", 6, answer, []
114
 
115
+ def guess_letter(letter, answer, current_display, wrong_guesses_left, guessed_letters):
116
+ letter = letter.lower()
117
+ if letter in guessed_letters or len(letter) != 1:
118
+ return current_display, f"You already guessed '{letter}' or invalid guess.", wrong_guesses_left, guessed_letters
119
+
120
+ guessed_letters.append(letter)
121
+ if letter in answer:
122
+ new_display = "".join([letter if answer[i] == letter else current_display[i] for i in range(len(answer))])
123
+ if "_" not in new_display:
124
+ return new_display, "๐ŸŽ‰ You won!", wrong_guesses_left, guessed_letters
125
+ return new_display, f"โœ… Good guess!", wrong_guesses_left, guessed_letters
126
+ else:
127
+ wrong_guesses_left -= 1
128
+ if wrong_guesses_left == 0:
129
+ return current_display, f"โŒ Game over! The word was '{answer}'.", wrong_guesses_left, guessed_letters
130
+ return current_display, f"โŒ Wrong guess! {wrong_guesses_left} tries left.", wrong_guesses_left, guessed_letters
131
 
132
  # ------------------ GRADIO UI ------------------
133
  with gr.Blocks(title="AI Textbook Tutor") as app:
 
178
  outputs=output_box
179
  )
180
 
181
+ # ------------------ HANGMAN GAME TAB ------------------
182
+ with gr.Tab("๐ŸŽฏ Hangman Game"):
183
+ gr.Markdown("### ๐ŸŽฏ Educational Hangman Game Based on Topic")
184
+
185
+ hangman_class = gr.Dropdown(label="Class", choices=list(class_subject_chapters.keys()))
186
+ hangman_subject = gr.Dropdown(label="Subject")
187
+ hangman_chapter = gr.Dropdown(label="Chapter")
188
+
189
+ start_btn = gr.Button("Start Game")
190
+
191
+ hangman_question = gr.Markdown()
192
+ display_word = gr.Textbox(label="Word", interactive=False)
193
+ game_msg = gr.Textbox(label="Status", interactive=False)
194
+ letter_input = gr.Textbox(label="Enter a letter")
195
+ guess_btn = gr.Button("Guess")
196
+
197
+ hidden_answer = gr.State()
198
+ wrong_guesses = gr.State()
199
+ guessed_letters = gr.State()
200
+
201
+ hangman_class.change(update_subjects, inputs=hangman_class, outputs=hangman_subject)
202
+ hangman_subject.change(update_chapters, inputs=[hangman_class, hangman_subject], outputs=hangman_chapter)
203
+
204
+ start_btn.click(start_hangman_game, inputs=[hangman_class, hangman_subject, hangman_chapter], outputs=[hangman_question, display_word, game_msg, wrong_guesses, hidden_answer, guessed_letters])
205
+
206
+ guess_btn.click(guess_letter, inputs=[letter_input, hidden_answer, display_word, wrong_guesses, guessed_letters], outputs=[display_word, game_msg, wrong_guesses, guessed_letters])
207
 
208
  app.launch()
209
 
210
+