Hammad712 commited on
Commit
e730989
·
verified ·
1 Parent(s): 1717276

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +124 -0
  2. requirements.txt +9 -0
app.py ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import requests
3
+
4
+ # Initialize session state to hold the generated document bytes
5
+ if "docx_bytes" not in st.session_state:
6
+ st.session_state.docx_bytes = None
7
+
8
+ st.title("Bedtime Story Generator")
9
+ st.write(
10
+ "Choose from the options below or enter your own values to generate a personalized bedtime story."
11
+ )
12
+
13
+ with st.form(key="story_form"):
14
+ # 1. Age Range
15
+ age_options = ["3-5", "6-8", "9-12"]
16
+ selected_age = st.selectbox("Age Range", age_options, index=0)
17
+ custom_age = st.text_input(
18
+ "Or enter a custom Age Range (e.g., 2-4, 13-15)"
19
+ )
20
+ age_value = custom_age.strip() if custom_age.strip() else selected_age
21
+
22
+ # 2. Theme
23
+ theme_options = ["adventure", "friendship", "magic", "space", "bedtime calming"]
24
+ selected_theme = st.selectbox("Theme", theme_options, index=0)
25
+ custom_theme = st.text_input("Or enter a custom Theme")
26
+ theme_value = custom_theme.strip() if custom_theme.strip() else selected_theme
27
+
28
+ # 3. Number of Pages
29
+ # We map option labels to their numeric values
30
+ pages_options = {"Short (5)": 5, "Medium (10)": 10, "Long (15)": 15}
31
+ selected_pages_option = st.selectbox("Number of Pages", list(pages_options.keys()), index=1)
32
+ custom_pages = st.text_input(
33
+ "Or enter a custom number of pages", placeholder="e.g. 7"
34
+ )
35
+ if custom_pages.strip():
36
+ try:
37
+ pages_value = int(custom_pages.strip())
38
+ except ValueError:
39
+ st.error("Invalid custom number of pages. Using selected option.")
40
+ pages_value = pages_options[selected_pages_option]
41
+ else:
42
+ pages_value = pages_options[selected_pages_option]
43
+
44
+ # 4. Reading Time
45
+ time_options = {"3 min": 3, "5 min": 5, "10 min": 10}
46
+ selected_time_option = st.selectbox("Reading Time", list(time_options.keys()), index=1)
47
+ custom_time = st.text_input(
48
+ "Or enter a custom reading time (in minutes)", placeholder="e.g. 7"
49
+ )
50
+ if custom_time.strip():
51
+ try:
52
+ time_value = int(custom_time.strip())
53
+ except ValueError:
54
+ st.error("Invalid custom reading time. Using selected option.")
55
+ time_value = time_options[selected_time_option]
56
+ else:
57
+ time_value = time_options[selected_time_option]
58
+
59
+ # 5. Story Tone
60
+ tone_options = ["fun", "calming", "inspiring", "silly"]
61
+ selected_tone = st.selectbox("Story Tone", tone_options, index=0)
62
+ custom_tone = st.text_input("Or enter a custom Story Tone")
63
+ tone_value = custom_tone.strip() if custom_tone.strip() else selected_tone
64
+
65
+ # 6. Setting
66
+ setting_options = ["forest", "ocean", "outer space", "castle"]
67
+ selected_setting = st.selectbox("Setting", setting_options, index=0)
68
+ custom_setting = st.text_input("Or enter a custom Setting")
69
+ setting_value = custom_setting.strip() if custom_setting.strip() else selected_setting
70
+
71
+ # 7. Lesson or Moral (optional)
72
+ moral_options = ["None", "kindness", "bravery", "sharing"]
73
+ selected_moral = st.selectbox("Lesson or Moral (optional)", moral_options, index=0)
74
+ custom_moral = st.text_input("Or enter a custom Moral/Lesson (leave blank for none)")
75
+ if custom_moral.strip():
76
+ moral_value = custom_moral.strip()
77
+ elif selected_moral == "None":
78
+ moral_value = ""
79
+ else:
80
+ moral_value = selected_moral
81
+
82
+ # 8. Illustration Style
83
+ illustration_options = ["cartoon", "watercolor", "sketch", "none"]
84
+ selected_illustration = st.selectbox("Illustration Style", illustration_options, index=0)
85
+ custom_illustration = st.text_input("Or enter a custom Illustration Style")
86
+ illustration_value = custom_illustration.strip() if custom_illustration.strip() else selected_illustration
87
+
88
+ submit_button = st.form_submit_button(label="Generate Story")
89
+
90
+ # When the form is submitted, build the payload and call the FastAPI endpoint
91
+ if submit_button:
92
+ payload = {
93
+ "Age": age_value,
94
+ "Theme": theme_value,
95
+ "Pages": pages_value,
96
+ "Time": time_value,
97
+ "Tone": tone_value,
98
+ "Setting": setting_value,
99
+ "Moral": moral_value,
100
+ "IllustrationStyle": illustration_value, # Ensure your FastAPI endpoint supports this parameter.
101
+ }
102
+
103
+ fastapi_url = "http://localhost:8000/generate-story" # Update if your endpoint URL differs.
104
+
105
+ try:
106
+ with st.spinner("Generating your story, please wait..."):
107
+ response = requests.post(fastapi_url, json=payload)
108
+
109
+ if response.status_code == 200:
110
+ st.session_state.docx_bytes = response.content
111
+ st.success("Story generated successfully!")
112
+ else:
113
+ st.error(f"Error {response.status_code}: {response.text}")
114
+ except Exception as e:
115
+ st.error(f"An error occurred: {str(e)}")
116
+
117
+ # If a document was generated, show a download button
118
+ if st.session_state.docx_bytes is not None:
119
+ st.download_button(
120
+ label="Download Your Bedtime Story",
121
+ data=st.session_state.docx_bytes,
122
+ file_name="bedtime_story.docx",
123
+ mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
124
+ )
requirements.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ langchain_openai
2
+ pydantic
3
+ python-docx
4
+ Pillow
5
+ requests
6
+ python-dotenv
7
+ uvicorn
8
+ fastapi
9
+ streamlit