import streamlit as st from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel import tempfile # Initialize the content generation agent with DuckDuckGo tool content_agent = CodeAgent( tools=[DuckDuckGoSearchTool()], model=HfApiModel() ) # Function to display agent activity def display_agent_activity(prompt, result): st.write("### Agent Activity:") st.write("**Prompt Sent to Agent:**") st.code(prompt, language="text") st.write("**Agent Output:**") st.code(result, language="text") # Function to save content as a downloadable text file def generate_text_download(content, filename="generated_blog.txt"): with tempfile.NamedTemporaryFile(delete=False, suffix=".txt") as tmp_file: tmp_file.write(content.encode()) return tmp_file.name, filename # Function to save content as a downloadable PDF def generate_pdf_download(content, filename="generated_blog.pdf"): from fpdf import FPDF with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file: pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.multi_cell(0, 10, content) pdf.output(tmp_file.name) return tmp_file.name, filename # Streamlit app title st.title("SmolAgents Content Writer") # Tabs for the interface tabs = st.tabs(["Generate Content", "Agent Activity", "Download Options"]) # Tab 1: Generate Content with tabs[0]: st.header("Generate Content") st.write("Generate high-quality blog content enriched with real-time insights using SmolAgents.") # Input field for blog topic or prompt blog_prompt = st.text_area("Enter your blog topic or prompt:", placeholder="E.g., The Future of AI in Healthcare") # Input field for choosing content tone tone = st.selectbox("Choose the tone of the content:", ["Professional", "Casual", "Persuasive", "Informative"]) # Option to include a summary include_summary = st.checkbox("Include a summary of the generated content") # Button to trigger blog content generation if st.button("Generate Blog Content"): if blog_prompt: with st.spinner("Generating blog content, please wait..."): try: # Generate blog content using the agent agent_prompt = ( f"Write a well-structured and detailed blog post on the following topic:\n" f"{blog_prompt}\n" f"Structure it with: Introduction, Key Trends, Applications, Ethical Considerations, and Conclusion." f" Use numbered or bulleted points for key takeaways. Tone: {tone}" ) blog_result = content_agent.run(agent_prompt) # Display the generated blog content st.subheader("Generated Blog Content") st.write(blog_result) # Display a summary if requested if include_summary: summary_prompt = ( f"Provide a concise and well-ordered summary of the following content with key points as bullet points:\n" f"{blog_result}" ) summary_result = content_agent.run(summary_prompt) st.subheader("Content Summary") st.markdown(summary_result) # Store result for download st.session_state["last_content"] = blog_result except Exception as e: st.error("An error occurred while generating content. Please try again.") else: st.warning("Please enter a valid blog topic or prompt.") # Tab 2: Agent Activity with tabs[1]: st.header("Agent Activity") if "last_content" in st.session_state: display_agent_activity(blog_prompt, st.session_state["last_content"]) else: st.write("No recent activity to display.") # Tab 3: Download Options with tabs[2]: st.header("Download Options") if "last_content" in st.session_state: content = st.session_state["last_content"] # Text file download text_file_path, text_filename = generate_text_download(content) with open(text_file_path, "rb") as file: st.download_button(label="Download as Text File", data=file, file_name=text_filename, mime="text/plain") # PDF file download pdf_file_path, pdf_filename = generate_pdf_download(content) with open(pdf_file_path, "rb") as file: st.download_button(label="Download as PDF", data=file, file_name=pdf_filename, mime="application/pdf") else: st.write("No content available for download. Generate content first.")