PaperShow / app.py
ZaynZhu
add api_key args
f6173f6
raw
history blame
2.45 kB
import gradio as gr
import subprocess, shutil, os, zipfile
from pathlib import Path
ROOT = Path(__file__).resolve().parent
OUTPUT_DIR = ROOT / "output"
ZIP_PATH = ROOT / "output.zip"
def run_pipeline(model_name_t, model_name_v, result_dir, paper_latex_root, arxiv_url, openai_key, gemini_key):
# 清理旧输出
if OUTPUT_DIR.exists():
shutil.rmtree(OUTPUT_DIR)
if ZIP_PATH.exists():
ZIP_PATH.unlink()
# 构造命令(传递两个 key)
cmd = [
"python", "pipeline.py",
"--model_name_t", model_name_t,
"--model_name_v", model_name_v,
"--result_dir", result_dir,
"--paper_latex_root", paper_latex_root,
"--arxiv_url", arxiv_url,
"--openai_key", openai_key,
"--gemini_key", gemini_key
]
try:
result = subprocess.run(cmd, capture_output=True, text=True, timeout=1800)
logs = result.stdout + "\n" + result.stderr
except subprocess.TimeoutExpired:
return "❌ Pipeline timed out (30 min limit).", None
except Exception as e:
return f"❌ Error: {e}", None
if not OUTPUT_DIR.exists():
return "❌ No output generated.", None
# 压缩 output 文件夹
with zipfile.ZipFile(ZIP_PATH, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(OUTPUT_DIR):
for file in files:
file_path = Path(root) / file
zipf.write(file_path, arcname=file_path.relative_to(OUTPUT_DIR))
return logs, ZIP_PATH
# ===================== Gradio UI =====================
iface = gr.Interface(
fn=run_pipeline,
inputs=[
gr.Textbox(label="Model Name (Text)", value="gpt-4.1"),
gr.Textbox(label="Model Name (Vision)", value="gpt-4.1"),
gr.Textbox(label="Result Dir", value="output"),
gr.Textbox(label="Paper LaTeX Root", value="input/latex_proj"),
gr.Textbox(label="ArXiv URL", value="https://arxiv.org/abs/2505.21497"),
gr.Textbox(label="OpenAI API Key", placeholder="sk-...", type="password"),
gr.Textbox(label="Gemini API Key", placeholder="AIza...", type="password"),
],
outputs=[
gr.Textbox(label="Logs"),
gr.File(label="Download Output (.zip)")
],
title="PaperShow Pipeline",
description="输入 arXiv 链接和参数,自动生成 slides + poster,结果打包下载。"
)
if __name__ == "__main__":
iface.launch()