Yoyo2004 commited on
Commit
7fc598d
·
verified ·
1 Parent(s): 1708a78

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -20
app.py CHANGED
@@ -4,14 +4,13 @@ import gradio as gr
4
  from gradio_client import Client
5
 
6
  # ==========================================
7
- # 配置区域
8
  # ==========================================
9
- # 请确保这里的 Space ID 是你部署后端的真实 ID (格式: Username/SpaceName)
10
  PRIVATE_SPACE_ID = "Yoyo2004/Longstory-backend"
11
  HF_TOKEN = os.environ.get("HF_TOKEN")
12
 
13
  # ==========================================
14
- # 1. CSS 样式设计 (科技与人文融合风格)
15
  # ==========================================
16
  custom_css = """
17
  @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&family=Noto+Serif+SC:wght@400;700&family=JetBrains+Mono:wght@400&family=Inter:wght@400;600&display=swap');
@@ -186,7 +185,7 @@ body, .gradio-container {
186
  """
187
 
188
  # ==========================================
189
- # 2. 渲染辅助函数 (Python)
190
  # ==========================================
191
  def render_book_page(story_data, page_index):
192
  """
@@ -237,7 +236,7 @@ def render_book_page(story_data, page_index):
237
  return html
238
 
239
  # ==========================================
240
- # 3. 后端连接逻辑 (Gradio Client)
241
  # ==========================================
242
  def bridge_to_backend(premise):
243
  if not premise.strip():
@@ -283,10 +282,9 @@ def bridge_to_backend(premise):
283
  yield error_msg, None, None, None, [], render_book_page([], 0)
284
 
285
  # ==========================================
286
- # 4. 前端 UI 布局 (Blocks)
287
  # ==========================================
288
  with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo", neutral_hue="slate"), css=custom_css, title="LongStory Agent") as demo:
289
-
290
  # --- 状态管理 ---
291
  story_state = gr.State([])
292
  page_state = gr.State(0)
@@ -306,7 +304,7 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo", neutral_hue="slate"),
306
  with gr.Row(elem_classes=["main-container"]):
307
 
308
  # === 左侧:控制中心 ===
309
- with gr.Column(scale=3, elem_classes=["control-panel-col"]):
310
  with gr.Column(elem_classes=["control-panel"]):
311
 
312
  # 1. 标题与输入区
@@ -320,15 +318,14 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo", neutral_hue="slate"),
320
  premise_input = gr.Textbox(
321
  label="Premise",
322
  show_label=False,
323
- placeholder="在此输入你的故事创意,越详细越好...\n例如:赛博朋克背景下,一个因旧型号义肢而被歧视的侦探...",
324
  lines=5,
325
  elem_classes=["input-box"]
326
  )
327
 
328
  # 2. 灵感卡片 (Examples)
329
- gr.HTML('<div class="examples-container"><div class="examples-label">⚡ Quick Inspirations</div></div>')
330
 
331
- # 定义 Examples
332
  example_prompts = [
333
  ["高中时互相看不顺眼的死对头,十年后在公司并购案谈判桌上重逢,一个是冷血收购方,一个是绝境求生的CEO。"],
334
  ["天生'废灵根'的宗门弃徒,在被逐出师门当晚,意外捡到一个能听见万物心声的黑色小鼎。"],
@@ -343,17 +340,15 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo", neutral_hue="slate"),
343
  examples=example_prompts,
344
  inputs=premise_input,
345
  label=None
346
- # 注意:移除了这里的 elem_classes 参数
347
  )
348
- # --- 修复结束 ---
349
-
350
  # 3. 启动按钮
351
  submit_btn = gr.Button(
352
  "✨ 开始生成 (GENERATE)",
353
  elem_classes=["generate-btn"]
354
  )
355
 
356
- # 4. 终端日志窗口 (伪装成 IDE 终端)
357
  gr.HTML("""
358
  <div class="terminal-wrapper">
359
  <div class="terminal-header">
@@ -373,16 +368,16 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo", neutral_hue="slate"),
373
  )
374
  gr.HTML("</div>") # Close terminal-wrapper
375
 
376
- # === 右侧:内容展示区 ===
377
- with gr.Column(scale=7):
378
  with gr.Tabs(elem_classes=["tabs-container"]):
379
 
380
  # Tab 1: 电子书
381
  with gr.TabItem("📖 正文阅读", id="tab-story"):
382
  story_display = gr.HTML(label="Book View")
383
  with gr.Row(elem_classes=["nav-row"]):
384
- prev_btn = gr.Button("← Previous Chapter", elem_classes=["nav-btn"])
385
- next_btn = gr.Button("Next Chapter →", elem_classes=["nav-btn"])
386
 
387
  # Tab 2: 大纲
388
  with gr.TabItem("🗺️ 故事大纲", id="tab-outline"):
@@ -425,7 +420,6 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo", neutral_hue="slate"),
425
  new_page = min(len(story_data) - 1, current_page + 1)
426
  return new_page, render_book_page(story_data, new_page)
427
 
428
- # C. 绑定翻页
429
  prev_btn.click(fn=go_prev, inputs=[story_state, page_state], outputs=[page_state, story_display])
430
  next_btn.click(fn=go_next, inputs=[story_state, page_state], outputs=[page_state, story_display])
431
 
 
4
  from gradio_client import Client
5
 
6
  # ==========================================
7
+ # 0. 配置区域
8
  # ==========================================
 
9
  PRIVATE_SPACE_ID = "Yoyo2004/Longstory-backend"
10
  HF_TOKEN = os.environ.get("HF_TOKEN")
11
 
12
  # ==========================================
13
+ # 1. CSS
14
  # ==========================================
15
  custom_css = """
16
  @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&family=Noto+Serif+SC:wght@400;700&family=JetBrains+Mono:wght@400&family=Inter:wght@400;600&display=swap');
 
185
  """
186
 
187
  # ==========================================
188
+ # 2. 渲染辅助函数
189
  # ==========================================
190
  def render_book_page(story_data, page_index):
191
  """
 
236
  return html
237
 
238
  # ==========================================
239
+ # 3. 后端连接
240
  # ==========================================
241
  def bridge_to_backend(premise):
242
  if not premise.strip():
 
282
  yield error_msg, None, None, None, [], render_book_page([], 0)
283
 
284
  # ==========================================
285
+ # 4. 前端 UI 布局
286
  # ==========================================
287
  with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo", neutral_hue="slate"), css=custom_css, title="LongStory Agent") as demo:
 
288
  # --- 状态管理 ---
289
  story_state = gr.State([])
290
  page_state = gr.State(0)
 
304
  with gr.Row(elem_classes=["main-container"]):
305
 
306
  # === 左侧:控制中心 ===
307
+ with gr.Column(scale=4, elem_classes=["control-panel-col"]):
308
  with gr.Column(elem_classes=["control-panel"]):
309
 
310
  # 1. 标题与输入区
 
318
  premise_input = gr.Textbox(
319
  label="Premise",
320
  show_label=False,
321
+ placeholder="在此输入你的故事创意...\n例如:赛博朋克背景下,一个因旧型号义肢而被歧视的侦探...",
322
  lines=5,
323
  elem_classes=["input-box"]
324
  )
325
 
326
  # 2. 灵感卡片 (Examples)
327
+ gr.HTML('<div class="examples-container"><div class="examples-label">⚡ 快速开始 (Quick Inspirations)</div></div>')
328
 
 
329
  example_prompts = [
330
  ["高中时互相看不顺眼的死对头,十年后在公司并购案谈判桌上重逢,一个是冷血收购方,一个是绝境求生的CEO。"],
331
  ["天生'废灵根'的宗门弃徒,在被逐出师门当晚,意外捡到一个能听见万物心声的黑色小鼎。"],
 
340
  examples=example_prompts,
341
  inputs=premise_input,
342
  label=None
 
343
  )
344
+
 
345
  # 3. 启动按钮
346
  submit_btn = gr.Button(
347
  "✨ 开始生成 (GENERATE)",
348
  elem_classes=["generate-btn"]
349
  )
350
 
351
+ # 4. 终端日志
352
  gr.HTML("""
353
  <div class="terminal-wrapper">
354
  <div class="terminal-header">
 
368
  )
369
  gr.HTML("</div>") # Close terminal-wrapper
370
 
371
+ # === 右侧:内容展示 ===
372
+ with gr.Column(scale=8):
373
  with gr.Tabs(elem_classes=["tabs-container"]):
374
 
375
  # Tab 1: 电子书
376
  with gr.TabItem("📖 正文阅读", id="tab-story"):
377
  story_display = gr.HTML(label="Book View")
378
  with gr.Row(elem_classes=["nav-row"]):
379
+ prev_btn = gr.Button("← 上一章 (Previous Chapter)", elem_classes=["nav-btn"])
380
+ next_btn = gr.Button("下一章 (Next Chapter) →", elem_classes=["nav-btn"])
381
 
382
  # Tab 2: 大纲
383
  with gr.TabItem("🗺️ 故事大纲", id="tab-outline"):
 
420
  new_page = min(len(story_data) - 1, current_page + 1)
421
  return new_page, render_book_page(story_data, new_page)
422
 
 
423
  prev_btn.click(fn=go_prev, inputs=[story_state, page_state], outputs=[page_state, story_display])
424
  next_btn.click(fn=go_next, inputs=[story_state, page_state], outputs=[page_state, story_display])
425