Presentation-Assistant / presentation_assistant /presentation_assistant.py
Hyeonseo's picture
update: revise korean to english prompt
f2262cd
raw history blame
No virus
5.78 kB
import os
import PyPDF2
from pptx import Presentation
import openai
import subprocess
from io import BytesIO
import sys
sys.path.append("/home/user/app")
# Function to generate text2ppt input prompt
def generate_text2ppt_input_prompt(input_type, input_value, input_pages):
header = """
Assume you are a designer creating a PPT using markdown syntax, and write a PPT of %s pages.
+++ Summarize the content or link below in markdown language, adhering to the rules in ===, and refer to the slide examples in ~~~.
+++
""" % input_pages
summary_value = ""
if input_type == "Link":
summary_value += input_value
summary_value += "\n"
elif input_type == "Text":
summary_value += input_value
summary_value += "\n"
elif input_type == "PDF":
with open(input_value, 'rb') as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
num_pages = len(pdf_reader.pages)
# Convert the content of each page to a string.
text = ""
for page_num in range(num_pages):
page = pdf_reader.pages[page_num]
text += page.extract_text()
summary_value += text
summary_value += "\n"
else:
print("ERROR: Invalid input")
rule_value = """
===
- Write factually only about the content or link provided.
- Always use --- as a slide divider.
- Design and arrange the slides diversely with appropriate shapes, images(![Image](Image link), https://unsplash.com/ko/images/stock/non-copyrighted for actual use), tables(|-|), quotes(>), emphasis(bold, ``), emojis(https://kr.piliapp.com/twitter-symbols/), icons (https://kr.piliapp.com/symbol/#popular).
- Use emojis only once in every two pages, and use various other designs.
- When using images and tables, specify the size considering the page size so that all the text content appears.
- Make Slide 1 the title, for a total of %s pages.
- Write the content of the PPT richly in markdown.
- Don't explain slide by slide, just write the code.
- Don't write using the content of the example, just refer to the format.
~~~
<!-- Slide 0. Slide Topic -->
# Slide Title
![Image link](https://huggingface.co/datasets/huggingface/brand-assets/resolve/main/hf-logo-with-title.png)
- This is πŸ€—**TEXT2PPT service PA!** using ChatGPT.
- Converts `link`,`text`, `PDF` input or upload into PPT.
""" % input_pages
return header + summary_value + rule_value
# Function to execute text2ppt
def text2ppt(token_key, input_prompt, input_theme):
openai.api_key = token_key
messages = [
{"role": "system", "content": "You are a kind helpful PPT designer."},
]
message = input_prompt
if message:
messages.append(
{"role": "user", "content": message},
)
chat = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0301", messages=messages
)
reply = chat.choices[0].message.content
messages.append({"role": "assistant", "content": reply})
md_text = reply[4:] if reply[:3] == "---" else reply
md_text_list = md_text.split('\n')
f = open("text2ppt_input.md", 'w')
for i in range(0, len(md_text_list)):
data = md_text_list[i] + "\n"
f.write(data)
f.close()
if input_theme == 'default':
subprocess.run(["/home/user/app/pandoc-2.14.2/bin/pandoc", "/home/user/app/text2ppt_input.md", "-t", "pptx", "-o", "/home/user/app/text2ppt_output.pptx"], capture_output=True)
else:
ppt_theme = "--reference-doc=/home/user/app/template/"+input_theme+".pptx"
subprocess.run(["/home/user/app/pandoc-2.14.2/bin/pandoc", "/home/user/app/text2ppt_input.md", "-t", "pptx", ppt_theme, "-o", "/home/user/app/text2ppt_output.pptx"], capture_output=True)
def ppt2script(token_key, input_file, input_type):
openai.api_key = token_key
if input_type=="PDF":
with open(input_file, 'rb') as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
num_pages = len(pdf_reader.pages)
# Convert the content of each page to a string.
text = ""
for page_num in range(num_pages):
page = pdf_reader.pages[page_num]
text += "[PAGE_NUM " + str(page_num + 1) + "]"
text += page.extract_text()
else:
prs = Presentation(input_file)
text = ""
page_num = 0
for slide in prs.slides:
text += "[PAGE_NUM " + str(page_num + 1) + "]"
page_num += 1
for shape in slide.shapes:
if not shape.has_text_frame:
continue
for paragraph in shape.text_frame.paragraphs:
for run in paragraph.runs:
text += run.text
header = """
You are an assistant helping with PPT presentations.
~~~Follow the rules below and write a presentation script for the PPT content below.
~~~
- When [PAGE_NUM 1], where 1 is the page number, write a presentation script for each page number.
- Write only in text without using markdown language.
- Add additional explanations or examples to the PPT content.
---
"""
input_prompt = header + text
messages = [
{"role": "system", "content": "You are a kind helpful PPT Assistant."},
]
message = input_prompt
if message:
messages.append(
{"role": "user", "content": message},
)
chat = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0301", messages=messages
)
reply = chat.choices[0].message.content
messages.append({"role": "assistant", "content": reply})
return reply