CHUNYU0505 commited on
Commit
80fe36a
·
verified ·
1 Parent(s): a6c8097

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -13
app.py CHANGED
@@ -82,10 +82,9 @@ def get_hf_rate_limit():
82
  return "無法取得 API 速率資訊"
83
 
84
  # -------------------------------
85
- # 6. 生成文章(加入進度顯示)
86
  # -------------------------------
87
- def generate_article_with_progress(query, segments=5):
88
- import time
89
  docx_file = "/tmp/generated_article.docx"
90
  doc = DocxDocument()
91
  doc.add_heading(query, level=1)
@@ -94,9 +93,9 @@ def generate_article_with_progress(query, segments=5):
94
  prompt = f"請依據下列主題生成段落:{query}\n\n每段約150-200字。"
95
  rate_info = get_hf_rate_limit()
96
 
97
- # 初始化回傳
98
- yield gr.Textbox.update(value=f"{rate_info}\n\n開始生成文章...\n")
99
-
100
  for i in range(int(segments)):
101
  try:
102
  result = qa_chain({"query": prompt})
@@ -105,22 +104,23 @@ def generate_article_with_progress(query, segments=5):
105
  paragraph = "(本段生成失敗,請稍後再試。)"
106
  except Exception as e:
107
  paragraph = f"(本段生成失敗:{e})"
108
-
109
  all_text.append(paragraph)
110
  doc.add_paragraph(paragraph)
111
  prompt = f"請接續上一段生成下一段:\n{paragraph}\n\n下一段:"
112
 
113
- # 更新進度文字
 
114
  current_text = "\n\n".join(all_text)
115
- yield gr.Textbox.update(value=f"{rate_info}\n\n{current_text}\n\n正在生成第 {i+1} 段 / {segments} ...")
116
-
117
  # 保存 DOCX
118
  doc.save(docx_file)
119
  full_text = "\n\n".join(all_text)
120
- yield gr.Textbox.update(value=f"{rate_info}\n\n{full_text}"), docx_file
121
 
122
  # -------------------------------
123
- # 7. Gradio 介面(更新按鈕綁定 generator)
124
  # -------------------------------
125
  with gr.Blocks() as demo:
126
  gr.Markdown("# 佛教經論 RAG 系統 (HF API)")
@@ -128,11 +128,16 @@ with gr.Blocks() as demo:
128
 
129
  query_input = gr.Textbox(lines=2, placeholder="請輸入文章主題", label="文章主題")
130
  segments_input = gr.Slider(minimum=1, maximum=10, step=1, value=5, label="段落數")
 
131
  output_text = gr.Textbox(label="生成文章 + API 剩餘次數")
132
  output_file = gr.File(label="下載 DOCX")
133
 
134
  btn = gr.Button("生成文章")
135
- btn.click(generate_article_with_progress, [query_input, segments_input], [output_text, output_file])
 
 
 
 
136
 
137
  # -------------------------------
138
  # 8. 啟動 Gradio
@@ -140,3 +145,4 @@ with gr.Blocks() as demo:
140
  if __name__ == "__main__":
141
  demo.launch()
142
 
 
 
82
  return "無法取得 API 速率資訊"
83
 
84
  # -------------------------------
85
+ # 6. 生成文章(進度條 + 文字更新)
86
  # -------------------------------
87
+ def generate_article_with_progress_bar(query, segments=5):
 
88
  docx_file = "/tmp/generated_article.docx"
89
  doc = DocxDocument()
90
  doc.add_heading(query, level=1)
 
93
  prompt = f"請依據下列主題生成段落:{query}\n\n每段約150-200字。"
94
  rate_info = get_hf_rate_limit()
95
 
96
+ # 初始化
97
+ yield 0, gr.Textbox.update(value=f"{rate_info}\n\n開始生成文章...\n"), None
98
+
99
  for i in range(int(segments)):
100
  try:
101
  result = qa_chain({"query": prompt})
 
104
  paragraph = "(本段生成失敗,請稍後再試。)"
105
  except Exception as e:
106
  paragraph = f"(本段生成失敗:{e})"
107
+
108
  all_text.append(paragraph)
109
  doc.add_paragraph(paragraph)
110
  prompt = f"請接續上一段生成下一段:\n{paragraph}\n\n下一段:"
111
 
112
+ # 更新進度
113
+ progress = int((i + 1) / int(segments) * 100)
114
  current_text = "\n\n".join(all_text)
115
+ yield progress, gr.Textbox.update(value=f"{rate_info}\n\n{current_text}\n\n正在生成第 {i+1} 段 / {segments} ..."), None
116
+
117
  # 保存 DOCX
118
  doc.save(docx_file)
119
  full_text = "\n\n".join(all_text)
120
+ yield 100, gr.Textbox.update(value=f"{rate_info}\n\n{full_text}"), docx_file
121
 
122
  # -------------------------------
123
+ # 7. Gradio 介面(進度條 + 文字 + 文件)
124
  # -------------------------------
125
  with gr.Blocks() as demo:
126
  gr.Markdown("# 佛教經論 RAG 系統 (HF API)")
 
128
 
129
  query_input = gr.Textbox(lines=2, placeholder="請輸入文章主題", label="文章主題")
130
  segments_input = gr.Slider(minimum=1, maximum=10, step=1, value=5, label="段落數")
131
+ progress_bar = gr.Progress()
132
  output_text = gr.Textbox(label="生成文章 + API 剩餘次數")
133
  output_file = gr.File(label="下載 DOCX")
134
 
135
  btn = gr.Button("生成文章")
136
+ btn.click(
137
+ generate_article_with_progress_bar,
138
+ [query_input, segments_input],
139
+ [progress_bar, output_text, output_file]
140
+ )
141
 
142
  # -------------------------------
143
  # 8. 啟動 Gradio
 
145
  if __name__ == "__main__":
146
  demo.launch()
147
 
148
+