Spaces:
Running
Running
from .utils.views import print_agent_output | |
from .utils.llms import call_model | |
import json | |
sample_revision_notes = """ | |
{ | |
"draft": { | |
draft title: The revised draft that you are submitting for review | |
}, | |
"revision_notes": Your message to the reviewer about the changes you made to the draft based on their feedback | |
} | |
""" | |
class ReviserAgent: | |
def __init__(self, websocket=None, stream_output=None, headers=None): | |
self.websocket = websocket | |
self.stream_output = stream_output | |
self.headers = headers or {} | |
async def revise_draft(self, draft_state: dict): | |
""" | |
Review a draft article | |
:param draft_state: | |
:return: | |
""" | |
review = draft_state.get("review") | |
task = draft_state.get("task") | |
draft_report = draft_state.get("draft") | |
prompt = [ | |
{ | |
"role": "system", | |
"content": "You are an expert writer. Your goal is to revise drafts based on reviewer notes.", | |
}, | |
{ | |
"role": "user", | |
"content": f"""Draft:\n{draft_report}" + "Reviewer's notes:\n{review}\n\n | |
You have been tasked by your reviewer with revising the following draft, which was written by a non-expert. | |
If you decide to follow the reviewer's notes, please write a new draft and make sure to address all of the points they raised. | |
Please keep all other aspects of the draft the same. | |
You MUST return nothing but a JSON in the following format: | |
{sample_revision_notes} | |
""", | |
}, | |
] | |
response = await call_model( | |
prompt, | |
model=task.get("model"), | |
response_format="json", | |
) | |
return response | |
async def run(self, draft_state: dict): | |
print_agent_output(f"Rewriting draft based on feedback...", agent="REVISOR") | |
revision = await self.revise_draft(draft_state) | |
if draft_state.get("task").get("verbose"): | |
if self.websocket and self.stream_output: | |
await self.stream_output( | |
"logs", | |
"revision_notes", | |
f"Revision notes: {revision.get('revision_notes')}", | |
self.websocket, | |
) | |
else: | |
print_agent_output( | |
f"Revision notes: {revision.get('revision_notes')}", agent="REVISOR" | |
) | |
return { | |
"draft": revision.get("draft"), | |
"revision_notes": revision.get("revision_notes"), | |
} | |