ASC8384 commited on
Commit
d32760a
·
1 Parent(s): 2a97c22
Files changed (2) hide show
  1. main.py +1 -1
  2. poster/poster.py +77 -21
main.py CHANGED
@@ -99,7 +99,7 @@ def generate_paper_poster(
99
  # with open(output.replace(".json", ".html"), "w") as f:
100
  # f.write(html)
101
  # take_screenshot(output, html)
102
-
103
  return poster, html
104
 
105
  except Exception as e:
 
99
  # with open(output.replace(".json", ".html"), "w") as f:
100
  # f.write(html)
101
  # take_screenshot(output, html)
102
+ print("海报生成成功!")
103
  return poster, html
104
 
105
  except Exception as e:
poster/poster.py CHANGED
@@ -395,30 +395,61 @@ def generate_html_v2(vendor: str, model: str, poster: BaseModel, figures: list[s
395
  min_proportion = float('inf')
396
  min_html = None
397
  min_html_with_figures = None
398
-
399
- while True:
400
- body = re.search(r"```html\n(.*?)\n```", output, re.DOTALL).group(1)
401
-
 
 
 
 
 
402
  html = HTML_TEMPLATE.format(style=style, body=body)
403
  html_with_figures = replace_figures_in_html(html, figures)
404
-
405
  poster_sizes = get_sizes("poster", html_with_figures)
406
  section_sizes = get_sizes("section", html_with_figures)
407
-
408
  proportion = calculate_blank_proportion(poster_sizes, section_sizes)
409
 
410
- print(f"当前比例: {proportion:.0%}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
  if proportion < min_proportion:
412
  min_proportion = proportion
413
- min_html = html
414
- min_html_with_figures = html_with_figures
 
 
 
415
 
 
416
  if proportion <= 0.1:
417
- print(
418
- f"Attempted {attempt} times, remaining {proportion:.0%} blank spaces."
419
- )
420
- return {"html": html, "html_with_figures": html_with_figures}
421
 
 
422
  attempt += 1
423
  if attempt > max_attempts:
424
  if min_proportion <= 0.2:
@@ -429,26 +460,51 @@ def generate_html_v2(vendor: str, model: str, poster: BaseModel, figures: list[s
429
  else:
430
  raise ValueError(f"Invalid blank spaces: {min_proportion:.0%}")
431
 
432
-
433
  react = [
434
  HumanMessage(
435
  content=f"""# Previous Body
436
- {body}
437
 
438
  # Previous Size of Columns in Poster
439
- {poster_sizes}
440
 
441
  # Previous Size of Columns in Section
442
- {section_sizes}
443
 
444
- Now there are {proportion:.0%} blank spaces. Please regenerate the content to create a more balanced poster layout.
445
  """
446
  ),
447
  ]
448
-
449
- output = layout_chain.invoke(
450
  {"style": style, "poster": poster, "react": react}
451
- ).content
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
452
 
453
 
454
  # def take_screenshot(output: str, html: str):
 
395
  min_proportion = float('inf')
396
  min_html = None
397
  min_html_with_figures = None
398
+ min_body = None
399
+ min_poster_sizes = None
400
+ min_section_sizes = None
401
+
402
+ def generate_single_html(prompt_input):
403
+ """单个HTML生成函数,用于多线程执行"""
404
+ result_output = layout_chain.invoke(prompt_input).content
405
+ body = re.search(r"```html\n(.*?)\n```", result_output, re.DOTALL).group(1)
406
+
407
  html = HTML_TEMPLATE.format(style=style, body=body)
408
  html_with_figures = replace_figures_in_html(html, figures)
409
+
410
  poster_sizes = get_sizes("poster", html_with_figures)
411
  section_sizes = get_sizes("section", html_with_figures)
412
+
413
  proportion = calculate_blank_proportion(poster_sizes, section_sizes)
414
 
415
+ return {
416
+ "body": body,
417
+ "html": html,
418
+ "html_with_figures": html_with_figures,
419
+ "poster_sizes": poster_sizes,
420
+ "section_sizes": section_sizes,
421
+ "proportion": proportion
422
+ }
423
+
424
+ # 初始生成两个HTML布局
425
+ prompt_inputs = [
426
+ {"style": style, "poster": poster},
427
+ {"style": style, "poster": poster}
428
+ ]
429
+
430
+ with ThreadPoolExecutor(max_workers=2) as executor:
431
+ initial_results = list(executor.map(generate_single_html, prompt_inputs))
432
+
433
+ # 检查初始生成的两个结果
434
+ for result in initial_results:
435
+ proportion = result["proportion"]
436
+ print(f"初始生成比例: {proportion:.0%}")
437
+
438
+ # 更新最佳结果
439
  if proportion < min_proportion:
440
  min_proportion = proportion
441
+ min_html = result["html"]
442
+ min_html_with_figures = result["html_with_figures"]
443
+ min_body = result["body"]
444
+ min_poster_sizes = result["poster_sizes"]
445
+ min_section_sizes = result["section_sizes"]
446
 
447
+ # 如果找到满足条件的结果,直接返回
448
  if proportion <= 0.1:
449
+ print(f"Initial generation successful, remaining {proportion:.0%} blank spaces.")
450
+ return {"html": result["html"], "html_with_figures": result["html_with_figures"]}
 
 
451
 
452
+ while True:
453
  attempt += 1
454
  if attempt > max_attempts:
455
  if min_proportion <= 0.2:
 
460
  else:
461
  raise ValueError(f"Invalid blank spaces: {min_proportion:.0%}")
462
 
463
+ # 基于最好的结果生成两个新的
464
  react = [
465
  HumanMessage(
466
  content=f"""# Previous Body
467
+ {min_body}
468
 
469
  # Previous Size of Columns in Poster
470
+ {min_poster_sizes}
471
 
472
  # Previous Size of Columns in Section
473
+ {min_section_sizes}
474
 
475
+ Now there are {min_proportion:.0%} blank spaces. Please regenerate the content to create a more balanced poster layout.
476
  """
477
  ),
478
  ]
479
+ prompt_inputs = [
480
+ {"style": style, "poster": poster, "react": react},
481
  {"style": style, "poster": poster, "react": react}
482
+ ]
483
+
484
+ # 使用多线程同时生成两个HTML
485
+ with ThreadPoolExecutor(max_workers=2) as executor:
486
+ results = list(executor.map(generate_single_html, prompt_inputs))
487
+
488
+ # 检查两个结果
489
+ for result in results:
490
+ proportion = result["proportion"]
491
+ print(f"当前比例: {proportion:.0%}")
492
+
493
+ # 更新最佳结果
494
+ if proportion < min_proportion:
495
+ min_proportion = proportion
496
+ min_html = result["html"]
497
+ min_html_with_figures = result["html_with_figures"]
498
+ min_body = result["body"]
499
+ min_poster_sizes = result["poster_sizes"]
500
+ min_section_sizes = result["section_sizes"]
501
+
502
+ # 如果找到满足条件的结果,直接返回
503
+ if proportion <= 0.1:
504
+ print(
505
+ f"Attempted {attempt} times, remaining {proportion:.0%} blank spaces."
506
+ )
507
+ return {"html": result["html"], "html_with_figures": result["html_with_figures"]}
508
 
509
 
510
  # def take_screenshot(output: str, html: str):