Spaces:
Sleeping
Sleeping
# 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 | |
# Replace with your actual API keys | |
GEMINI_API_KEY = "AIzaSyD6yZxfVOnh63GXBJjakAupk9aP4CZrgrQ" | |
os.environ["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=SERPERDEV_API_KEY) | |
# Plan Generator Agent | |
class PlanGeneratorAgent(Agent): | |
def __init__(self): | |
super().__init__( | |
name="PlanGenerator", | |
description="Generates a detailed plan for a presentation.", | |
llm=llm, | |
tools=[serper_tool] | |
) | |
def run(self, theme): | |
# Use serper_tool to research | |
research = serper_tool.search(query=f"Best practices for {theme} presentations") | |
# Generate plan based on research | |
plan = "Introduction\nMain Points\nConclusion" | |
return plan | |
# Content Generator Agent | |
class ContentGeneratorAgent(Agent): | |
def __init__(self): | |
super().__init__( | |
name="ContentGenerator", | |
description="Generates content for a specific section of a presentation.", | |
llm=llm | |
) | |
def run(self, section): | |
# Generate content logic | |
content = f"Content for {section}" | |
print(content) | |
return content | |
# PDF Compiler Agent | |
class PDFCompilerAgent(Agent): | |
def __init__(self): | |
super().__init__( | |
name="PDFCompiler", | |
description="Compiles presentation content into a PDF.", | |
llm=llm | |
) | |
def run(self, content): | |
# Compile PDF logic | |
doc = pdfium.PdfDocument.new() | |
page = doc.new_page(width=612, height=792) | |
canvas = page.get_canvas() | |
# Add content to the page | |
doc.save("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(), PDFCompilerAgent()] | |
) | |
def run(self, theme): | |
plan = self.delegate("Generate a detailed plan for the presentation on {}".format(theme)) | |
sections = plan.split("\n") | |
content = [] | |
for section in sections: | |
if section: | |
content.append(self.delegate("Generate content for the presentation section: {}".format(section))) | |
pdf = self.delegate("Compile the following content into a PDF: {}".format("\n".join(content))) | |
return pdf | |
# Streamlit App | |
def get_pdf_download_link(pdf_path): | |
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() | |
pdf_path = crew.run(theme) | |
st.success("Presentation generated successfully!") | |
st.markdown(get_pdf_download_link(pdf_path), unsafe_allow_html=True) | |
if __name__ == "__main__": | |
main() |