File size: 4,847 Bytes
85e590f
d4fb052
814d355
a99cdc3
a8ead94
0a6c0de
85e590f
9c65178
 
 
85e590f
 
 
75f8ce6
d4fb052
154424a
 
 
85e590f
154424a
85e590f
154424a
 
b4187b5
85e590f
 
 
 
 
 
6152aba
 
 
 
 
85e590f
 
 
 
 
 
 
 
 
 
 
 
 
 
6152aba
 
 
 
 
85e590f
 
 
d4fb052
 
 
85e590f
 
9c65178
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85e590f
 
 
 
 
 
 
 
9c65178
85e590f
 
 
d4fb052
9c65178
 
 
 
d4fb052
 
 
 
 
9c65178
d4fb052
 
98d450e
9c65178
d4fb052
 
 
85e590f
6152aba
9c65178
 
 
 
 
85e590f
 
 
 
 
 
 
 
9c65178
 
d4fb052
9c65178
 
 
 
d4fb052
 
85e590f
 
 
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# presentation_generator.py

import os
from crewai import Crew, LLM, Agent
from crewai_tools import Tool, SerperDevTool
import streamlit as st
import base64
# import pypdfium2 as pdfium # Removed
# from fpdf import FPDF # Removed


# Replace with your actual API keys
GEMINI_API_KEY = "AIzaSyD6yZxfVOnh63GXBJjakAupk9aP4CZrgrQ"
SERPER_API_KEY = "9b90a274d9e704ff5b21c0367f9ae1161779b573"

llm = LLM(
    model="gemini/gemini-1.5-flash",
    temperature=0.7,
    timeout=120,
    max_tokens=8000,
    api_key=GEMINI_API_KEY
)

serper_tool = SerperDevTool(api_key=SERPER_API_KEY)

# Plan Generator Agent
class PlanGeneratorAgent(Agent):
    def __init__(self):
        super().__init__(
            name="PlanGenerator",
            role="Presentation Planner",
            goal="Create detailed and well-structured presentation outlines",
            backstory="""You are an experienced presentation strategist who excels at 
            creating logical and impactful presentation structures. You understand how 
            to organize information for maximum audience engagement.""",
            llm=llm,
            tools=[serper_tool]
        )

    def run(self, theme):
        research = serper_tool.search(query=f"Best practices for {theme} presentations")
        plan = "Introduction\nMain Points\nConclusion"
        return plan

# Content Generator Agent
class ContentGeneratorAgent(Agent):
    def __init__(self):
        super().__init__(
            name="ContentGenerator",
            role="Content Creator",
            goal="Generate engaging and informative presentation content",
            backstory="""You are a creative content specialist with expertise in 
            transforming ideas into compelling presentation material. You know how 
            to balance information with engagement.""",
            llm=llm
        )

    def run(self, section, theme):
        prompt = f"Generate {section} for a presentation on {theme}."
        content = self.llm.generate(prompt)
        return content

# PDF Compiler Agent # Removed
# class PDFCompilerAgent(Agent):
#     def __init__(self):
#         super().__init__(
#             name="PDFCompiler",
#             role="Document Formatter",
#             goal="Create professional and well-formatted PDF presentations",
#             backstory="""You are a document formatting expert who knows how to 
#             transform content into visually appealing and professional PDFs. You 
#             understand typography, layout, and document structure.""",
#             llm=llm
#         )

#     def run(self, content_dict):
#         pdf = FPDF()
#         pdf.add_page()
#         pdf.set_font("Arial", size=12)

#         for section, content in content_dict.items():
#             pdf.cell(0, 10, f"{section}", ln=True)
#             pdf.multi_cell(0, 10, f"{content}", ln=True)

#         pdf.output("presentation.pdf")
#         return "presentation.pdf"

# Main Crew
class PresentationCrew(Crew):
    def __init__(self):
        super().__init__(
            name="PresentationGenerator",
            description="Generates a high-quality presentation based on a given theme.",
            llm=llm,
            agents=[PlanGeneratorAgent(), ContentGeneratorAgent()] # Removed PDFCompilerAgent
        )

    def run(self, theme):
        try:
            plan_agent = self.agents[0]
            content_agent = self.agents[1]
            
            plan = plan_agent.run(theme)
            sections = plan.split("\n")
            content_dict = {}

            for section in sections:
                if section:
                    content = content_agent.run(section, theme)
                    content_dict[section] = content

            print(content_dict)
            return content_dict
        except Exception as e:
            print(f"An error occurred: {e}")
            return None

# Streamlit App Functions
# def get_pdf_download_link(pdf_path): # Removed
#     with open(pdf_path, "rb") as f:
#         pdf_bytes = f.read()
#     encoded = base64.b64encode(pdf_bytes).decode()
#     return f'<a href="data:application/pdf;base64,{encoded}" download="presentation.pdf">Download PDF</a>'

def main():
    st.title("Advanced Presentation Generator")

    theme = st.text_input("Enter the presentation theme:")

    if st.button("Generate Presentation"):
        crew = PresentationCrew()
        presentation_content = crew.run(theme)
        if presentation_content:
            st.success("Presentation generated successfully!")
            for section, content in presentation_content.items():
                st.subheader(section)
                st.write(content)
                st.markdown("---")  # Separator between sections
        else:
            st.error("Failed to generate presentation.")

if __name__ == "__main__":
    main()