|
import gradio as gr |
|
from pathlib import Path |
|
from reactagent.environment import Environment |
|
from reactagent.agents.agent_research import ResearchAgent |
|
from reactagent.runner import create_parser |
|
from reactagent import llm |
|
from reactagent.users.user import User |
|
|
|
class SessionInfo: |
|
def __init__(self): |
|
self.coro_cache = {} |
|
self.parser = create_parser() |
|
|
|
def make_session(self, prompt, session_hash): |
|
id = session_hash |
|
|
|
llm_name='claude-3-5-sonnet-20240620' |
|
fastllm_name='claude-3-haiku-20240307' |
|
rawargs = [ |
|
'--research-problem', prompt, |
|
'--log-dir', str(Path('logs', id)), |
|
'--work-dir', str(Path('workspaces', id)), |
|
'--llm-name', llm_name, |
|
'--edit-script-llm-name', llm_name, |
|
'--fast-llm-name', fastllm_name, |
|
] |
|
|
|
args = self.parser.parse_args(rawargs) |
|
llm.FAST_MODEL = args.fast_llm_name |
|
env = Environment(args) |
|
agent = ResearchAgent(args, env) |
|
coro = agent.run(env) |
|
|
|
self.coro_cache[id] = coro |
|
return id |
|
|
|
def get_response(self, human_input, session_hash): |
|
coro_input = human_input |
|
if session_hash not in self.coro_cache: |
|
self.make_session(human_input, session_hash) |
|
coro_input = None |
|
|
|
try: |
|
output = self.coro_cache[session_hash].send(coro_input) |
|
except StopIteration: |
|
output = None |
|
del self.coro_cache[session_hash] |
|
|
|
return output |
|
|
|
session_info = SessionInfo() |
|
|
|
def info_to_message(info): |
|
msg = "Agent Response:\n" |
|
for k, v in info.items(): |
|
if isinstance(v, dict): |
|
tempv = v |
|
v = "" |
|
for k2, v2 in tempv.items(): |
|
v += f"{k2}:\n {v2}\n" |
|
v = User.indent_text(v, 2) |
|
msg += '-' * 64 |
|
msg += '\n' |
|
msg += f"{k}:\n{v}\n" |
|
|
|
msg += "Please provide feedback based on the history, response entries, and observation, and questions: " |
|
return msg |
|
|
|
def predict(message, history, request: gr.Request): |
|
response = session_info.get_response(message, request.session_hash) |
|
if response is None: |
|
return "Agent is finished. Enter a new instruction." |
|
return info_to_message(response) |
|
|
|
if __name__ == "__main__": |
|
chatbot = gr.Chatbot(render_markdown=False) |
|
demo = gr.ChatInterface(predict, chatbot=chatbot) |
|
demo.launch() |
|
|