Spaces:
Running
Running
from flask import Flask, request, jsonify | |
from vocab import get_words_from_source | |
from sentences import get_sentence, save_sentence | |
from ai_sentence import generate_sentence, MODEL_LIST | |
import random | |
app = Flask(__name__) | |
def handle_words(): | |
action = request.args.get('action') | |
source = request.args.get('source', 'common3000') | |
num = int(request.args.get('num', 5)) | |
word = request.args.get('word') | |
model = request.args.get('model', 'gpt2') | |
if action == 'daily': | |
words_data = get_words_from_source(source) | |
selected_words = random.sample(words_data, 30) | |
result = [] | |
for word_data in selected_words: | |
w = word_data['word'] | |
phonetic = word_data['phonetic'] | |
sentence_data = get_sentence(w) | |
sentence = sentence_data[2] if sentence_data else "例句暫無" | |
result.append({"word": w, "phonetic": phonetic, "sentence": sentence}) | |
return jsonify({"words": result}) | |
elif action == 'random': | |
words_data = get_words_from_source(source) | |
selected_words = random.sample(words_data, num) | |
result = [] | |
for word_data in selected_words: | |
w = word_data['word'] | |
phonetic = word_data['phonetic'] | |
sentence_data = get_sentence(w) | |
sentence = sentence_data[2] if sentence_data else "例句暫無" | |
result.append({"word": w, "phonetic": phonetic, "sentence": sentence}) | |
return jsonify({"words": result}) | |
elif action == 'query': | |
if not word: | |
return jsonify({"error": "缺少 word 參數"}), 400 | |
sentence_data = get_sentence(word) | |
if sentence_data: | |
return jsonify({"word": word, "phonetic": sentence_data[1], "sentence": sentence_data[2]}) | |
else: | |
return jsonify({"word": word, "phonetic": "未知", "sentence": "例句暫無"}) | |
elif action == 'ai_generate': | |
if not word: | |
return jsonify({"error": "缺少 word 參數"}), 400 | |
if model not in MODEL_LIST: | |
return jsonify({"error": "無效的模型"}), 400 | |
try: | |
sentence = generate_sentence(word, model) | |
save_sentence(word, "未知", sentence, source="ai", model=model) | |
return jsonify({"word": word, "phonetic": "未知", "sentence": sentence}) | |
except Exception as e: | |
return jsonify({"error": f"AI 生成失敗: {str(e)}"}), 500 | |
else: | |
return jsonify({"error": "無效的 action"}), 400 | |
if __name__ == '__main__': | |
app.run(host='0.0.0.0', port=7860) | |