Spaces:
Sleeping
Sleeping
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]) | |