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.")