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])