Rathapoom commited on
Commit
695191e
Β·
verified Β·
1 Parent(s): 95bfa53

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -16
app.py CHANGED
@@ -5,7 +5,7 @@ from openai import OpenAI
5
  from typing import Dict, List, Set
6
 
7
  # Initialize OpenAI client
8
- client = OpenAI() # Make sure OPENAI_API_KEY is set in your environment variables
9
 
10
  # Set up Streamlit page configuration
11
  st.set_page_config(
@@ -19,8 +19,8 @@ st.set_page_config(
19
  def init_session_state():
20
  if 'story' not in st.session_state:
21
  st.session_state.story = []
22
- if 'achievements' not in st.session_state:
23
- st.session_state.achievements = []
24
  if 'level' not in st.session_state:
25
  st.session_state.level = 'Beginner'
26
  if 'unique_words' not in st.session_state:
@@ -42,10 +42,12 @@ def generate_story_continuation(user_input: str, level: str) -> str:
42
  response = client.chat.completions.create(
43
  model="gpt-4o-mini",
44
  messages=[
45
- {"role": "system", "content": f"You are a creative storytelling assistant for {level} English learners. Keep the language simple and engaging, avoid complex vocabulary, and maintain story coherence."},
46
- {"role": "user", "content": f"Story so far:\n{story_context}\nUser's addition:\n{user_input}\nContinue the story in an engaging way:"}
 
 
47
  ],
48
- max_tokens=150,
49
  temperature=0.7
50
  )
51
  return response.choices[0].message.content
@@ -77,7 +79,7 @@ def get_creative_prompt() -> str:
77
  model="gpt-4o-mini",
78
  messages=[
79
  {"role": "system", "content": "Generate an inspiring question to help continue the story."},
80
- {"role": "user", "content": "Create an open-ended question to inspire the next part of the story."}
81
  ],
82
  max_tokens=50,
83
  temperature=0.7
@@ -93,7 +95,7 @@ def provide_feedback(text: str, level: str) -> str:
93
  response = client.chat.completions.create(
94
  model="gpt-4o-mini",
95
  messages=[
96
- {"role": "system", "content": f"You are an encouraging English teacher for {level} students. Provide one brief, positive piece of feedback."},
97
  {"role": "user", "content": f"Provide encouraging feedback on: {text}"}
98
  ],
99
  max_tokens=50,
@@ -110,7 +112,6 @@ def update_achievements(text: str):
110
  st.session_state.unique_words.update(words)
111
  st.session_state.total_words += len(words)
112
 
113
- # Check for achievements
114
  achievements = {
115
  '50 Words': len(st.session_state.unique_words) >= 50,
116
  '100 Words': len(st.session_state.unique_words) >= 100,
@@ -125,7 +126,7 @@ def update_achievements(text: str):
125
  def reset_story():
126
  """Reset the story and related state variables."""
127
  st.session_state.story = []
128
- st.session_state.achievements = []
129
  st.session_state.unique_words = set()
130
  st.session_state.total_words = 0
131
  st.session_state.badges = []
@@ -164,7 +165,10 @@ with col1:
164
  st.info("Start your adventure by writing the first sentence!")
165
  else:
166
  for entry in st.session_state.story:
167
- st.write(f"{entry['role']}: {entry['content']}")
 
 
 
168
 
169
  # User Input Box
170
  st.header("Your Turn")
@@ -178,20 +182,23 @@ with col1:
178
  # Update achievements
179
  update_achievements(user_input)
180
 
181
- # Get feedback
182
- feedback = provide_feedback(user_input, st.session_state.level)
183
- st.session_state.story.append({"role": "Feedback", "content": feedback})
184
 
185
  # Generate AI continuation
186
  ai_response = generate_story_continuation(user_input, st.session_state.level)
187
  st.session_state.story.append({"role": "AI", "content": ai_response})
188
 
189
- # Clear the input and rerun
190
  st.rerun()
191
  else:
192
  st.warning("Please write something to continue the story.")
193
 
194
  with col2:
 
 
 
 
 
195
  # Help and Suggestions Box
196
  st.header("Writing Help")
197
  if st.button("Get Vocabulary Ideas"):
@@ -202,7 +209,7 @@ with col2:
202
 
203
  if st.button("Get a Creative Prompt"):
204
  creative_prompt = get_creative_prompt()
205
- st.write(creative_prompt)
206
 
207
  # Achievements Box
208
  st.header("Your Achievements")
 
5
  from typing import Dict, List, Set
6
 
7
  # Initialize OpenAI client
8
+ client = OpenAI()
9
 
10
  # Set up Streamlit page configuration
11
  st.set_page_config(
 
19
  def init_session_state():
20
  if 'story' not in st.session_state:
21
  st.session_state.story = []
22
+ if 'feedback' not in st.session_state:
23
+ st.session_state.feedback = None
24
  if 'level' not in st.session_state:
25
  st.session_state.level = 'Beginner'
26
  if 'unique_words' not in st.session_state:
 
42
  response = client.chat.completions.create(
43
  model="gpt-4o-mini",
44
  messages=[
45
+ {"role": "system", "content": f"""You are a creative storytelling assistant for {level} English learners.
46
+ Keep the language simple and engaging. Respond with only 1-2 short sentences to continue the story.
47
+ Avoid long descriptions and let the user contribute to the story development."""},
48
+ {"role": "user", "content": f"Story so far:\n{story_context}\nUser's addition:\n{user_input}\nContinue the story with 1-2 short sentences:"}
49
  ],
50
+ max_tokens=50,
51
  temperature=0.7
52
  )
53
  return response.choices[0].message.content
 
79
  model="gpt-4o-mini",
80
  messages=[
81
  {"role": "system", "content": "Generate an inspiring question to help continue the story."},
82
+ {"role": "user", "content": "Create a short, open-ended question to inspire the next part of the story."}
83
  ],
84
  max_tokens=50,
85
  temperature=0.7
 
95
  response = client.chat.completions.create(
96
  model="gpt-4o-mini",
97
  messages=[
98
+ {"role": "system", "content": f"You are an encouraging English teacher for {level} students. Provide one brief, positive piece of feedback and one gentle correction if needed."},
99
  {"role": "user", "content": f"Provide encouraging feedback on: {text}"}
100
  ],
101
  max_tokens=50,
 
112
  st.session_state.unique_words.update(words)
113
  st.session_state.total_words += len(words)
114
 
 
115
  achievements = {
116
  '50 Words': len(st.session_state.unique_words) >= 50,
117
  '100 Words': len(st.session_state.unique_words) >= 100,
 
126
  def reset_story():
127
  """Reset the story and related state variables."""
128
  st.session_state.story = []
129
+ st.session_state.feedback = None
130
  st.session_state.unique_words = set()
131
  st.session_state.total_words = 0
132
  st.session_state.badges = []
 
165
  st.info("Start your adventure by writing the first sentence!")
166
  else:
167
  for entry in st.session_state.story:
168
+ if entry['role'] == 'You':
169
+ st.write("πŸ‘€ You:", entry['content'])
170
+ elif entry['role'] == 'AI':
171
+ st.write("πŸ€– AI:", entry['content'])
172
 
173
  # User Input Box
174
  st.header("Your Turn")
 
182
  # Update achievements
183
  update_achievements(user_input)
184
 
185
+ # Generate feedback (stored separately)
186
+ st.session_state.feedback = provide_feedback(user_input, st.session_state.level)
 
187
 
188
  # Generate AI continuation
189
  ai_response = generate_story_continuation(user_input, st.session_state.level)
190
  st.session_state.story.append({"role": "AI", "content": ai_response})
191
 
 
192
  st.rerun()
193
  else:
194
  st.warning("Please write something to continue the story.")
195
 
196
  with col2:
197
+ # Feedback Display (separate from story)
198
+ if st.session_state.feedback:
199
+ st.markdown("### πŸ“ Writing Feedback")
200
+ st.markdown(f"*{st.session_state.feedback}*")
201
+
202
  # Help and Suggestions Box
203
  st.header("Writing Help")
204
  if st.button("Get Vocabulary Ideas"):
 
209
 
210
  if st.button("Get a Creative Prompt"):
211
  creative_prompt = get_creative_prompt()
212
+ st.write("πŸ’­", creative_prompt)
213
 
214
  # Achievements Box
215
  st.header("Your Achievements")