blog / app.py
Mo-alaa's picture
Update app.py
6cf25d0
raw
history blame
3.02 kB
from langchain.chains import LLMChain
from langchain.llms import HuggingFaceHub
from langchain.prompts import PromptTemplate
import streamlit as st
import json
# Load existing ideas from a file
def load_ideas():
try:
with open("ideas.json", "r") as file:
ideas = json.load(file)
except FileNotFoundError:
ideas = []
return ideas
# Save ideas to a file
def save_ideas(ideas):
with open("ideas.json", "w") as file:
json.dump(ideas, file)
# Function to generate content
def generate_content(topic):
hub_llm = HuggingFaceHub(repo_id="HuggingFaceH4/zephyr-7b-beta")
prompt = PromptTemplate(
input_variables=['keyword'],
template="""
Write a comprehensive article about {keyword} covering the following aspects:
Introduction, History and Background, Key Concepts and Terminology, Use Cases and Applications, Benefits and Drawbacks, Future Outlook, Conclusion
Ensure that the article is well-structured, informative, and at least 1500 words long. Use SEO best practices for content optimization.
"""
)
hub_chain = LLMChain(prompt=prompt, llm=hub_llm, verbose=True)
content = hub_chain.run(topic)
subheadings = [
"Introduction",
"History and Background",
"Key Concepts and Terminology",
"Use Cases and Applications",
"Benefits and Drawbacks",
"Future Outlook",
"Conclusion",
]
for subheading in subheadings:
if (subheading + ":") in content:
content = content.replace(subheading + ":", "## " + subheading + "\n")
elif subheading in content:
content = content.replace(subheading, "## " + subheading + "\n")
return content
# Streamlit app
st.title("Blog Generator")
# Input and button
topic = st.text_input("Enter Title for the blog")
button_clicked = st.button("Create blog!")
# Load existing ideas
existing_ideas = load_ideas()
st.sidebar.header("Previous Ideas:")
# Display existing ideas in the sidebar
keys = list(set([key for idea in existing_ideas for key in idea.keys()]))
selected_idea = st.sidebar.selectbox("Select Idea", keys, key="selectbox", index=0)
# Display content for the selected idea
selected_idea_from_list = next((idea for idea in existing_ideas if selected_idea in idea), None)
st.markdown(selected_idea_from_list[selected_idea])
# Handle button click
if button_clicked:
# Generate content and update existing ideas
content = generate_content(topic)
existing_ideas.append({topic: content})
save_ideas(existing_ideas)
# Update keys and selected idea in the sidebar
keys = list(set([key for idea in existing_ideas for key in idea.keys()]))
selected_idea = st.sidebar.selectbox("Select Idea", keys, key="selectbox", index=keys.index(topic))
# Update selected idea content
selected_idea_from_list = next((idea for idea in existing_ideas if selected_idea in idea), None)
st.markdown(selected_idea_from_list[selected_idea])