Update app.py
Browse files
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()
|
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 '
|
23 |
-
st.session_state.
|
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.
|
46 |
-
|
|
|
|
|
47 |
],
|
48 |
-
max_tokens=
|
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
|
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.
|
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 |
-
|
|
|
|
|
|
|
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 |
-
#
|
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")
|