| 32 | |
| 33 | |
| 34 | def parse_args(): |
| 35 | parser = argparse.ArgumentParser( |
| 36 | description="Paper2PPT frontend editable CLI", |
| 37 | formatter_class=argparse.RawDescriptionHelpFormatter, |
| 38 | epilog=""" |
| 39 | Examples: |
| 40 | python script/run_paper2ppt_frontend_cli.py --input paper.pdf --page-count 12 |
| 41 | python script/run_paper2ppt_frontend_cli.py --input long_paper.pdf --page-count 50 --use-long-paper |
| 42 | python script/run_paper2ppt_frontend_cli.py --input "Multi-agent systems" --input-type TOPIC --page-count 8 |
| 43 | """, |
| 44 | ) |
| 45 | parser.add_argument("--input", required=True, help="Input PDF path, PPTX path, topic, or text") |
| 46 | parser.add_argument( |
| 47 | "--input-type", |
| 48 | choices=["PDF", "PPTX", "TEXT", "TOPIC"], |
| 49 | help="Input type (auto-detect if omitted)", |
| 50 | ) |
| 51 | parser.add_argument("--api-url", help="LLM API URL (default: from env / managed config)") |
| 52 | parser.add_argument("--api-key", help="LLM API key (default: from env / managed config)") |
| 53 | parser.add_argument("--credential-scope", default="paper2ppt", help="Managed credential scope") |
| 54 | parser.add_argument("--email", default="cli_frontend_test@paper2any.local", help="Logical user/email for result path") |
| 55 | parser.add_argument("--outline-model", default=settings.PAPER2PPT_OUTLINE_MODEL, help="Outline model") |
| 56 | parser.add_argument("--frontend-model", default=settings.PAPER2PPT_CONTENT_MODEL, help="Frontend editable model") |
| 57 | parser.add_argument("--image-model", default=settings.PAPER2PPT_IMAGE_GEN_MODEL, help="Image model for include-images mode") |
| 58 | parser.add_argument("--language", default="zh", choices=["zh", "en"], help="Output language") |
| 59 | parser.add_argument("--style", default="", help="Style prompt") |
| 60 | parser.add_argument("--page-count", type=int, default=8, help="Target page count") |
| 61 | parser.add_argument("--use-long-paper", action="store_true", help="Force long-paper outline workflow") |
| 62 | parser.add_argument("--include-images", action="store_true", help="Generate/reuse supporting images for editable slides") |
| 63 | parser.add_argument("--image-mode", choices=["none", "paper", "generated", "hybrid"], default="", help="Image source mode for editable slides") |
| 64 | parser.add_argument("--image-style", default="academic_illustration", help="Image style prompt") |
| 65 | parser.add_argument("--export-pptx", action="store_true", help="Also export editable PPTX using the frontend PptxGenJS exporter") |
| 66 | parser.add_argument("--asset-base-url", default="http://127.0.0.1:8000", help="Base URL for /outputs assets during PPTX export") |
| 67 | parser.add_argument("--output-dir", help="Output directory (default: outputs/cli/paper2ppt_frontend/{timestamp})") |
| 68 | return parser.parse_args() |
| 69 | |
| 70 | |
| 71 | def detect_input_type(input_str: str) -> str: |