File size: 5,782 Bytes
4efe295
 
 
 
 
 
f2dd130
 
 
4efe295
f2262cd
4efe295
 
f2262cd
 
4efe295
 
 
 
 
f2262cd
4efe295
b6fe237
f2262cd
4efe295
 
 
 
 
 
 
f2262cd
4efe295
 
 
 
 
 
 
f2262cd
4efe295
 
 
f2262cd
 
 
 
 
 
 
 
 
4efe295
f2262cd
 
 
 
 
4efe295
 
 
 
 
f2262cd
4efe295
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
aa557a3
4efe295
68ace3a
aa557a3
4efe295
 
 
 
 
 
 
 
 
 
f2262cd
4efe295
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f2262cd
 
4efe295
f2262cd
 
 
4efe295
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f2262cd
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
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