Spaces:
Sleeping
Sleeping
add: faq update
Browse files
app.py
CHANGED
@@ -57,27 +57,29 @@ def log_to_google_sheet(question, answer, contexts, scores):
|
|
57 |
except Exception as e:
|
58 |
print("寫入 Google Sheet 失敗:", str(e))
|
59 |
|
60 |
-
def
|
61 |
-
|
|
|
|
|
62 |
try:
|
63 |
url = os.environ.get("ANNOUNCEMENT_URL")
|
64 |
if not url:
|
65 |
-
print("Warning:
|
66 |
-
return
|
67 |
|
68 |
df = pd.read_csv(url)
|
69 |
|
70 |
-
if "Announcement"
|
71 |
-
|
72 |
-
|
|
|
|
|
73 |
|
74 |
-
|
75 |
-
content = content.replace("\\n", "<br>").replace("\n", "<br>")
|
76 |
-
return content if content else DEFAULT_MESSAGE
|
77 |
|
78 |
except Exception as e:
|
79 |
-
print(
|
80 |
-
return
|
81 |
|
82 |
|
83 |
def validate_openai_key(api_key):
|
@@ -288,7 +290,6 @@ with gr.Blocks() as demo:
|
|
288 |
### 📢 系統公告
|
289 |
""")
|
290 |
announcement_display = gr.Markdown()
|
291 |
-
demo.load(fn=fetch_announcement_from_sheet, inputs=[], outputs=announcement_display)
|
292 |
|
293 |
file_input = gr.File(label="上傳 Evaluation_Dataset.csv")
|
294 |
api_key_input = gr.Textbox(label="OpenAI API Key", type="password")
|
@@ -297,15 +298,17 @@ with gr.Blocks() as demo:
|
|
297 |
result_output = gr.Dataframe(label="評估結果")
|
298 |
download_link = gr.File(label="下載評估結果(CSV)")
|
299 |
|
300 |
-
# 常見QA
|
301 |
gr.Markdown("""
|
302 |
---
|
303 |
-
### ❓ 常見問題 & 解答
|
304 |
-
|
305 |
-
**Q: 什麼是「指令集」?**
|
306 |
-
A: 「指令集」是我們用來描述老師在課堂上所設計的各種學習活動操作流程。在與教學系統互動時,老師通常會透過一系列結構化的指令來引導學生完成任務,因此我們將這些可重複使用的操作流程統稱為「指令集」。
|
307 |
-
指令集也如同RESTful API一樣,我們有先盡力的與老師們溝通他們的需求,不過這些需求都只能視為一個草案,最終仍需要仰賴得標業者與老師們收斂,並且確定最終的版本來加以實作。
|
308 |
""")
|
|
|
|
|
|
|
|
|
|
|
|
|
309 |
|
310 |
def wrapped_fn(file, key):
|
311 |
return RAG_evaluation(file, key)
|
|
|
57 |
except Exception as e:
|
58 |
print("寫入 Google Sheet 失敗:", str(e))
|
59 |
|
60 |
+
def fetch_sheet_content():
|
61 |
+
DEFAULT_ANNOUNCEMENT = "尚無公告"
|
62 |
+
DEFAULT_FAQ = "尚無常見問題"
|
63 |
+
|
64 |
try:
|
65 |
url = os.environ.get("ANNOUNCEMENT_URL")
|
66 |
if not url:
|
67 |
+
print("Warning: 未設定 ANNOUNCEMENT_URL")
|
68 |
+
return DEFAULT_ANNOUNCEMENT, DEFAULT_FAQ
|
69 |
|
70 |
df = pd.read_csv(url)
|
71 |
|
72 |
+
announcement = df["Announcement"].iloc[0].strip() if "Announcement" in df.columns else DEFAULT_ANNOUNCEMENT
|
73 |
+
faq = df["FAQ"].iloc[0].strip() if "FAQ" in df.columns else DEFAULT_FAQ
|
74 |
+
|
75 |
+
announcement = announcement.replace("\\n", "<br>").replace("\n", "<br>")
|
76 |
+
faq = faq.replace("\\n", "<br>").replace("\n", "<br>")
|
77 |
|
78 |
+
return announcement or DEFAULT_ANNOUNCEMENT, faq or DEFAULT_FAQ
|
|
|
|
|
79 |
|
80 |
except Exception as e:
|
81 |
+
print("載入 Sheet 錯誤:", e)
|
82 |
+
return DEFAULT_ANNOUNCEMENT, DEFAULT_FAQ
|
83 |
|
84 |
|
85 |
def validate_openai_key(api_key):
|
|
|
290 |
### 📢 系統公告
|
291 |
""")
|
292 |
announcement_display = gr.Markdown()
|
|
|
293 |
|
294 |
file_input = gr.File(label="上傳 Evaluation_Dataset.csv")
|
295 |
api_key_input = gr.Textbox(label="OpenAI API Key", type="password")
|
|
|
298 |
result_output = gr.Dataframe(label="評估結果")
|
299 |
download_link = gr.File(label="下載評估結果(CSV)")
|
300 |
|
301 |
+
# 常見QA
|
302 |
gr.Markdown("""
|
303 |
---
|
304 |
+
### ❓ 常見問題 & 解答
|
|
|
|
|
|
|
|
|
305 |
""")
|
306 |
+
faq_display = gr.Markdown()
|
307 |
+
|
308 |
+
# 載入公告與 FAQ
|
309 |
+
def load_sheet():
|
310 |
+
return fetch_sheet_content()
|
311 |
+
demo.load(fn=load_sheet, inputs=[], outputs=[announcement_display, faq_display])
|
312 |
|
313 |
def wrapped_fn(file, key):
|
314 |
return RAG_evaluation(file, key)
|