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):
|