ashhadahsan's picture
Upload 7 files
c060b6c
raw
history blame
4.16 kB
import streamlit as st
from constants import *
from stqdm import stqdm
from prompts import *
from generator import *
from utils import *
st.set_page_config(
layout="wide",
page_title="AI Book Generator",
page_icon=":book:",
)
st.title("AI Book Generator")
st.markdown("<h3>Select options </h3>", unsafe_allow_html=True)
with st.expander("Educational value *"):
age_range = st.select_slider("Age range of the reader", options=AGE_RANGE)
skill_development = st.selectbox("Skill development", options=SKILL_DEVELOPMENT)
learning_obectives = st.selectbox(
"Learning objectives", options=LEARNING_OBJECTIVES
)
with st.expander("Emotional value *"):
theme = st.selectbox("Theme", options=THEME)
mood = st.selectbox("Moood of story", options=MODD_OF_STORY)
positive_messaging = st.selectbox("Skill development", options=POSITIVE_MESSAGNG)
with st.expander("Personal *"):
theme = st.selectbox("Gender", options=GENDER)
fvrt_book = st.text_input("Favorite book")
with st.expander("Book Details * "):
chapters = st.number_input(
"How many chapters should the book have?", min_value=3, max_value=100, value=5
)
title = st.text_input("Title of the book")
genre = st.selectbox("Genre", options=GENRE)
topic = st.selectbox("Topic ", options=TOPIC)
main_name = st.text_input("Name of main character")
type_of_main_character = st.selectbox(
"Type of main character", TYPE_OF_MAIN_CHARACTER
)
antagonist_name = st.text_input("Antagonist name")
antagonsit_type = st.selectbox("Antagonist type", options=ANTAGONIST_TYPE)
suuporting_character_name = st.text_input("Supporting character name (if any)")
suporting_character_type = st.selectbox(
"Supporting character type", options=SUPPORTING_CHARACTER_TYPE
)
settings = st.selectbox("Setting ", options=SETTINGS)
resolution = st.selectbox("Resolution", options=RESOLUTION)
btn = st.button("Generate Book")
if btn:
content = []
for x in stqdm(range(chapters), desc="Generating book"):
if x == 0:
prmpt = get_initial_prompts(
genre,
type_of_main_character,
main_name,
skill_development,
learning_obectives,
theme,
topic,
)
content.append(complete_with_gpt(prmpt, 200, "gpt2", 1500, 0.7, 1.5))
if x == 1:
prmpt = story_setting_prompt(
genre,
type_of_main_character,
main_name,
skill_development,
learning_obectives,
theme,
mood,
antagonist_name,
antagonsit_type,
)
previous = " ".join(x for x in content)
prmpt = previous + " " + prmpt
content.append(complete_with_gpt(prmpt, 200, "gpt2", 1500, 0.7, 1.5))
if x % 3 == 0:
prmpt = supporting_character_inclusion(
genre,
suuporting_character_name,
suporting_character_type,
positive_messaging,
)
previous = " ".join(x for x in content)
prmpt = previous + " " + prmpt
content.append(complete_with_gpt(prmpt, 200, "gpt2", 1500, 0.7, 1.5))
if x == chapters - 1:
prmpt = ending_scene(genre, resolution, main_name, positive_messaging)
previous = " ".join(x for x in content)
prmpt = previous + " " + prmpt
content.append(complete_with_gpt(prmpt, 200, "gpt2", 1500, 0.7, 1.5))
else:
previous = " ".join(x for x in content)
prmpt = previous
content.append(complete_with_gpt(prmpt, 200, "gpt2", 1500, 0.7, 1.5))
st.write(content)
filenamee = to_pdf(convert(create_md(text=content, title=title)))
with open(filenamee, "rb") as pdf_file:
PDFbyte = pdf_file.read()
st.download_button(
label="Download Book",
data=PDFbyte,
file_name=filenamee,
mime="application/octet-stream",
)