|
|
|
|
|
from src.processor.message_processor import process_user_request |
|
|
from config import DESCRIPTION |
|
|
import gradio as gr |
|
|
|
|
|
QUICK_PROMPTS = [ |
|
|
"#news AI earthquake early warning [條列] depth:3", |
|
|
"#papers PLUM method for EEW [表格]", |
|
|
"#compare Gemini 1.5 Pro vs GPT-4.1 [簡報] creative!", |
|
|
"#earthquakes 6.0 2024-04-01 2024-04-07 [講義]", |
|
|
"#howto Run SearXNG on Debian [落地實作]", |
|
|
] |
|
|
|
|
|
with gr.Blocks( |
|
|
fill_height=True, |
|
|
fill_width=True, |
|
|
theme=gr.themes.Soft(), |
|
|
css=""" |
|
|
/* 確保行動版底部按鈕列不被遮到 */ |
|
|
@media (max-width: 640px){ |
|
|
.gradio-container .gr-chat-interface .gr-form{ padding-bottom: 72px; } |
|
|
} |
|
|
""" |
|
|
) as app: |
|
|
|
|
|
chat = gr.ChatInterface( |
|
|
fn=process_user_request, |
|
|
chatbot=gr.Chatbot( |
|
|
label="SearchGPT | Gemini 1.5", |
|
|
type="messages", |
|
|
show_copy_button=True, |
|
|
scale=1 |
|
|
), |
|
|
type="messages", |
|
|
submit_btn="Send", |
|
|
examples=[ |
|
|
["#news Open-source LLM trends [條列] depth:2"], |
|
|
["#papers P-wave picking with AI [表格]"], |
|
|
["#compare MiniCPM vs Phi-4 [簡報]"], |
|
|
["#timeline Taiwan EEW milestones [條列]"], |
|
|
["https://wikipedia.org/wiki/Artificial_intelligence Read and summarize that"], |
|
|
["https://huggingface.co/spaces?sort=trending What are the trending Spaces?"], |
|
|
], |
|
|
cache_examples=False, |
|
|
show_api=False, |
|
|
concurrency_limit=5, |
|
|
) |
|
|
|
|
|
|
|
|
with gr.Sidebar(): |
|
|
gr.HTML(DESCRIPTION) |
|
|
gr.Markdown("### ⚡ 一鍵範例") |
|
|
for i, p in enumerate(QUICK_PROMPTS, 1): |
|
|
gr.Button(f"示例 {i}", size="sm").click( |
|
|
fn=lambda x=p: x, inputs=None, outputs=chat.textbox |
|
|
) |
|
|
gr.Markdown("> 點示例 → 文字填入輸入框 → 按 **Send** 或 **Enter** 送出。") |
|
|
|
|
|
app.launch(server_name="0.0.0.0", pwa=True) |