File size: 4,252 Bytes
7becee7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel
from io import BytesIO

# 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 enhance generated content
def enhance_content(content):
    return f"{content}\n\n---\nGenerated with insights and enhanced formatting."

# Function to save content as a downloadable text file
def generate_text_download(content, filename="generated_blog.txt"):
    b = BytesIO()
    b.write(content.encode())
    b.seek(0)
    return b, filename

# Function to save content as a downloadable PDF
def generate_pdf_download(content, filename="generated_blog.pdf"):
    from fpdf import FPDF
    pdf = FPDF()
    pdf.add_page()
    pdf.set_font("Arial", size=12)
    pdf.multi_cell(0, 10, content)
    b = BytesIO()
    pdf.output(b)
    b.seek(0)
    return b, filename

# Streamlit app title
st.title("SmolAgent 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 SmolAgent.")

    # 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
                    blog_result = content_agent.run(f"{blog_prompt}\nTone: {tone}")

                    # Optionally enhance the content
                    blog_result = enhance_content(blog_result)

                    # 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"Summarize this content:\n{blog_result}"
                        summary_result = content_agent.run(summary_prompt)
                        st.subheader("Content Summary")
                        st.write(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, text_filename = generate_text_download(content)
        st.download_button(label="Download as Text File", data=text_file, file_name=text_filename, mime="text/plain")

        # PDF file download
        pdf_file, pdf_filename = generate_pdf_download(content)
        st.download_button(label="Download as PDF", data=pdf_file, file_name=pdf_filename, mime="application/pdf")
    else:
        st.write("No content available for download. Generate content first.")