Shreyas094's picture
Upload 528 files
372531f verified
raw
history blame
3.22 kB
from .utils.views import print_agent_output
from .utils.llms import call_model
TEMPLATE = """You are an expert research article reviewer. \
Your goal is to review research drafts and provide feedback to the reviser only based on specific guidelines. \
"""
class ReviewerAgent:
def __init__(self, websocket=None, stream_output=None, headers=None):
self.websocket = websocket
self.stream_output = stream_output
self.headers = headers or {}
async def review_draft(self, draft_state: dict):
"""
Review a draft article
:param draft_state:
:return:
"""
task = draft_state.get("task")
guidelines = "- ".join(guideline for guideline in task.get("guidelines"))
revision_notes = draft_state.get("revision_notes")
revise_prompt = f"""The reviser has already revised the draft based on your previous review notes with the following feedback:
{revision_notes}\n
Please provide additional feedback ONLY if critical since the reviser has already made changes based on your previous feedback.
If you think the article is sufficient or that non critical revisions are required, please aim to return None.
"""
review_prompt = f"""You have been tasked with reviewing the draft which was written by a non-expert based on specific guidelines.
Please accept the draft if it is good enough to publish, or send it for revision, along with your notes to guide the revision.
If not all of the guideline criteria are met, you should send appropriate revision notes.
If the draft meets all the guidelines, please return None.
{revise_prompt if revision_notes else ""}
Guidelines: {guidelines}\nDraft: {draft_state.get("draft")}\n
"""
prompt = [
{"role": "system", "content": TEMPLATE},
{"role": "user", "content": review_prompt},
]
response = await call_model(prompt, model=task.get("model"))
if task.get("verbose"):
if self.websocket and self.stream_output:
await self.stream_output(
"logs",
"review_feedback",
f"Review feedback is: {response}...",
self.websocket,
)
else:
print_agent_output(
f"Review feedback is: {response}...", agent="REVIEWER"
)
if "None" in response:
return None
return response
async def run(self, draft_state: dict):
task = draft_state.get("task")
guidelines = task.get("guidelines")
to_follow_guidelines = task.get("follow_guidelines")
review = None
if to_follow_guidelines:
print_agent_output(f"Reviewing draft...", agent="REVIEWER")
if task.get("verbose"):
print_agent_output(
f"Following guidelines {guidelines}...", agent="REVIEWER"
)
review = await self.review_draft(draft_state)
else:
print_agent_output(f"Ignoring guidelines...", agent="REVIEWER")
return {"review": review}