Spaces:
Sleeping
Sleeping
File size: 4,696 Bytes
85e590f d4fb052 814d355 a99cdc3 a8ead94 0a6c0de 85e590f d4fb052 85e590f 75f8ce6 d4fb052 154424a 85e590f 154424a 85e590f 154424a b4187b5 85e590f 6152aba 85e590f 6152aba 85e590f d4fb052 85e590f 6152aba 85e590f d4fb052 85e590f d4fb052 85e590f 6152aba 85e590f 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 |
# 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
from fpdf import FPDF
# 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
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(), PDFCompilerAgent()]
)
def run(self, theme):
try:
plan = self.delegate("Generate a detailed plan for the presentation on {}".format(theme))
sections = plan.split("\n")
content_dict = {}
for section in sections:
if section:
content = self.delegate("Generate content for the presentation section: {}".format(section), theme=theme)
content_dict[section] = content
pdf_path = self.delegate("Compile the following content into a PDF: {}".format(content_dict))
return pdf_path
except Exception as e:
print(f"An error occurred: {e}")
return None
# Streamlit App Functions
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)
if pdf_path:
st.success("Presentation generated successfully!")
st.markdown(get_pdf_download_link(pdf_path), unsafe_allow_html=True)
else:
st.error("Failed to generate presentation.")
if __name__ == "__main__":
main() |