Thong bao
Browse files
app.py
CHANGED
|
@@ -50,15 +50,29 @@ MAX_NEW_TOKENS = 62
|
|
| 50 |
# === Hàm xử lý ===
|
| 51 |
def summarize_article(article_text):
|
| 52 |
"""Tóm tắt bài viết và tạo prompt refinement"""
|
|
|
|
| 53 |
if not article_text.strip():
|
| 54 |
-
return "
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
no_repeat_ngram_size=NO_REPEAT_NGRAM_SIZE,
|
| 57 |
length_penalty=LENGTH_PENALTY,
|
| 58 |
min_new_tokens=MIN_NEW_TOKENS,
|
| 59 |
-
max_new_tokens=MAX_NEW_TOKENS,
|
|
|
|
|
|
|
|
|
|
| 60 |
title = summary.split(".")[0] + "."
|
| 61 |
-
# Prompt refinement
|
| 62 |
input_ids = promptist_tokenizer(title.strip() + " Rephrase:", return_tensors="pt").input_ids.to(device)
|
| 63 |
eos_id = promptist_tokenizer.eos_token_id
|
| 64 |
outputs = promptist_model.generate(
|
|
@@ -73,7 +87,9 @@ def summarize_article(article_text):
|
|
| 73 |
)
|
| 74 |
output_texts = promptist_tokenizer.batch_decode(outputs, skip_special_tokens=True)
|
| 75 |
prompt = output_texts[0].replace(title + " Rephrase:", "").strip()
|
| 76 |
-
|
|
|
|
|
|
|
| 77 |
|
| 78 |
def generate_images(prompt, style, num_images=4):
|
| 79 |
"""Sinh nhiều ảnh"""
|
|
@@ -113,6 +129,7 @@ def create_app():
|
|
| 113 |
choices=["Art", "Anime", "Watercolor", "Cyberpunk"],
|
| 114 |
label="🎨 Phong cách ảnh", value="Art"
|
| 115 |
)
|
|
|
|
| 116 |
num_images_slider = gr.Slider(1, 8, value=4, step=1, label="🔢 Số lượng ảnh")
|
| 117 |
btn_summary = gr.Button("📌 Sinh Tiêu đề & Prompt")
|
| 118 |
|
|
@@ -132,7 +149,7 @@ def create_app():
|
|
| 132 |
btn_summary.click(
|
| 133 |
fn=summarize_article,
|
| 134 |
inputs=[article_input],
|
| 135 |
-
outputs=[title_output, prompt_output]
|
| 136 |
)
|
| 137 |
|
| 138 |
def update_gallery(prompt, style, num_images):
|
|
|
|
| 50 |
# === Hàm xử lý ===
|
| 51 |
def summarize_article(article_text):
|
| 52 |
"""Tóm tắt bài viết và tạo prompt refinement"""
|
| 53 |
+
# Kiểm tra rỗng
|
| 54 |
if not article_text.strip():
|
| 55 |
+
return gr.update(value="❌ <span style='color:red'>Bạn chưa nhập bài viết</span>"), "", ""
|
| 56 |
+
|
| 57 |
+
# Kiểm tra số từ
|
| 58 |
+
word_count = len(article_text.split())
|
| 59 |
+
if word_count < 20 or word_count > 300:
|
| 60 |
+
return gr.update(value=f"❌ <span style='color:red'>Bài viết phải từ 20–300 từ (hiện tại: {word_count} từ)</span>"), "", ""
|
| 61 |
+
|
| 62 |
+
# Nếu hợp lệ thì xóa cảnh báo
|
| 63 |
+
error_msg = gr.update(value="")
|
| 64 |
+
|
| 65 |
+
summary = summarizer(
|
| 66 |
+
article_text,
|
| 67 |
+
num_beams=NUM_BEAMS,
|
| 68 |
no_repeat_ngram_size=NO_REPEAT_NGRAM_SIZE,
|
| 69 |
length_penalty=LENGTH_PENALTY,
|
| 70 |
min_new_tokens=MIN_NEW_TOKENS,
|
| 71 |
+
max_new_tokens=MAX_NEW_TOKENS,
|
| 72 |
+
do_sample=False
|
| 73 |
+
)[0]["summary_text"]
|
| 74 |
+
|
| 75 |
title = summary.split(".")[0] + "."
|
|
|
|
| 76 |
input_ids = promptist_tokenizer(title.strip() + " Rephrase:", return_tensors="pt").input_ids.to(device)
|
| 77 |
eos_id = promptist_tokenizer.eos_token_id
|
| 78 |
outputs = promptist_model.generate(
|
|
|
|
| 87 |
)
|
| 88 |
output_texts = promptist_tokenizer.batch_decode(outputs, skip_special_tokens=True)
|
| 89 |
prompt = output_texts[0].replace(title + " Rephrase:", "").strip()
|
| 90 |
+
|
| 91 |
+
return error_msg, title, prompt
|
| 92 |
+
|
| 93 |
|
| 94 |
def generate_images(prompt, style, num_images=4):
|
| 95 |
"""Sinh nhiều ảnh"""
|
|
|
|
| 129 |
choices=["Art", "Anime", "Watercolor", "Cyberpunk"],
|
| 130 |
label="🎨 Phong cách ảnh", value="Art"
|
| 131 |
)
|
| 132 |
+
error_box = gr.Markdown(value="", elem_id="error-msg")
|
| 133 |
num_images_slider = gr.Slider(1, 8, value=4, step=1, label="🔢 Số lượng ảnh")
|
| 134 |
btn_summary = gr.Button("📌 Sinh Tiêu đề & Prompt")
|
| 135 |
|
|
|
|
| 149 |
btn_summary.click(
|
| 150 |
fn=summarize_article,
|
| 151 |
inputs=[article_input],
|
| 152 |
+
outputs=[error_box, title_output, prompt_output]
|
| 153 |
)
|
| 154 |
|
| 155 |
def update_gallery(prompt, style, num_images):
|