Spaces:
Sleeping
Sleeping
File size: 3,880 Bytes
02a0872 8275bff 02a0872 8275bff 02a0872 8275bff 02a0872 8275bff 02a0872 8275bff 02a0872 8275bff 02a0872 8275bff 02a0872 8275bff 02a0872 d766487 02a0872 d766487 8275bff d766487 02a0872 d766487 02a0872 8275bff 02a0872 d766487 02a0872 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
import requests
import json
import gradio as gr
def calculate(course_input, course_profile, course_hour):
url = "https://rd-ai-knowledge-navigator.onrender.com/process"
headers = {
"Content-Type": "application/json"
}
data = {
"title": course_input,
"content": course_profile,
"hour": course_hour
}
try:
response = requests.post(url, json=data, headers=headers, timeout=50)
if response.status_code == 200:
try:
response_json = response.json()
success = response_json.get("success", False)
title = response_json.get("title", "未知課程")
top_competencies = response_json.get("top_competencies", [])
competencies = response_json.get("competencies", [])
if success:
competencies_list = [f"{item['item']} ({item['score']})" for item in competencies]
return (f"課程 '{title}' 職能匹配成功!", top_competencies, "\n".join(competencies_list))
else:
return "匹配失敗,請稍後再試", "無職能項目", "無職能項目"
except json.JSONDecodeError:
return "錯誤: 伺服器回應非 JSON 格式", "無職能項目", "無職能項目"
else:
return f"錯誤: 伺服器返回 HTTP {response.status_code}", "無職能項目", "無職能項目"
except requests.exceptions.Timeout:
return "錯誤: 伺服器回應超時", "無職能項目", "無職能項目"
except requests.exceptions.RequestException as e:
return f"請求失敗: {str(e)}", "無職能項目", "無職能項目"
# 驗證輸入欄位是否為空
def validate_input(course_input, course_profile, course_hour):
errors = []
if not course_input.strip():
errors.append("課程名稱為必填項目")
if not course_profile.strip():
errors.append("課程簡介為必填項目")
if not course_hour.strip():
errors.append("課程時數為必填項目")
if errors:
return "\n".join(errors), "", "" # 直接回傳錯誤訊息,阻止請求
return None # 表示輸入有效,允許繼續執行
def setup_gradio_interface():
with gr.Blocks() as demo:
with gr.Row():
course_input = gr.Textbox(label="課程名稱", placeholder="請輸入課程名稱")
course_hour = gr.Textbox(label="課程時數", placeholder="請輸入課程時數")
with gr.Row():
course_profile = gr.Textbox(label="課程簡介", placeholder="請輸入課程簡介")
with gr.Row():
submit_button = gr.Button("計算職能項目")
with gr.Row():
txt_response = gr.Textbox(label="計算狀態", placeholder="計算結果", interactive=False)
course_competencies = gr.Textbox(label="職能項目", placeholder="職能項目", interactive=False)
with gr.Row():
json_competencies = gr.Textbox(label="JSON內容", placeholder="職能項目", interactive=False)
# 先驗證輸入,再進行計算
def validate_and_calculate(course_input, course_profile, course_hour):
validation_result = validate_input(course_input, course_profile, course_hour)
if validation_result:
return validation_result # 若輸入無效,回傳錯誤訊息
return calculate(course_input, course_profile, course_hour) # 若有效則繼續計算
submit_button.click(
validate_and_calculate,
inputs=[course_input, course_profile, course_hour],
outputs=[txt_response, course_competencies, json_competencies]
)
return demo
# 運行 Gradio 介面
if __name__ == "__main__":
demo = setup_gradio_interface()
demo.launch()
|