File size: 5,657 Bytes
56c94e1 ef98296 56c94e1 5fc93c2 56c94e1 5fc93c2 ef98296 5fc93c2 ef98296 5fc93c2 56c94e1 da46551 5fc93c2 2bfbc4d 5fc93c2 2bfbc4d 5fc93c2 387de49 da46551 5fc93c2 2bfbc4d 5fc93c2 da46551 2b2e797 5fc93c2 4a2af0c 5fc93c2 2bfbc4d 5fc93c2 da46551 5fc93c2 2bfbc4d 5fc93c2 2bfbc4d 5fc93c2 ef98296 2bfbc4d ef98296 2bfbc4d 387de49 2bfbc4d 56c94e1 2bfbc4d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
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(["Generated Content", "Generated Summary", "Agent Activity"])
# Tab 1: Generated Content
with tabs[0]:
#st.header("Generated 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 Technology 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)
# Store content for download
st.session_state["last_content"] = blog_result
# Generate 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.session_state["last_summary"] = summary_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.")
# Download option for content
if "last_content" in st.session_state:
content = st.session_state["last_content"]
text_file_path, text_filename = generate_text_download(content)
with open(text_file_path, "rb") as file:
st.download_button(label="Download Content as Text File", data=file, file_name=text_filename, mime="text/plain")
pdf_file_path, pdf_filename = generate_pdf_download(content)
with open(pdf_file_path, "rb") as file:
st.download_button(label="Download Content as PDF", data=file, file_name=pdf_filename, mime="application/pdf")
# Tab 2: Generated Summary
with tabs[1]:
#st.header("Generated Summary")
if "last_summary" in st.session_state:
st.subheader("Content Summary")
st.markdown(st.session_state["last_summary"])
# Download option for summary
summary = st.session_state["last_summary"]
summary_text_file_path, summary_text_filename = generate_text_download(summary, filename="generated_summary.txt")
with open(summary_text_file_path, "rb") as file:
st.download_button(label="Download Summary as Text File", data=file, file_name=summary_text_filename, mime="text/plain")
summary_pdf_file_path, summary_pdf_filename = generate_pdf_download(summary, filename="generated_summary.pdf")
with open(summary_pdf_file_path, "rb") as file:
st.download_button(label="Download Summary as PDF", data=file, file_name=summary_pdf_filename, mime="application/pdf")
else:
st.write("No summary available. Generate content and include a summary to view it here.")
# Tab 3: Agent Activity
with tabs[2]:
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.") |