Building Agentic Document Intelligence Pipelines: Creating Scientific Figures with AutoFigure

Building Agentic Document Intelligence Pipelines: Creating Scientific Figures with AutoFigure


heading(“4. Creating a custom reference figure”)
reference_dir = OUTPUT_ROOT / “01_custom_references”
reference_dir.mkdir(parents=True, exist_ok=True)
reference_path = reference_dir / “reference_architecture_style.png”
W, H = 1333, 750
img = Image.new(“RGB”, (W, H), “white”)
draw = ImageDraw.Draw(img)
try:
title_font = ImageFont.truetype(“DejaVuSans-Bold.ttf”, 36)
box_font = ImageFont.truetype(“DejaVuSans-Bold.ttf”, 24)
small_font = ImageFont.truetype(“DejaVuSans.ttf”, 18)
except Exception:
title_font = None
box_font = None
small_font = None
draw.text(
(W // 2, 55),
“Reference Layout: Modular Scientific Pipeline”,
anchor=”mm”,
fill=”black”,
font=title_font,
)
boxes = [
(90, 215, 290, 120, “Input”, “documents”),
(365, 215, 290, 120, “Planner”, “route by task”),
(640, 215, 290, 120, “Experts”, “summary / table / vision”),
(915, 215, 290, 120, “Verifier”, “grounded output”),
]
for i, (x, y, bw, bh, title, subtitle) in enumerate(boxes):
draw.rounded_rectangle(
[x, y, x + bw, y + bh],
radius=22,
fill=(245, 245, 245),
outline=(20, 20, 20),
width=3,
)
draw.text(
(x + bw / 2, y + 45),
title,
anchor=”mm”,
fill=”black”,
font=box_font,
)
draw.text(
(x + bw / 2, y + 82),
subtitle,
anchor=”mm”,
fill=(70, 70, 70),
font=small_font,
)
if i < len(boxes) – 1:
ax = x + bw + 20
ay = y + bh / 2
bx = boxes[i + 1][0] – 20
by = ay
draw.line([ax, ay, bx, by], fill=”black”, width=5)
draw.polygon(
[(bx, by), (bx – 18, by – 10), (bx – 18, by + 10)],
fill=”black”,
)
draw.rounded_rectangle(
[180, 500, 1150, 585],
radius=24,
fill=(252, 252, 252),
outline=(80, 80, 80),
width=2,
)
draw.text(
(665, 542),
“Design cue: aligned modules, sparse labels, strong flow direction, clean academic styling”,
anchor=”mm”,
fill=(40, 40, 40),
font=small_font,
)
img.save(reference_path)
print(f”Custom reference saved: {reference_path}”)
display_file_if_possible(reference_path, “Custom reference figure”)
heading(“5. Configuring API-backed AutoFigure”)
API_KEY = collect_api_key(PROVIDER)
if not API_KEY:
print(“No API key provided. Cloud generation sections will be skipped.”)
else:
print(f”Provider: {PROVIDER}”)
print(f”Generation model: {GENERATION_MODEL}”)
print(“API key received. The key is not printed.”)
config = None
agent = None
if API_KEY:
config = Config(
generation_api_key=API_KEY,
generation_provider=PROVIDER,
generation_model=GENERATION_MODEL,
methodology_api_key=API_KEY,
methodology_provider=PROVIDER,
methodology_model=GENERATION_MODEL,
enhancement_api_key=API_KEY if RUN_IMAGE_ENHANCEMENT else None,
enhancement_provider=PROVIDER,
enhancement_model=os.environ.get(
“AUTOFIGURE_ENHANCEMENT_MODEL”,
“google/gemini-3.1-flash-image-preview”
if PROVIDER == “openrouter”
else “gemini-3.1-flash-image-preview”,
),
max_iterations=MAX_ITERATIONS,
quality_threshold=QUALITY_THRESHOLD,
output_dir=str(OUTPUT_ROOT / “02_text_to_figure”),
custom_references=[str(reference_path)],
art_style=ART_STYLE,
)
validation_errors = config.validate()
print(f”Config validation errors: {validation_errors if validation_errors else ‘none’}”)
print(f”References found by config: {len(config.get_references())}”)
agent = AutoFigureAgent(config)
heading(“6. Prompt template preview”)
prompt_preview = get_initial_prompt_template(
topic=”paper”,
content=FIGURE_DESCRIPTION[:2500],
output_format=”svg”,
)
print(prompt_preview[:2500])
print(“\n… prompt preview truncated …”)
if API_KEY and RUN_TEXT_TO_FIGURE:
heading(“7. Running text-to-figure generation”)
text_output_dir = OUTPUT_ROOT / “02_text_to_figure”
text_output_dir.mkdir(parents=True, exist_ok=True)
text_result = agent.generate(
description=FIGURE_DESCRIPTION,
max_iterations=MAX_ITERATIONS,
quality_threshold=QUALITY_THRESHOLD,
output_format=TEXT_OUTPUT_FORMAT,
enable_enhancement=RUN_IMAGE_ENHANCEMENT,
art_style=ART_STYLE,
enhancement_input_type=”code2prompt”,
enhancement_count=1,
custom_references=[str(reference_path)],
output_dir=str(text_output_dir),
topic=”paper”,
)
summarize_generation_result(text_result, “Text-to-Figure Result”)
else:
print(“Skipping text-to-figure generation.”)



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *

Pin It on Pinterest