kshitij10000 commited on
Commit
7b07c62
Β·
1 Parent(s): 55b9c31

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +100 -120
app.py CHANGED
@@ -3,132 +3,112 @@ import json
3
  import base64
4
  from pptx import Presentation
5
  import streamlit as st
6
- import os
7
 
8
  # Suppress all warnings
9
  import warnings
10
  warnings.filterwarnings("ignore")
11
 
12
  # Set your OpenAI API key
13
- openai.api_key = "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"
14
-
15
- # Streamlit app
16
- st.title("🌟 PowerPoint Presentation Generator 🌟")
17
- st.markdown("<h1 style='text-align: center; color: white;'>Welcome to the Future of Presentation Creation!</h1>", unsafe_allow_html=True)
18
-
19
- # Introduction section with improved styling and details
20
- st.markdown(
21
- """
22
- <div class="st-eb">
23
- <p style="color: black;">Creating presentations has never been this easy and exciting! With our AI-powered model, you can quickly generate presentation content, while the design remains your creative canvas. 🎨</p>
24
- <p style="color: black;">Here's what we do:</p>
25
- <ul>
26
- <li style="color: black;"><strong>You provide the presentation topic</strong>, and we add captivating content.</li>
27
- <li style="color: black;">Our AI ensures <strong>each slide has the perfect balance of information</strong>.</li>
28
- <li style="color: black;">Stay tuned for <strong>exciting future features</strong> that will enhance your presentation experience. πŸš€</li>
29
- </ul>
30
- </div>
31
- """,
32
- unsafe_allow_html=True,
33
- )
34
-
35
- # Presentation Limits section with improved styling and details
36
- st.markdown("<h2>Presentation Limits</h2>", unsafe_allow_html=True)
37
- st.markdown(
38
- """
39
- <div class="st-eb">
40
- <p style="color: black;">✨ You can create a minimum of 3 and a maximum of 7 slides per presentation.</p>
41
- <p style="color: black;">✨ Each slide should have between 3 and 7 points of content.</p>
42
- <p style="color: black;">✨ Minimum 3 points, maximum 7 points. ⚠️</p>
43
- </div>
44
- """,
45
- unsafe_allow_html=True,
46
- )
47
-
48
- # Important Notice with improved styling
49
  st.warning("⚠️ Important Notice: Occasional download issues? Try re-downloading or reach out to us for assistance. We apologize for any inconvenience.")
50
 
51
- # Input for presentation topic with improved styling
52
- presentation_title = st.text_input("πŸ“ Enter your presentation topic:")
53
- no_of_pages = st.number_input("πŸ“Š Number of slides you want (3-8)", min_value=3, max_value=8, value=3)
54
- least_c = st.number_input("πŸ“Š Minimum points in each slide (3-7)", min_value=3, max_value=7, value=3)
55
- max_c = st.number_input("πŸ“Š Maximum points in each slide (4-7)", min_value=4, max_value=7, value=7)
56
-
57
- # Check if any input values are out of range
58
- if no_of_pages > 8 or no_of_pages < 3 or least_c > 7 or least_c < 3 or max_c > 7 or max_c < 4:
59
- st.warning("Invalid input values. Please ensure that your inputs are within the specified limits.")
60
- else:
61
- if st.button("Generate Presentation"):
62
- # Check if the user has entered a topic
63
- if presentation_title:
64
- question = (
65
- f"generate a {no_of_pages} slide presentation for the topic {presentation_title}."
66
- f" Each slide should have {{header}}, {{content}}, should have at least {least_c} points and max {max_c} points in content. Return as JSON"
67
- )
68
-
69
- query_json = {
70
- "input_text": question,
71
- "output_format": "json",
72
- "json_structure": {"slides": "{{presentation_slides}}"},
73
- }
74
-
75
- # Send the query to OpenAI
76
- completion = openai.ChatCompletion.create(
77
- model="gpt-3.5-turbo",
78
- messages=[{"role": "user", "content": json.dumps(query_json)}],
79
- )
 
 
 
 
80
 
81
- try:
82
- response = json.loads(completion.choices[0].message.content)
83
-
84
- slide_data = response["slides"]
85
-
86
- prs = Presentation()
87
-
88
- from pptx.util import Pt
89
- from pptx.enum.text import PP_ALIGN
90
-
91
- for slide in slide_data:
92
- slide_layout = prs.slide_layouts[1]
93
- new_slide = prs.slides.add_slide(slide_layout)
94
-
95
- if slide["header"]:
96
- title = new_slide.shapes.title
97
- title.text = slide["header"]
98
-
99
- if slide["content"]:
100
- shapes = new_slide.shapes
101
- body_shape = shapes.placeholders[1]
102
- tf = body_shape.text_frame
103
-
104
- content_text = "\n".join(slide["content"])
105
-
106
- p = tf.add_paragraph()
107
- p.text = content_text
108
-
109
- p.space_after = Pt(14)
110
- p.alignment = PP_ALIGN.LEFT
111
-
112
- # Explicitly save the file with the .pptx extension
113
- presentation_filename = f"{presentation_title}.pptx"
114
- prs.save(presentation_filename)
115
-
116
- # Provide a direct download link to the saved file
117
- if os.path.exists(presentation_filename):
118
- with open(presentation_filename, "rb") as file:
119
- file_bytes = file.read()
120
- st.download_button(
121
- label=f"πŸ“₯ Download {presentation_title}",
122
- data=file_bytes,
123
- file_name=presentation_filename,
124
- key=f"download_{presentation_filename}",
125
- )
126
-
127
- os.remove(presentation_filename)
128
- else:
129
- st.error("Error: Presentation file not found.")
130
-
131
- except json.JSONDecodeError as e:
132
- st.error("Error parsing JSON response from OpenAI.")
133
- else:
134
- st.warning("Please enter a presentation topic.")
 
3
  import base64
4
  from pptx import Presentation
5
  import streamlit as st
 
6
 
7
  # Suppress all warnings
8
  import warnings
9
  warnings.filterwarnings("ignore")
10
 
11
  # Set your OpenAI API key
12
+ openai.api_key = "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"
13
+
14
+ # Streamlit app title and header
15
+ st.title("PowerPoint Presentation Generator")
16
+ st.header("Welcome to the Future of Presentation Creation!")
17
+
18
+ # Introduction section
19
+ st.write("Creating presentations has never been this easy and exciting! With our AI-powered model, you can quickly generate presentation content, while the design remains your creative canvas. 🎨")
20
+ st.write("Here's what we do:")
21
+ st.write("- **You provide the presentation topic**, and we add captivating content.")
22
+ st.write("- Our AI ensures **each slide has the perfect balance of information**.")
23
+ st.write("- Stay tuned for **exciting future features** that will enhance your presentation experience. πŸš€")
24
+
25
+ # Presentation Limits section
26
+ st.header("Presentation Limits")
27
+ st.write("✨ You can create a minimum of 3 and a maximum of 7 slides per presentation.")
28
+ st.write("✨ Each slide should have between 3 and 7 points of content.")
29
+ st.write("✨ Minimum 3 points, maximum 7 points. ⚠️")
30
+
31
+ # Important Notice
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  st.warning("⚠️ Important Notice: Occasional download issues? Try re-downloading or reach out to us for assistance. We apologize for any inconvenience.")
33
 
34
+ # Contact and Feedback section
35
+ st.header("Contact and Feedback")
36
+ st.write("Have questions, ideas, or cool suggestions for future enhancements? We're all ears!")
37
+ st.write("Your feedback is invaluable in making your experience the best it can be! 🌟")
38
+
39
+ # Input for presentation topic
40
+ presentation_title = st.text_input("Enter your presentation topic:")
41
+ no_of_pages = st.number_input("Number of slides you want", min_value=1, value=1) # Accept and display float values
42
+ least_c = st.number_input("Minimum points in each slide", min_value=1, value=1) # Accept and display float values
43
+ max_c = st.number_input("Maximum points in each slide", min_value=1, value=1) # Accept and display float values
44
+
45
+ if st.button("Generate Presentation"):
46
+ # Check if the user has entered a topic
47
+ if presentation_title:
48
+ question = (
49
+ f"generate a {no_of_pages} slide presentation for the topic {presentation_title}."
50
+ f" Each slide should have {{header}}, {{content}}, should have at least {least_c} points and max {max_c} points in content. Return as JSON"
51
+ )
52
+
53
+ query_json = {
54
+ "input_text": question,
55
+ "output_format": "json",
56
+ "json_structure": {"slides": "{{presentation_slides}}"},
57
+ }
58
+
59
+ # Send the query to OpenAI
60
+ completion = openai.ChatCompletion.create(
61
+ model="gpt-3.5-turbo",
62
+ messages=[{"role": "user", "content": json.dumps(query_json)}],
63
+ )
64
+
65
+ try:
66
+ response = json.loads(completion.choices[0].message.content)
67
 
68
+ slide_data = response["slides"]
69
+
70
+ prs = Presentation()
71
+
72
+ from pptx.util import Pt # Import the Pt class from pptx.util
73
+ from pptx.enum.text import PP_ALIGN # Import text alignment options
74
+
75
+ # Iterate through slide data and populate the presentation
76
+ for slide in slide_data:
77
+ slide_layout = prs.slide_layouts[1]
78
+ new_slide = prs.slides.add_slide(slide_layout)
79
+
80
+ if slide["header"]:
81
+ title = new_slide.shapes.title
82
+ title.text = slide["header"]
83
+
84
+ if slide["content"]:
85
+ shapes = new_slide.shapes
86
+ body_shape = shapes.placeholders[1]
87
+ tf = body_shape.text_frame
88
+
89
+ # Join the list of content into a single string with line breaks
90
+ content_text = "\n".join(slide["content"])
91
+
92
+ p = tf.add_paragraph()
93
+ p.text = content_text
94
+
95
+ # Set the spacing between lines using Pt (point size)
96
+ p.space_after = Pt(14) # Adjust the spacing between lines
97
+
98
+ # Set text direction to horizontal (left-to-right)
99
+ p.alignment = PP_ALIGN.LEFT
100
+
101
+ # Save the presentation in PPTX format with the topic name as the file name
102
+ presentation_filename = f"{presentation_title}.pptx"
103
+ prs.save(presentation_filename)
104
+
105
+ # Provide a direct download link
106
+ with open(presentation_filename, "rb") as file:
107
+ st.markdown(
108
+ f"### [Download {presentation_title}]"
109
+ f"(data:application/octet-stream;base64,{base64.b64encode(file.read()).decode()})"
110
+ )
111
+ except json.JSONDecodeError as e:
112
+ st.error("Error parsing JSON response from OpenAI.")
113
+ else:
114
+ st.warning("Please enter a presentation topic.")