Laramie2 commited on
Commit
0b481cc
·
verified ·
1 Parent(s): 0b7a4cb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -75
app.py CHANGED
@@ -236,7 +236,7 @@ custom_css = """
236
  background-color: #1e1e1e !important;
237
  color: #4AF626 !important;
238
  }
239
- /* 可选:进一步弱化状态框的边框感,使其更像文字标签 */
240
  .status-text textarea {
241
  background-color: transparent !important;
242
  border: none !important;
@@ -249,84 +249,82 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo"), css=custom_css) as de
249
  gr.Markdown("# 📑 PaperX / Mineru 智能解析平台")
250
  gr.Markdown("将学术 PDF 一键解析、DAG 结构化并生成多模态产物。")
251
 
252
- with gr.Row():
253
- # ================= 左侧:工作流控制区 =================
254
- with gr.Column(scale=4):
255
-
256
- # 1. 隐藏式全局配置
257
- with gr.Accordion("⚙️ 1. 全局 API 配置", open=False):
258
- with gr.Row():
259
- key_input = gr.Textbox(label="API Key", type="password", placeholder="sk-...", scale=1)
260
- api_base_url_input = gr.Textbox(label="Base URL (可选)", placeholder="https://api.example.com", scale=1)
261
- key_btn = gr.Button("💾 保存 API 配置")
262
-
263
- # 2. 核心上传与解析
264
- with gr.Group():
265
- gr.Markdown("### 📄 2. 文档解析")
266
- # 去掉了原来的“加载文件”按钮,改为拖拽自动上传
267
- pdf_input = gr.File(label="拖拽或点击上传 PDF", file_types=[".pdf"])
268
-
269
- # 让解析按钮独占一行,并放大尺寸,成为视觉焦点
270
- parse_btn = gr.Button("🚀 开始执行 Mineru & DAG 抽取", variant="primary", size="lg")
271
-
272
- # 弱化状态框视觉(去掉了 Label)
273
- parse_status = gr.Textbox(
274
- show_label=False,
275
- placeholder="等待上传文档...",
276
- lines=1,
277
- interactive=False,
278
- elem_classes="status-text"
279
- )
280
-
281
- # 3. 最终产物生成
282
- with gr.Group():
283
- gr.Markdown("### 🎯 3. 产物生成")
284
- gr.Markdown("基于 DAG 结构生成最终所需格式:")
285
-
286
- # 采用 2x2 网格布局,结构更紧凑平衡
287
- with gr.Row():
288
- gen_ppt_btn = gr.Button("📊 单独生成 PPT")
289
- gen_poster_btn = gr.Button("🖼️ 单独生成 Poster")
290
- with gr.Row():
291
- gen_pr_btn = gr.Button("📰 单独生成 PR 文章")
292
- gen_all_btn = gr.Button(" 一键生成全部 (ALL)", variant="primary")
293
-
294
- # ================= 右侧:状态与日志监控区 =================
295
- with gr.Column(scale=5):
296
- with gr.Tabs():
297
- # Tab 1: 结果与下载
298
- with gr.Tab("📦 生成结果 & 下载"):
299
- # 弱化状态框视觉
300
- gen_status = gr.Textbox(
301
- show_label=False,
302
- placeholder="当前暂无生成任务...",
303
- lines=4,
304
- interactive=False,
305
- elem_classes="status-text"
306
- )
307
- # 默认隐藏下载框 (visible=False),生成成功后再动态展示
308
- download_file = gr.File(label="📥 获取最压缩包", interactive=False, visible=False)
309
-
310
- # Tab 2: 实时终端
311
- with gr.Tab("📜 终端流 (Terminal)"):
312
- cmd_logs = gr.Textbox(
313
- label="Stdout / Stderr",
314
- placeholder="等待任务开始...",
315
- lines=22,
316
- interactive=False,
317
- elem_classes="log-box"
318
- )
319
-
320
- # Tab 3: 文件系统快照
321
- with gr.Tab("🔍 系统快照 (Debug)"):
322
- refresh_btn = gr.Button("🔄 刷新目录树")
323
- debug_view = gr.Textbox(label="Workspace Files", lines=20, interactive=False, value=get_debug_info())
324
 
325
  # ================= 逻辑绑定 =================
326
 
327
  key_btn.click(fn=save_api_settings, inputs=[key_input, api_base_url_input], outputs=[parse_status, debug_view])
328
 
329
- # 🎯 优化:绑定上传和清除事件,实现自动化
330
  pdf_input.upload(fn=save_pdf, inputs=pdf_input, outputs=[parse_status, debug_view])
331
  pdf_input.clear(fn=lambda: ("ℹ️ 已清空文件", get_debug_info()), outputs=[parse_status, debug_view])
332
 
@@ -335,7 +333,7 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo"), css=custom_css) as de
335
  outputs=[parse_status, debug_view, cmd_logs]
336
  )
337
 
338
- # 🎯 优化:增加包装函数,用于动态控制下载组件的显示与隐藏
339
  def trigger_gen(task):
340
  status, debug, logs, file_path = run_final_generation(task)
341
  # 如果 file_path 存在,显示下载组件并赋值;否则保持隐藏
 
236
  background-color: #1e1e1e !important;
237
  color: #4AF626 !important;
238
  }
239
+ /* 弱化状态框的边框感,使其更像文字标签 */
240
  .status-text textarea {
241
  background-color: transparent !important;
242
  border: none !important;
 
249
  gr.Markdown("# 📑 PaperX / Mineru 智能解析平台")
250
  gr.Markdown("将学术 PDF 一键解析、DAG 结构化并生成多模态产物。")
251
 
252
+ # 1. 隐藏式全局配置
253
+ with gr.Accordion("⚙️ 1. 全局 API 配置", open=False):
254
+ with gr.Row():
255
+ key_input = gr.Textbox(label="API Key", type="password", placeholder="sk-...", scale=1)
256
+ api_base_url_input = gr.Textbox(label="Base URL (可选)", placeholder="https://api.example.com", scale=1)
257
+ key_btn = gr.Button("💾 保存 API 配置")
258
+
259
+ # 2. 核心上传与解析
260
+ with gr.Group():
261
+ gr.Markdown("### 📄 2. 文档解析")
262
+ # 拖拽自动上传
263
+ pdf_input = gr.File(label="拖拽或点击上传 PDF", file_types=[".pdf"])
264
+
265
+ # 解析按钮独占一行,成为视觉焦点
266
+ parse_btn = gr.Button("🚀 开始执行 Mineru & DAG 抽取", variant="primary", size="lg")
267
+
268
+ # 弱化状态框视觉
269
+ parse_status = gr.Textbox(
270
+ show_label=False,
271
+ placeholder="等待上传文档...",
272
+ lines=1,
273
+ interactive=False,
274
+ elem_classes="status-text"
275
+ )
276
+
277
+ # 3. 最终产物生成
278
+ with gr.Group():
279
+ gr.Markdown("### 🎯 3. 产物生成")
280
+ gr.Markdown("基于 DAG 结构生成最终所需格式:")
281
+
282
+ # 层次化布局:上面三个单项,下面一个全部
283
+ with gr.Row():
284
+ gen_ppt_btn = gr.Button("📊 单独生成 PPT")
285
+ gen_poster_btn = gr.Button("🖼️ 单独生成 Poster")
286
+ gen_pr_btn = gr.Button("📰 单独生成 PR 文章")
287
+
288
+ gen_all_btn = gr.Button(" 一键生成全部 (ALL)", variant="primary")
289
+
290
+ # 4. 生成结果与下载 (从 Tabs 中独立出来,紧跟工作流)
291
+ with gr.Group():
292
+ gr.Markdown("### 📦 4. 生成结果 & 下载")
293
+ gen_status = gr.Textbox(
294
+ show_label=False,
295
+ placeholder="当前暂无生成任务...",
296
+ lines=2,
297
+ interactive=False,
298
+ elem_classes="status-text"
299
+ )
300
+ # 默认隐藏下载框,生成成功后再动态展示
301
+ download_file = gr.File(label="📥 获取最终压缩包", interactive=False, visible=False)
302
+
303
+ gr.HTML("<hr style='margin-top: 30px; margin-bottom: 30px;' />") # 添加一条视觉分割线
304
+
305
+ # 5. 开发者监控区 (置于最底部,方便后续精简 UI 时直接删除这部分)
306
+ gr.Markdown("### 🛠️ 开发者后台监控 (仅供调试)")
307
+ with gr.Tabs():
308
+ # Tab 1: 实时
309
+ with gr.Tab("📜 终端流 (Terminal)"):
310
+ cmd_logs = gr.Textbox(
311
+ label="Stdout / Stderr",
312
+ placeholder="等待任务开始...",
313
+ lines=15,
314
+ interactive=False,
315
+ elem_classes="log-box"
316
+ )
317
+
318
+ # Tab 2: 文件系统快照
319
+ with gr.Tab("🔍 系统快照 (Debug)"):
320
+ refresh_btn = gr.Button("🔄 刷新目录树")
321
+ debug_view = gr.Textbox(label="Workspace Files", lines=15, interactive=False, value=get_debug_info())
 
 
322
 
323
  # ================= 逻辑绑定 =================
324
 
325
  key_btn.click(fn=save_api_settings, inputs=[key_input, api_base_url_input], outputs=[parse_status, debug_view])
326
 
327
+ # 绑定上传和清除事件,实现自动化
328
  pdf_input.upload(fn=save_pdf, inputs=pdf_input, outputs=[parse_status, debug_view])
329
  pdf_input.clear(fn=lambda: ("ℹ️ 已清空文件", get_debug_info()), outputs=[parse_status, debug_view])
330
 
 
333
  outputs=[parse_status, debug_view, cmd_logs]
334
  )
335
 
336
+ # 动态控制下载组件的显示与隐藏
337
  def trigger_gen(task):
338
  status, debug, logs, file_path = run_final_generation(task)
339
  # 如果 file_path 存在,显示下载组件并赋值;否则保持隐藏