xy63 commited on
Commit
c62c606
·
verified ·
1 Parent(s): 583fbd4

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -23
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
- # 降低 GPU 时长上限,避免超配额
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
- # 将 GPU 时长从 190 -> 60;并做轻量限流(截断 + 减少新token)
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=2048, # 从 4096 降到 2048(必要时继续下调)
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
- try:
518
- for new_text in streamer:
519
- generated_text += new_text
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()