| 340 | |
| 341 | |
| 342 | def bundle( |
| 343 | metadata: dict, |
| 344 | evidence_wrapper: dict, |
| 345 | figures_wrapper: dict, |
| 346 | assets_wrapper: dict, |
| 347 | source_manifest: dict | None = None, |
| 348 | figure_decisions_wrapper: dict | None = None, |
| 349 | ) -> dict: |
| 350 | evidence_pack = ( |
| 351 | evidence_wrapper.get("evidence_pack", {}) |
| 352 | if isinstance(evidence_wrapper.get("evidence_pack"), dict) |
| 353 | else {} |
| 354 | ) |
| 355 | figure_plan = ( |
| 356 | figures_wrapper.get("figure_plan", {}) |
| 357 | if isinstance(figures_wrapper.get("figure_plan"), dict) |
| 358 | else {} |
| 359 | ) |
| 360 | source_manifest = source_manifest or {} |
| 361 | figure_decisions_wrapper = figure_decisions_wrapper or {} |
| 362 | |
| 363 | return { |
| 364 | "status": "ok", |
| 365 | "script": "build_synthesis_bundle.py", |
| 366 | "paper_id": metadata.get("paper_id") or evidence_wrapper.get("paper_id", ""), |
| 367 | "title": metadata.get("title") or evidence_wrapper.get("title", ""), |
| 368 | "metadata": { |
| 369 | "title": metadata.get("title", ""), |
| 370 | "translated_title": metadata.get("translated_title", ""), |
| 371 | "authors": metadata.get("authors", []), |
| 372 | "affiliations": metadata.get("affiliations", []), |
| 373 | "year": metadata.get("year", ""), |
| 374 | "venue": metadata.get("venue", ""), |
| 375 | "doi": metadata.get("doi", ""), |
| 376 | "source_url": metadata.get("source_url", ""), |
| 377 | "abstract": metadata.get("abstract", ""), |
| 378 | "arxiv_id": metadata.get("arxiv_id", ""), |
| 379 | "zotero_key": metadata.get("zotero_key", ""), |
| 380 | "metadata_sources": metadata.get("metadata_sources", []), |
| 381 | "identity_confidence": metadata.get("identity_confidence", ""), |
| 382 | "identity_confidence_reasons": metadata.get("identity_confidence_reasons", []) or [], |
| 383 | }, |
| 384 | "evidence_quality": evidence_pack.get("evidence_quality", "unknown"), |
| 385 | "coverage": coverage_summary(evidence_pack, metadata, assets_wrapper, source_manifest), |
| 386 | "source_manifest": { |
| 387 | "paper_id": source_manifest.get("paper_id", ""), |
| 388 | "title": source_manifest.get("title", ""), |
| 389 | "source_kind": source_manifest.get("source_kind", ""), |
| 390 | "raw_sections_path": source_manifest.get("raw_sections_path", ""), |
| 391 | "full_text_md_path": source_manifest.get("full_text_md_path", ""), |
| 392 | "pdf": source_manifest.get("pdf", {}) or {}, |
| 393 | "coverage": source_manifest.get("coverage", {}) or {}, |
| 394 | }, |
| 395 | "source_index": source_index(source_manifest), |
| 396 | "references": {"candidates": sanitize_reference_candidates(evidence_pack)}, |
| 397 | "figure_plan": figure_plan, |
| 398 | "figure_table_manifest": figure_table_manifest( |
| 399 | figure_decisions_wrapper, |