Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -46,6 +46,7 @@ print("Model loaded successfully!")
|
|
| 46 |
# ============================================================
|
| 47 |
class SummarizeRequest(BaseModel):
|
| 48 |
text: str
|
|
|
|
| 49 |
|
| 50 |
|
| 51 |
# ============================================================
|
|
@@ -129,10 +130,11 @@ def fix_truncated_text(text: str) -> str:
|
|
| 129 |
return text + '.'
|
| 130 |
|
| 131 |
|
| 132 |
-
def format_as_bullet_points(summaries: list[str]) -> str:
|
| 133 |
"""
|
| 134 |
Chuyển đổi các đoạn tóm tắt thành Bullet Points.
|
| 135 |
Mỗi ý một dòng, bắt đầu bằng '•'.
|
|
|
|
| 136 |
"""
|
| 137 |
bullet_points = []
|
| 138 |
|
|
@@ -147,6 +149,10 @@ def format_as_bullet_points(summaries: list[str]) -> str:
|
|
| 147 |
sentence = fix_truncated_text(sentence)
|
| 148 |
bullet_points.append(f"• {sentence}")
|
| 149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
return '\n'.join(bullet_points)
|
| 151 |
|
| 152 |
|
|
@@ -277,8 +283,18 @@ async def summarize_text(request: SummarizeRequest):
|
|
| 277 |
"""
|
| 278 |
Tóm tắt văn bản tiếng Việt.
|
| 279 |
Trả về danh sách Bullet Points.
|
|
|
|
| 280 |
"""
|
| 281 |
text = request.text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 282 |
|
| 283 |
# Validate text
|
| 284 |
if not text or len(text.strip()) < 50:
|
|
@@ -296,25 +312,35 @@ async def summarize_text(request: SummarizeRequest):
|
|
| 296 |
detail="Không thể tạo tóm tắt."
|
| 297 |
)
|
| 298 |
|
| 299 |
-
# Format as bullet points
|
| 300 |
-
bullet_points = format_as_bullet_points(summaries)
|
| 301 |
|
| 302 |
return {
|
| 303 |
"success": True,
|
| 304 |
"original_length": len(text),
|
| 305 |
"word_count": len(text.split()),
|
| 306 |
"num_chunks": len(summaries),
|
|
|
|
| 307 |
"summary": bullet_points
|
| 308 |
}
|
| 309 |
|
| 310 |
|
| 311 |
@app.post("/upload-pdf")
|
| 312 |
-
async def upload_pdf(file: UploadFile = File(...)):
|
| 313 |
"""
|
| 314 |
Upload và tóm tắt file PDF.
|
| 315 |
Đọc qua byte stream, KHÔNG lưu file ra đĩa.
|
| 316 |
Trả về danh sách Bullet Points.
|
|
|
|
| 317 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 318 |
# Validate file type
|
| 319 |
if not file.filename.lower().endswith('.pdf'):
|
| 320 |
raise HTTPException(
|
|
@@ -358,8 +384,8 @@ async def upload_pdf(file: UploadFile = File(...)):
|
|
| 358 |
detail="Không thể tạo tóm tắt."
|
| 359 |
)
|
| 360 |
|
| 361 |
-
# Format as bullet points
|
| 362 |
-
bullet_points = format_as_bullet_points(summaries)
|
| 363 |
|
| 364 |
return {
|
| 365 |
"success": True,
|
|
@@ -367,6 +393,7 @@ async def upload_pdf(file: UploadFile = File(...)):
|
|
| 367 |
"original_length": len(text),
|
| 368 |
"word_count": len(text.split()),
|
| 369 |
"num_chunks": len(summaries),
|
|
|
|
| 370 |
"summary": bullet_points
|
| 371 |
}
|
| 372 |
|
|
|
|
| 46 |
# ============================================================
|
| 47 |
class SummarizeRequest(BaseModel):
|
| 48 |
text: str
|
| 49 |
+
length_level: int = 1 # 0: Ngắn (2-3 ý), 1: Trung bình (4-5 ý), 2: Chi tiết (6+ ý)
|
| 50 |
|
| 51 |
|
| 52 |
# ============================================================
|
|
|
|
| 130 |
return text + '.'
|
| 131 |
|
| 132 |
|
| 133 |
+
def format_as_bullet_points(summaries: list[str], max_points: int = None) -> str:
|
| 134 |
"""
|
| 135 |
Chuyển đổi các đoạn tóm tắt thành Bullet Points.
|
| 136 |
Mỗi ý một dòng, bắt đầu bằng '•'.
|
| 137 |
+
max_points: Số lượng bullet points tối đa (None = không giới hạn)
|
| 138 |
"""
|
| 139 |
bullet_points = []
|
| 140 |
|
|
|
|
| 149 |
sentence = fix_truncated_text(sentence)
|
| 150 |
bullet_points.append(f"• {sentence}")
|
| 151 |
|
| 152 |
+
# Giới hạn số lượng bullet points nếu có
|
| 153 |
+
if max_points is not None and len(bullet_points) > max_points:
|
| 154 |
+
bullet_points = bullet_points[:max_points]
|
| 155 |
+
|
| 156 |
return '\n'.join(bullet_points)
|
| 157 |
|
| 158 |
|
|
|
|
| 283 |
"""
|
| 284 |
Tóm tắt văn bản tiếng Việt.
|
| 285 |
Trả về danh sách Bullet Points.
|
| 286 |
+
length_level: 0 = Ngắn (2-3 ý), 1 = Trung bình (4-5 ý), 2 = Chi tiết (6+ ý)
|
| 287 |
"""
|
| 288 |
text = request.text
|
| 289 |
+
length_level = request.length_level
|
| 290 |
+
|
| 291 |
+
# Map length_level to max_points
|
| 292 |
+
max_points_map = {
|
| 293 |
+
0: 3, # Ngắn: 2-3 ý
|
| 294 |
+
1: 5, # Trung bình: 4-5 ý
|
| 295 |
+
2: None # Chi tiết: không giới hạn
|
| 296 |
+
}
|
| 297 |
+
max_points = max_points_map.get(length_level, 5)
|
| 298 |
|
| 299 |
# Validate text
|
| 300 |
if not text or len(text.strip()) < 50:
|
|
|
|
| 312 |
detail="Không thể tạo tóm tắt."
|
| 313 |
)
|
| 314 |
|
| 315 |
+
# Format as bullet points với giới hạn số lượng
|
| 316 |
+
bullet_points = format_as_bullet_points(summaries, max_points=max_points)
|
| 317 |
|
| 318 |
return {
|
| 319 |
"success": True,
|
| 320 |
"original_length": len(text),
|
| 321 |
"word_count": len(text.split()),
|
| 322 |
"num_chunks": len(summaries),
|
| 323 |
+
"length_level": length_level,
|
| 324 |
"summary": bullet_points
|
| 325 |
}
|
| 326 |
|
| 327 |
|
| 328 |
@app.post("/upload-pdf")
|
| 329 |
+
async def upload_pdf(file: UploadFile = File(...), length_level: int = 1):
|
| 330 |
"""
|
| 331 |
Upload và tóm tắt file PDF.
|
| 332 |
Đọc qua byte stream, KHÔNG lưu file ra đĩa.
|
| 333 |
Trả về danh sách Bullet Points.
|
| 334 |
+
length_level: 0 = Ngắn (2-3 ý), 1 = Trung bình (4-5 ý), 2 = Chi tiết (6+ ý)
|
| 335 |
"""
|
| 336 |
+
# Map length_level to max_points
|
| 337 |
+
max_points_map = {
|
| 338 |
+
0: 3, # Ngắn: 2-3 ý
|
| 339 |
+
1: 5, # Trung bình: 4-5 ý
|
| 340 |
+
2: None # Chi tiết: không giới hạn
|
| 341 |
+
}
|
| 342 |
+
max_points = max_points_map.get(length_level, 5)
|
| 343 |
+
|
| 344 |
# Validate file type
|
| 345 |
if not file.filename.lower().endswith('.pdf'):
|
| 346 |
raise HTTPException(
|
|
|
|
| 384 |
detail="Không thể tạo tóm tắt."
|
| 385 |
)
|
| 386 |
|
| 387 |
+
# Format as bullet points với giới hạn số lượng
|
| 388 |
+
bullet_points = format_as_bullet_points(summaries, max_points=max_points)
|
| 389 |
|
| 390 |
return {
|
| 391 |
"success": True,
|
|
|
|
| 393 |
"original_length": len(text),
|
| 394 |
"word_count": len(text.split()),
|
| 395 |
"num_chunks": len(summaries),
|
| 396 |
+
"length_level": length_level,
|
| 397 |
"summary": bullet_points
|
| 398 |
}
|
| 399 |
|