File size: 2,360 Bytes
f6bff5d
13a1b41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2a9478d
 
13a1b41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2a9478d
f6bff5d
 
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
import gradio as gr
from vocab import get_sources, get_sentences_by_word, get_words_from_source
from ai_sentence import generate_sentence, MODEL_LIST

def fetch_sentence(word, source, use_ai, model_name):
    valid_words = get_words_from_source(source)
    if word not in valid_words:
        return f"<p style='color:red;'>❌ 單字 {word} 不在 {source} 單字庫中</p>", "檢查失敗"

    sentence_records = get_sentences_by_word(word)
    result_display = ""
    status_log = []

    if not use_ai:
        for record in sentence_records:
            _, phonetic, sentence, src, model = record
            result_display += f"<p>📖 {word} [{phonetic or '無'}]: {sentence} (來源: {src}{f' ({model})' if model else ''})</p>"
        if not sentence_records:
            result_display = f"<p style='color:red;'>❌ 查無句子</p>"
    else:
        try:
            sentence = generate_sentence(word, model_name)
            result_display = f"<p>🤖 AI 生成: {sentence} (模型: {model_name})</p>"
        except Exception as e:
            result_display = f"<p style='color:red;'>❌ AI 生成失敗:{str(e)}</p>"

    return result_display, "完成"

with gr.Blocks() as demo:
    gr.Markdown("# 📖 VocabLine 單字例句查詢 & 生成平台")
    gr.Markdown("開發者:余彦志 (大宇 ian) | Email: [email protected] | [GitHub](https://github.com/dayuian)")

    mode = gr.Radio(["查詢模式", "隨機抽單字模式"], value="查詢模式")

    with gr.Group(visible=True) as query_mode:
        source_dropdown_query = gr.Dropdown(choices=get_sources(), value="common3000", label="選擇單字庫")
        word_input = gr.Textbox(label="輸入單字")
        use_ai_checkbox = gr.Checkbox(label="使用 AI 生成句子")
        model_dropdown = gr.Dropdown(choices=MODEL_LIST, value=MODEL_LIST[0], label="選擇 AI 模型", visible=False)
        query_result = gr.HTML()
        query_status = gr.Textbox()
        query_button = gr.Button("查詢例句")

    def toggle_model(use_ai):
        return gr.update(visible=use_ai)

    use_ai_checkbox.change(toggle_model, inputs=use_ai_checkbox, outputs=model_dropdown)
    query_button.click(
        fetch_sentence,
        inputs=[word_input, source_dropdown_query, use_ai_checkbox, model_dropdown],
        outputs=[query_result, query_status]
    )

demo.launch()