Synergize Agents to generate a slide. Args: template (dict): The template data. slide_content (str): The slide content. code_executor (CodeExecutor): The code executor object. images_info (str): The image information. Returns
(
self,
template: dict,
slide_content: str,
code_executor: CodeExecutor,
images_info: str,
)
| 305 | roles: list[str] = ["editor", "coder"] |
| 306 | |
| 307 | def synergize( |
| 308 | self, |
| 309 | template: dict, |
| 310 | slide_content: str, |
| 311 | code_executor: CodeExecutor, |
| 312 | images_info: str, |
| 313 | ) -> SlidePage: |
| 314 | """ |
| 315 | Synergize Agents to generate a slide. |
| 316 | |
| 317 | Args: |
| 318 | template (dict): The template data. |
| 319 | slide_content (str): The slide content. |
| 320 | code_executor (CodeExecutor): The code executor object. |
| 321 | images_info (str): The image information. |
| 322 | |
| 323 | Returns: |
| 324 | SlidePage: The generated slide. |
| 325 | """ |
| 326 | content_schema = template["content_schema"] |
| 327 | old_data = self._prepare_schema(content_schema) |
| 328 | editor_output = self.staffs["editor"]( |
| 329 | schema=content_schema, |
| 330 | outline=self.simple_outline, |
| 331 | metadata=self.metadata, |
| 332 | text=slide_content, |
| 333 | images_info=images_info, |
| 334 | ) |
| 335 | command_list = self._generate_commands(editor_output, content_schema, old_data) |
| 336 | |
| 337 | edit_actions = self.staffs["coder"]( |
| 338 | api_docs=code_executor.get_apis_docs(API_TYPES.Agent.value), |
| 339 | edit_target=self.presentation.slides[template["template_id"] - 1].to_html(), |
| 340 | command_list="\n".join([str(i) for i in command_list]), |
| 341 | ) |
| 342 | for error_idx in range(self.retry_times): |
| 343 | edited_slide: SlidePage = deepcopy( |
| 344 | self.presentation.slides[template["template_id"] - 1] |
| 345 | ) |
| 346 | feedback = code_executor.execute_actions(edit_actions, edited_slide) |
| 347 | if feedback is None: |
| 348 | break |
| 349 | if error_idx == self.retry_times: |
| 350 | raise Exception( |
| 351 | f"Failed to generate slide, tried too many times at editing\ntraceback: {feedback[1]}" |
| 352 | ) |
| 353 | edit_actions = self.staffs["coder"].retry(*feedback, error_idx + 1) |
| 354 | self.empty_prs.build_slide(edited_slide) |
| 355 | return edited_slide |
| 356 | |
| 357 | def _prepare_schema(self, content_schema: dict): |
| 358 | """ |
nothing calls this directly
no test coverage detected