| 123 | |
| 124 | |
| 125 | def slide_score(slide_folder: str): |
| 126 | eval_file = pjoin(slide_folder, "evals.json") |
| 127 | evals = defaultdict(dict) |
| 128 | if pexists(eval_file): |
| 129 | evals |= json.load(open(eval_file)) |
| 130 | text_scorer = Template(open("prompts/ppteval_content.txt", "r").read()) |
| 131 | vision_scorer = Template(open("prompts/ppteval_style.txt", "r").read()) |
| 132 | style_descriptor = open("prompts/ppteval_describe_style.txt", "r").read() |
| 133 | content_descriptor = open("prompts/ppteval_describe_content.txt", "r").read() |
| 134 | for slide_image in glob(pjoin(slide_folder, "slide_*.jpg")): |
| 135 | slide_descr = slide_image.replace(".jpg", ".json") |
| 136 | if not os.path.exists(slide_descr): |
| 137 | style_descr = llms.vision_model(style_descriptor, slide_image) |
| 138 | content_descr = llms.vision_model(content_descriptor, slide_image) |
| 139 | json.dump( |
| 140 | {"content": content_descr, "style": style_descr}, |
| 141 | open(slide_descr, "w"), |
| 142 | indent=4, |
| 143 | ) |
| 144 | else: |
| 145 | descr = json.load(open(slide_descr)) |
| 146 | style_descr = descr["style"] |
| 147 | content_descr = descr["content"] |
| 148 | if slide_image not in evals["vision"]: |
| 149 | evals["vision"][slide_image] = llms.language_model( |
| 150 | vision_scorer.render(descr=style_descr), return_json=True |
| 151 | ) |
| 152 | if slide_image not in evals["content"]: |
| 153 | evals["content"][slide_image] = llms.language_model( |
| 154 | text_scorer.render(descr=content_descr), return_json=True |
| 155 | ) |
| 156 | |
| 157 | |
| 158 | def pres_score(prs_source: str): |