Update app.py
Browse files
app.py
CHANGED
|
@@ -163,19 +163,21 @@ class Reviewer:
|
|
| 163 |
retrieval_content += f"Relevant Paper {str(cnt)}:\n"
|
| 164 |
retrieval_content += f"Title: {paper['title']}\n{paper['content']}\n\n"
|
| 165 |
formatted_citation = format_bibtex(paper, 'unsrt')
|
| 166 |
-
retrieved_papers += f"{str(cnt)}. {formatted_citation}
|
| 167 |
cnt += 1
|
| 168 |
text = retrieval_content + content
|
| 169 |
-
|
| 170 |
else:
|
| 171 |
text = content
|
| 172 |
-
|
| 173 |
retrieved_papers = ""
|
| 174 |
else:
|
| 175 |
text = content
|
| 176 |
-
|
| 177 |
retrieved_papers = ""
|
| 178 |
|
|
|
|
|
|
|
| 179 |
return chat_review_text, retrieved_papers
|
| 180 |
|
| 181 |
def query_gen(self, abstract):
|
|
@@ -358,59 +360,81 @@ Organize the result in JSON format as follows:
|
|
| 358 |
{"role": "system", "content": f"Read the following scientific paper and generate {str(self.limit_num)} major limitations in this paper about its {self.aspect}. Do not include any limitation explicitly mentioned in the paper itself. Return only the limitations in the following JSON format: {{\"limitations\": <a list of limitations>"} ,
|
| 359 |
{"role": "user", "content": text},
|
| 360 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 361 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 362 |
responses = asyncio.run(
|
| 363 |
generate_from_openai_chat_completion(
|
| 364 |
client,
|
| 365 |
messages=[messages],
|
| 366 |
-
engine_name=
|
| 367 |
max_tokens=1000, # 32
|
| 368 |
requests_per_minute = 20,
|
| 369 |
-
|
| 370 |
)
|
| 371 |
-
)
|
| 372 |
-
|
| 373 |
-
|
| 374 |
-
|
| 375 |
-
|
| 376 |
-
|
| 377 |
-
|
| 378 |
-
|
| 379 |
-
|
| 380 |
-
|
| 381 |
-
|
| 382 |
-
|
| 383 |
-
|
|
|
|
|
|
|
|
|
|
| 384 |
]
|
| 385 |
-
|
| 386 |
-
|
| 387 |
-
|
| 388 |
-
|
| 389 |
-
|
| 390 |
-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
|
| 403 |
-
limit_cnt += 1
|
| 404 |
-
# for choice in response.choices:
|
| 405 |
-
# result += choice.message.content
|
| 406 |
-
# result = insert_sentence(result, '**Generated by ChatGPT, no copying allowed!**', 50)
|
| 407 |
-
except Exception as e:
|
| 408 |
-
result = "Error: "+ str(e)
|
| 409 |
-
# usage = 'xxxxx'
|
| 410 |
print("********"*10)
|
| 411 |
print(result)
|
| 412 |
-
print("********"*10)
|
| 413 |
-
return result
|
| 414 |
|
| 415 |
|
| 416 |
def retrieve_papers(self, title, abstract):
|
|
|
|
| 163 |
retrieval_content += f"Relevant Paper {str(cnt)}:\n"
|
| 164 |
retrieval_content += f"Title: {paper['title']}\n{paper['content']}\n\n"
|
| 165 |
formatted_citation = format_bibtex(paper, 'unsrt')
|
| 166 |
+
retrieved_papers += f"{str(cnt)}. {formatted_citation}\n({paper['url']})\n\n"
|
| 167 |
cnt += 1
|
| 168 |
text = retrieval_content + content
|
| 169 |
+
chat_review_limitations = self.chat_review(text=text)
|
| 170 |
else:
|
| 171 |
text = content
|
| 172 |
+
chat_review_limitations = self.chat_review(text=text)
|
| 173 |
retrieved_papers = ""
|
| 174 |
else:
|
| 175 |
text = content
|
| 176 |
+
chat_review_limitations = self.chat_review(text=text)
|
| 177 |
retrieved_papers = ""
|
| 178 |
|
| 179 |
+
text = f"Paper:\n{paper['content']}\n\n"
|
| 180 |
+
chat_review_text = self.chat_refine(text=text, limitations=chat_review_limitations)
|
| 181 |
return chat_review_text, retrieved_papers
|
| 182 |
|
| 183 |
def query_gen(self, abstract):
|
|
|
|
| 360 |
{"role": "system", "content": f"Read the following scientific paper and generate {str(self.limit_num)} major limitations in this paper about its {self.aspect}. Do not include any limitation explicitly mentioned in the paper itself. Return only the limitations in the following JSON format: {{\"limitations\": <a list of limitations>"} ,
|
| 361 |
{"role": "user", "content": text},
|
| 362 |
]
|
| 363 |
+
|
| 364 |
+
responses = asyncio.run(
|
| 365 |
+
generate_from_openai_chat_completion(
|
| 366 |
+
client,
|
| 367 |
+
messages=[messages],
|
| 368 |
+
engine_name=self.model_name, # gpt-3.5-turbo
|
| 369 |
+
max_tokens=1000, # 32
|
| 370 |
+
requests_per_minute = 20,
|
| 371 |
+
# response_format={"type":"json_object"},
|
| 372 |
+
)
|
| 373 |
+
)
|
| 374 |
try:
|
| 375 |
+
limitations = json.loads(responses[0])["limitations"][:self.limit_num]
|
| 376 |
+
result = ""
|
| 377 |
+
limit_cnt = 1
|
| 378 |
+
for limitation in limitations:
|
| 379 |
+
result += f"{str(limit_cnt)}. {limitation}\n"
|
| 380 |
+
limit_cnt += 1
|
| 381 |
+
except:
|
| 382 |
+
SYSTEM_INPUT = f"Below is an output from an LLM about several limitations of a scientific paper. Please extract the list of limitations and DO NOT make any modification to the original limitations. Return the limitations in the following JSON format: {{\"limitations\": <a list of limitations>}}. If there is no valid response inthe output, return {{\"limitations\": {{}}}}"
|
| 383 |
+
messages=[
|
| 384 |
+
{"role": "system", "content": SYSTEM_INPUT},
|
| 385 |
+
{"role": "user", "content": responses[0]},
|
| 386 |
+
]
|
| 387 |
+
os.environ["OPENAI_BASE_URL"] = PRIVATE_API_BASE
|
| 388 |
+
os.environ["OPENAI_API_KEY"] = PRIVATE_API_KEY
|
| 389 |
+
client = AsyncOpenAI()
|
| 390 |
responses = asyncio.run(
|
| 391 |
generate_from_openai_chat_completion(
|
| 392 |
client,
|
| 393 |
messages=[messages],
|
| 394 |
+
engine_name="gpt-4o-mini", # gpt-3.5-turbo
|
| 395 |
max_tokens=1000, # 32
|
| 396 |
requests_per_minute = 20,
|
| 397 |
+
response_format={"type":"json_object"},
|
| 398 |
)
|
| 399 |
+
)
|
| 400 |
+
limitations = json.loads(responses[0])["limitations"][:self.limit_num]
|
| 401 |
+
|
| 402 |
+
|
| 403 |
+
return limitations
|
| 404 |
+
|
| 405 |
+
def chat_refine(self, text, limitations):
|
| 406 |
+
os.environ["OPENAI_BASE_URL"] = self.api_base
|
| 407 |
+
os.environ["OPENAI_API_KEY"] = self.api
|
| 408 |
+
client = AsyncOpenAI()
|
| 409 |
+
|
| 410 |
+
messages = []
|
| 411 |
+
for limitation in limitations:
|
| 412 |
+
message=[
|
| 413 |
+
{"role": "system", "content": f"Read the following scientific paper and a limitation of the paper. Provide a specific, actionable suggestion to address the limitation in no more than 50 words."} ,
|
| 414 |
+
{"role": "user", "content": f"{text}\nLimitation: {limitation}"},
|
| 415 |
]
|
| 416 |
+
messages.append(message)
|
| 417 |
+
|
| 418 |
+
responses = asyncio.run(
|
| 419 |
+
generate_from_openai_chat_completion(
|
| 420 |
+
client,
|
| 421 |
+
messages=messages,
|
| 422 |
+
engine_name=self.model_name, # gpt-3.5-turbo
|
| 423 |
+
max_tokens=1000, # 32
|
| 424 |
+
requests_per_minute = 20,
|
| 425 |
+
# response_format={"type":"json_object"},
|
| 426 |
+
)
|
| 427 |
+
)
|
| 428 |
+
|
| 429 |
+
result = ""
|
| 430 |
+
limit_cnt = 1
|
| 431 |
+
for limitation, response in zip(limitations, responses):
|
| 432 |
+
result += f"{str(limit_cnt)}. {limitation} {response}\n\n"
|
| 433 |
+
limit_cnt += 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 434 |
print("********"*10)
|
| 435 |
print(result)
|
| 436 |
+
print("********"*10)
|
| 437 |
+
return result
|
| 438 |
|
| 439 |
|
| 440 |
def retrieve_papers(self, title, abstract):
|