Upload app.py
Browse files
app.py
CHANGED
|
@@ -426,6 +426,9 @@ def is_research_paper(text, use_ai=True):
|
|
| 426 |
else:
|
| 427 |
return False, 0, f"Does not appear to be a research paper. {rule_reason}"
|
| 428 |
|
|
|
|
|
|
|
|
|
|
| 429 |
def create_messages(review_fields, paper_text):
|
| 430 |
messages = [
|
| 431 |
{"role": "system", "content": SYSTEM_PROMPT_TEMPLATE.format(review_fields=review_fields)},
|
|
@@ -433,8 +436,7 @@ def create_messages(review_fields, paper_text):
|
|
| 433 |
]
|
| 434 |
return messages
|
| 435 |
|
| 436 |
-
|
| 437 |
-
@spaces.GPU(duration=60)
|
| 438 |
def convert_file(filepath):
|
| 439 |
full_text, images, out_metadata = convert_single_pdf(
|
| 440 |
filepath, model_refs, metadata=metadata, max_pages=MAX_PAGES
|
|
@@ -476,20 +478,13 @@ def process_file(file):
|
|
| 476 |
|
| 477 |
return paper_text, True
|
| 478 |
|
| 479 |
-
|
| 480 |
-
@spaces.GPU(duration=60)
|
| 481 |
def generate(paper_text, review_template):
|
| 482 |
# Final check before generation
|
| 483 |
is_paper, confidence, reason = is_research_paper(paper_text, use_ai=False) # Quick check without AI
|
| 484 |
if not is_paper:
|
| 485 |
return f"⚠️ Cannot generate review: {reason}"
|
| 486 |
-
|
| 487 |
-
# 软截断,避免一次生成过长导致超时(可按需调整)
|
| 488 |
-
# 说明:Llama-8B 在 bfloat16 下 2k~4k new tokens 已较长,这里对输入做保守控制。
|
| 489 |
-
max_chars_in = 18000
|
| 490 |
-
if isinstance(paper_text, str) and len(paper_text) > max_chars_in:
|
| 491 |
-
paper_text = paper_text[:max_chars_in] + "\n\n...[truncated for inference]...\n"
|
| 492 |
-
|
| 493 |
messages = create_messages(review_template, paper_text)
|
| 494 |
input_ids = tokenizer.apply_chat_template(
|
| 495 |
messages,
|
|
@@ -505,7 +500,7 @@ def generate(paper_text, review_template):
|
|
| 505 |
input_ids=input_ids,
|
| 506 |
attention_mask=attention_mask,
|
| 507 |
streamer=streamer,
|
| 508 |
-
max_new_tokens=
|
| 509 |
do_sample=True,
|
| 510 |
temperature=0.6,
|
| 511 |
top_p=0.9,
|
|
@@ -514,13 +509,11 @@ def generate(paper_text, review_template):
|
|
| 514 |
thread = Thread(target=model.generate, kwargs=generation_kwargs)
|
| 515 |
thread.start()
|
| 516 |
generated_text = ""
|
| 517 |
-
|
| 518 |
-
|
| 519 |
-
|
| 520 |
-
yield generated_text.replace("<|eot_id|>", "")
|
| 521 |
-
except Exception as e:
|
| 522 |
-
yield (generated_text + f"\n\n\n⚠️ Generation interrupted: {type(e).__name__}: {e}").strip()
|
| 523 |
|
|
|
|
| 524 |
# ui
|
| 525 |
title = """<h1 align="center">OpenReviewer</h1>
|
| 526 |
<div align="center">Using <a href="https://huggingface.co/maxidl/Llama-OpenReviewer-8B" target="_blank"><code>Llama-OpenReviewer-8B</code></a> - Built with Llama</div>
|
|
@@ -592,7 +585,6 @@ with gr.Blocks(theme=theme) as demo:
|
|
| 592 |
else:
|
| 593 |
return gr.update(interactive=False), gr.update(value=f"❌ **Not a research paper**: {reason}", visible=True)
|
| 594 |
|
| 595 |
-
# 事件保持不变(API 名沿用 /handle_file_upload、/handle_text_change、/generate)
|
| 596 |
file_input.upload(handle_file_upload, file_input, [paper_text_field, validation_status, generate_button])
|
| 597 |
paper_text_field.change(handle_text_change, paper_text_field, [generate_button, validation_status])
|
| 598 |
|
|
@@ -610,11 +602,8 @@ with gr.Blocks(theme=theme) as demo:
|
|
| 610 |
inputs=None,
|
| 611 |
outputs=generate_button
|
| 612 |
)
|
| 613 |
-
|
| 614 |
demo.title = "OpenReviewer"
|
| 615 |
|
| 616 |
-
# 限制并发,避免累计占用导致单次执行拉长
|
| 617 |
-
demo.queue(concurrency_count=1)
|
| 618 |
-
|
| 619 |
if __name__ == "__main__":
|
| 620 |
demo.launch()
|
|
|
|
| 426 |
else:
|
| 427 |
return False, 0, f"Does not appear to be a research paper. {rule_reason}"
|
| 428 |
|
| 429 |
+
# Rest of the code remains exactly the same...
|
| 430 |
+
# (create_messages, convert_file, process_file, generate functions remain unchanged)
|
| 431 |
+
|
| 432 |
def create_messages(review_fields, paper_text):
|
| 433 |
messages = [
|
| 434 |
{"role": "system", "content": SYSTEM_PROMPT_TEMPLATE.format(review_fields=review_fields)},
|
|
|
|
| 436 |
]
|
| 437 |
return messages
|
| 438 |
|
| 439 |
+
@spaces.GPU()
|
|
|
|
| 440 |
def convert_file(filepath):
|
| 441 |
full_text, images, out_metadata = convert_single_pdf(
|
| 442 |
filepath, model_refs, metadata=metadata, max_pages=MAX_PAGES
|
|
|
|
| 478 |
|
| 479 |
return paper_text, True
|
| 480 |
|
| 481 |
+
@spaces.GPU(duration=190)
|
|
|
|
| 482 |
def generate(paper_text, review_template):
|
| 483 |
# Final check before generation
|
| 484 |
is_paper, confidence, reason = is_research_paper(paper_text, use_ai=False) # Quick check without AI
|
| 485 |
if not is_paper:
|
| 486 |
return f"⚠️ Cannot generate review: {reason}"
|
| 487 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 488 |
messages = create_messages(review_template, paper_text)
|
| 489 |
input_ids = tokenizer.apply_chat_template(
|
| 490 |
messages,
|
|
|
|
| 500 |
input_ids=input_ids,
|
| 501 |
attention_mask=attention_mask,
|
| 502 |
streamer=streamer,
|
| 503 |
+
max_new_tokens=4096,
|
| 504 |
do_sample=True,
|
| 505 |
temperature=0.6,
|
| 506 |
top_p=0.9,
|
|
|
|
| 509 |
thread = Thread(target=model.generate, kwargs=generation_kwargs)
|
| 510 |
thread.start()
|
| 511 |
generated_text = ""
|
| 512 |
+
for new_text in streamer:
|
| 513 |
+
generated_text += new_text
|
| 514 |
+
yield generated_text.replace("<|eot_id|>", "")
|
|
|
|
|
|
|
|
|
|
| 515 |
|
| 516 |
+
# UI code remains exactly the same...
|
| 517 |
# ui
|
| 518 |
title = """<h1 align="center">OpenReviewer</h1>
|
| 519 |
<div align="center">Using <a href="https://huggingface.co/maxidl/Llama-OpenReviewer-8B" target="_blank"><code>Llama-OpenReviewer-8B</code></a> - Built with Llama</div>
|
|
|
|
| 585 |
else:
|
| 586 |
return gr.update(interactive=False), gr.update(value=f"❌ **Not a research paper**: {reason}", visible=True)
|
| 587 |
|
|
|
|
| 588 |
file_input.upload(handle_file_upload, file_input, [paper_text_field, validation_status, generate_button])
|
| 589 |
paper_text_field.change(handle_text_change, paper_text_field, [generate_button, validation_status])
|
| 590 |
|
|
|
|
| 602 |
inputs=None,
|
| 603 |
outputs=generate_button
|
| 604 |
)
|
| 605 |
+
|
| 606 |
demo.title = "OpenReviewer"
|
| 607 |
|
|
|
|
|
|
|
|
|
|
| 608 |
if __name__ == "__main__":
|
| 609 |
demo.launch()
|