CHUNYU0505 commited on
Commit
132ef2d
·
verified ·
1 Parent(s): 000034c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -31
app.py CHANGED
@@ -10,8 +10,6 @@ from langchain_huggingface import HuggingFaceEmbeddings, HuggingFaceEndpoint
10
  from docx import Document as DocxDocument
11
  import gradio as gr
12
  from langchain_community.vectorstores import FAISS
13
- import textwrap
14
-
15
 
16
  # -------------------------------
17
  # 2. 環境變數與資料路徑
@@ -83,50 +81,40 @@ def get_hf_rate_limit():
83
  except Exception:
84
  return "無法取得 API 速率資訊"
85
 
86
-
87
  # -------------------------------
88
- # 6. 生成文章(進度條 + 美化換行)
89
  # -------------------------------
90
- def generate_article_with_progress_bar(query, segments=5):
91
  docx_file = "/tmp/generated_article.docx"
92
  doc = DocxDocument()
93
  doc.add_heading(query, level=1)
94
 
95
  all_text = []
96
  prompt = f"請依據下列主題生成段落:{query}\n\n每段約150-200字。"
97
- rate_info = get_hf_rate_limit()
98
-
99
- # 初始化
100
- yield 0, gr.Textbox.update(value=f"{rate_info}\n\n開始生成文章...\n"), None
101
 
102
  for i in range(int(segments)):
103
  try:
104
  result = qa_chain({"query": prompt})
105
  paragraph = result.get("result", "").strip()
106
  if not paragraph:
107
- paragraph = "(本段生成失敗,請稍後再試。)"
108
  except Exception as e:
109
  paragraph = f"(本段生成失敗:{e})"
110
 
111
- # 美化換行,每行約 60 字
112
- wrapped_paragraph = "\n".join(textwrap.wrap(paragraph, width=60))
113
- all_text.append(wrapped_paragraph)
114
- doc.add_paragraph(paragraph) # DOCX 保留原文,不換行
115
  prompt = f"請接續上一段生成下一段:\n{paragraph}\n\n下一段:"
116
 
117
- # 更新進度
118
- progress = int((i + 1) / int(segments) * 100)
119
- current_text = "\n\n".join(all_text)
120
- yield progress, gr.Textbox.update(value=f"{rate_info}\n\n{current_text}\n\n正在生成第 {i+1} 段 / {segments} ..."), None
121
 
122
- # 保存 DOCX
123
  doc.save(docx_file)
124
- full_text = "\n\n".join(all_text)
125
- yield 100, gr.Textbox.update(value=f"{rate_info}\n\n{full_text}"), docx_file
126
 
127
 
128
  # -------------------------------
129
- # 7. Gradio 介面(進度條 + 文字 + 文件)
130
  # -------------------------------
131
  with gr.Blocks() as demo:
132
  gr.Markdown("# 佛教經論 RAG 系統 (HF API)")
@@ -134,21 +122,15 @@ with gr.Blocks() as demo:
134
 
135
  query_input = gr.Textbox(lines=2, placeholder="請輸入文章主題", label="文章主題")
136
  segments_input = gr.Slider(minimum=1, maximum=10, step=1, value=5, label="段落數")
137
- progress_bar = gr.Progress()
138
  output_text = gr.Textbox(label="生成文章 + API 剩餘次數")
139
  output_file = gr.File(label="下載 DOCX")
140
 
141
  btn = gr.Button("生成文章")
142
- btn.click(
143
- generate_article_with_progress_bar,
144
- [query_input, segments_input],
145
- [progress_bar, output_text, output_file]
146
- )
147
 
148
  # -------------------------------
149
- # 8. 啟動 Gradio
150
  # -------------------------------
151
  if __name__ == "__main__":
152
  demo.launch()
153
-
154
-
 
10
  from docx import Document as DocxDocument
11
  import gradio as gr
12
  from langchain_community.vectorstores import FAISS
 
 
13
 
14
  # -------------------------------
15
  # 2. 環境變數與資料路徑
 
81
  except Exception:
82
  return "無法取得 API 速率資訊"
83
 
 
84
  # -------------------------------
85
+ # 6. 生成文章(可即時顯示進度)
86
  # -------------------------------
87
+ def generate_article_progress(query, segments=5):
88
  docx_file = "/tmp/generated_article.docx"
89
  doc = DocxDocument()
90
  doc.add_heading(query, level=1)
91
 
92
  all_text = []
93
  prompt = f"請依據下列主題生成段落:{query}\n\n每段約150-200字。"
 
 
 
 
94
 
95
  for i in range(int(segments)):
96
  try:
97
  result = qa_chain({"query": prompt})
98
  paragraph = result.get("result", "").strip()
99
  if not paragraph:
100
+ paragraph = "(本段生成失敗,請嘗試減少段落或改用較小模型。)"
101
  except Exception as e:
102
  paragraph = f"(本段生成失敗:{e})"
103
 
104
+ all_text.append(paragraph)
105
+ doc.add_paragraph(paragraph)
 
 
106
  prompt = f"請接續上一段生成下一段:\n{paragraph}\n\n下一段:"
107
 
108
+ # yield 即時更新 Textbox
109
+ yield "\n\n".join(all_text), None
 
 
110
 
 
111
  doc.save(docx_file)
112
+ rate_info = get_hf_rate_limit()
113
+ yield f"{rate_info}\n\n" + "\n\n".join(all_text), docx_file
114
 
115
 
116
  # -------------------------------
117
+ # 7. Gradio 介面(支援進度更新)
118
  # -------------------------------
119
  with gr.Blocks() as demo:
120
  gr.Markdown("# 佛教經論 RAG 系統 (HF API)")
 
122
 
123
  query_input = gr.Textbox(lines=2, placeholder="請輸入文章主題", label="文章主題")
124
  segments_input = gr.Slider(minimum=1, maximum=10, step=1, value=5, label="段落數")
 
125
  output_text = gr.Textbox(label="生成文章 + API 剩餘次數")
126
  output_file = gr.File(label="下載 DOCX")
127
 
128
  btn = gr.Button("生成文章")
129
+ btn.click(generate_article_progress, [query_input, segments_input], [output_text, output_file])
130
+
 
 
 
131
 
132
  # -------------------------------
133
+ # 8. 啟動 Gradio(Hugging Face Space 適用)
134
  # -------------------------------
135
  if __name__ == "__main__":
136
  demo.launch()