barunsaha commited on
Commit
4f6ea2c
2 Parent(s): 434c389 437a6f6

Merge branch 'main' of github.com:barun-saha/slide-deck-ai

Browse files
Files changed (4) hide show
  1. app.py +0 -1
  2. clarifai_grpc_helper.py +0 -71
  3. pptx_helper.py +6 -18
  4. requirements.txt +0 -3
app.py CHANGED
@@ -260,7 +260,6 @@ def generate_slide_deck(json_str: str, pptx_template: str, progress_bar) -> List
260
  logging.info('Creating PPTX file...')
261
  all_headers = pptx_helper.generate_powerpoint_presentation(
262
  json_str,
263
- as_yaml=False,
264
  slides_template=pptx_template,
265
  output_file_path=path
266
  )
 
260
  logging.info('Creating PPTX file...')
261
  all_headers = pptx_helper.generate_powerpoint_presentation(
262
  json_str,
 
263
  slides_template=pptx_template,
264
  output_file_path=path
265
  )
clarifai_grpc_helper.py DELETED
@@ -1,71 +0,0 @@
1
- from clarifai_grpc.channel.clarifai_channel import ClarifaiChannel
2
- from clarifai_grpc.grpc.api import resources_pb2, service_pb2, service_pb2_grpc
3
- from clarifai_grpc.grpc.api.status import status_code_pb2
4
-
5
- from global_config import GlobalConfig
6
-
7
-
8
- CHANNEL = ClarifaiChannel.get_grpc_channel()
9
- STUB = service_pb2_grpc.V2Stub(CHANNEL)
10
-
11
- METADATA = (
12
- ('authorization', 'Key ' + GlobalConfig.CLARIFAI_PAT),
13
- )
14
-
15
- USER_DATA_OBJECT = resources_pb2.UserAppIDSet(
16
- user_id=GlobalConfig.CLARIFAI_USER_ID,
17
- app_id=GlobalConfig.CLARIFAI_APP_ID
18
- )
19
-
20
- RAW_TEXT = '''You are a helpful, intelligent chatbot. Create the slides for a presentation on the given topic. Include main headings for each slide, detailed bullet points for each slide. Add relevant content to each slide. Do not output any blank line.
21
-
22
- Topic:
23
- Talk about AI, covering what it is and how it works. Add its pros, cons, and future prospects. Also, cover its job prospects.
24
- '''
25
-
26
-
27
- def get_text_from_llm(prompt: str) -> str:
28
- post_model_outputs_response = STUB.PostModelOutputs(
29
- service_pb2.PostModelOutputsRequest(
30
- user_app_id=USER_DATA_OBJECT, # The userDataObject is created in the overview and is required when using a PAT
31
- model_id=GlobalConfig.CLARIFAI_MODEL_ID,
32
- # version_id=MODEL_VERSION_ID, # This is optional. Defaults to the latest model version
33
- inputs=[
34
- resources_pb2.Input(
35
- data=resources_pb2.Data(
36
- text=resources_pb2.Text(
37
- raw=prompt
38
- )
39
- )
40
- )
41
- ]
42
- ),
43
- metadata=METADATA
44
- )
45
-
46
- if post_model_outputs_response.status.code != status_code_pb2.SUCCESS:
47
- print(post_model_outputs_response.status)
48
- raise Exception(f"Post model outputs failed, status: {post_model_outputs_response.status.description}")
49
-
50
- # Since we have one input, one output will exist here
51
- output = post_model_outputs_response.outputs[0]
52
-
53
- # print("Completion:\n")
54
- # print(output.data.text.raw)
55
-
56
- return output.data.text.raw
57
-
58
-
59
- if __name__ == '__main__':
60
- topic = ('Talk about AI, covering what it is and how it works.'
61
- ' Add its pros, cons, and future prospects.'
62
- ' Also, cover its job prospects.'
63
- )
64
- print(topic)
65
-
66
- with open(GlobalConfig.SLIDES_TEMPLATE_FILE, 'r') as in_file:
67
- prompt_txt = in_file.read()
68
- prompt_txt = prompt_txt.replace('{topic}', topic)
69
- response_txt = get_text_from_llm(prompt_txt)
70
-
71
- print('Output:\n', response_txt)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
pptx_helper.py CHANGED
@@ -6,7 +6,6 @@ from typing import List, Tuple
6
 
7
  import json5
8
  import pptx
9
- import yaml
10
 
11
  from global_config import GlobalConfig
12
 
@@ -51,31 +50,20 @@ def remove_slide_number_from_heading(header: str) -> str:
51
 
52
  def generate_powerpoint_presentation(
53
  structured_data: str,
54
- as_yaml: bool,
55
  slides_template: str,
56
  output_file_path: pathlib.Path
57
  ) -> List:
58
  """
59
- Create and save a PowerPoint presentation file containing the contents in JSON or YAML format.
60
 
61
- :param structured_data: The presentation contents as "JSON" (may contain trailing commas) or
62
- YAML
63
- :param as_yaml: True if the input data is in YAML format; False if it is in JSON format
64
  :param slides_template: The PPTX template to use
65
  :param output_file_path: The path of the PPTX file to save as
66
  :return A list of presentation title and slides headers
67
  """
68
 
69
- if as_yaml:
70
- # Avoid YAML mode: nested bullets can lead to incorrect YAML generation
71
- try:
72
- parsed_data = yaml.safe_load(structured_data)
73
- except yaml.parser.ParserError as ype:
74
- logging.error('*** YAML parse error: %s', str(ype))
75
- parsed_data = {'title': '', 'slides': []}
76
- else:
77
- # The structured "JSON" might contain trailing commas, so using json5
78
- parsed_data = json5.loads(structured_data)
79
 
80
  logging.debug(
81
  "*** Using PPTX template: %s",
@@ -134,7 +122,8 @@ def generate_powerpoint_presentation(
134
 
135
  def get_flat_list_of_contents(items: list, level: int) -> List[Tuple]:
136
  """
137
- Flatten a (hierarchical) list of bullet points to a single list containing each item and its level.
 
138
 
139
  :param items: A bullet point (string or list)
140
  :param level: The current level of hierarchy
@@ -248,7 +237,6 @@ if __name__ == '__main__':
248
 
249
  generate_powerpoint_presentation(
250
  json5.loads(json_data),
251
- as_yaml=False,
252
  output_file_path=path,
253
  slides_template='Blank'
254
  )
 
6
 
7
  import json5
8
  import pptx
 
9
 
10
  from global_config import GlobalConfig
11
 
 
50
 
51
  def generate_powerpoint_presentation(
52
  structured_data: str,
 
53
  slides_template: str,
54
  output_file_path: pathlib.Path
55
  ) -> List:
56
  """
57
+ Create and save a PowerPoint presentation file containing the content in JSON format.
58
 
59
+ :param structured_data: The presentation contents as "JSON" (may contain trailing commas)
 
 
60
  :param slides_template: The PPTX template to use
61
  :param output_file_path: The path of the PPTX file to save as
62
  :return A list of presentation title and slides headers
63
  """
64
 
65
+ # The structured "JSON" might contain trailing commas, so using json5
66
+ parsed_data = json5.loads(structured_data)
 
 
 
 
 
 
 
 
67
 
68
  logging.debug(
69
  "*** Using PPTX template: %s",
 
122
 
123
  def get_flat_list_of_contents(items: list, level: int) -> List[Tuple]:
124
  """
125
+ Flatten a (hierarchical) list of bullet points to a single list containing each item and
126
+ its level.
127
 
128
  :param items: A bullet point (string or list)
129
  :param level: The current level of hierarchy
 
237
 
238
  generate_powerpoint_presentation(
239
  json5.loads(json_data),
 
240
  output_file_path=path,
241
  slides_template='Blank'
242
  )
requirements.txt CHANGED
@@ -2,11 +2,8 @@ python-dotenv[cli]~=1.0.0
2
  langchain~=0.1.13
3
  # huggingface_hub
4
  streamlit~=1.32.2
5
- clarifai==9.7.4
6
 
7
  python-pptx
8
  metaphor-python
9
  json5~=0.9.14
10
- PyYAML~=6.0.1
11
- # curlify
12
  requests~=2.31.0
 
2
  langchain~=0.1.13
3
  # huggingface_hub
4
  streamlit~=1.32.2
 
5
 
6
  python-pptx
7
  metaphor-python
8
  json5~=0.9.14
 
 
9
  requests~=2.31.0