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"

❌ 單字 {word} 不在 {source} 單字庫中

", "檢查失敗" 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"

📖 {word} [{phonetic or '無'}]: {sentence} (來源: {src}{f' ({model})' if model else ''})

" if not sentence_records: result_display = f"

❌ 查無句子

" else: try: sentence = generate_sentence(word, model_name) result_display = f"

🤖 AI 生成: {sentence} (模型: {model_name})

" except Exception as e: result_display = f"

❌ AI 生成失敗:{str(e)}

" return result_display, "完成" with gr.Blocks() as demo: gr.Markdown("# 📖 VocabLine 單字例句查詢 & 生成平台") gr.Markdown("開發者:余彦志 (大宇 ian) | Email: dayuian@hotmail.com | [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()