Spaces:
Runtime error
Runtime error
| import os | |
| import argparse | |
| import sys | |
| sys.path.append("src/agents") | |
| from utils import extract | |
| from SOP import SOP | |
| from Agent import Agent | |
| from Environment import Environment | |
| from Memory import Memory | |
| from gradio_base import Client, convert2list4agentname | |
| def process(action): | |
| response = action.response | |
| send_name = action.name | |
| send_role = action.role | |
| if not action.is_user: | |
| print(f"{send_name}({send_role}):{response}") | |
| memory = Memory(send_role, send_name, response) | |
| return memory | |
| def gradio_process(action,current_state): | |
| response = action.response | |
| all = "" | |
| for i,res in enumerate(response): | |
| all+=res | |
| state = 10 | |
| if action.is_user: | |
| state = 30 | |
| elif action.state_begin: | |
| state = 12 | |
| action.state_begin = False | |
| elif i>0: | |
| state = 11 | |
| send_name = f"{action.name}({action.role})" | |
| Client.send_server(str([state, send_name, res, current_state.name])) | |
| if state == 30: | |
| # print("client: waiting for user input") | |
| data: list = next(Client.receive_server) | |
| content = "" | |
| for item in data: | |
| if item.startswith("<USER>"): | |
| content = item.split("<USER>")[1] | |
| break | |
| # print(f"client: received `{content}` from server.") | |
| action.response = content | |
| break | |
| else: | |
| action.response = all | |
| def init(config): | |
| if not os.path.exists("logs"): | |
| os.mkdir("logs") | |
| sop = SOP.from_config(config) | |
| agents,roles_to_names,names_to_roles = Agent.from_config(config) | |
| environment = Environment.from_config(config) | |
| environment.agents = agents | |
| environment.roles_to_names,environment.names_to_roles = roles_to_names,names_to_roles | |
| sop.roles_to_names,sop.names_to_roles = roles_to_names,names_to_roles | |
| for name,agent in agents.items(): | |
| agent.environment = environment | |
| return agents,sop,environment | |
| def block_when_next(current_agent, current_state): | |
| if Client.LAST_USER: | |
| assert not current_agent.is_user | |
| Client.LAST_USER = False | |
| return | |
| if current_agent.is_user: | |
| # if next turn is user, we don't handle it here | |
| Client.LAST_USER = True | |
| return | |
| if Client.FIRST_RUN: | |
| Client.FIRST_RUN = False | |
| else: | |
| # block current process | |
| if Client.mode == Client.SINGLE_MODE: | |
| Client.send_server(str([98, f"{current_agent.name}({current_agent.state_roles[current_state.name]})", " ", current_state.name])) | |
| data: list = next(Client.receive_server) | |
| def run(agents,sop,environment): | |
| while True: | |
| current_state,current_agent= sop.next(environment,agents) | |
| if sop.finished: | |
| print("finished!") | |
| Client.send_server(str([99, ' ', ' ', 'done'])) | |
| os.environ.clear() | |
| break | |
| block_when_next(current_agent, current_state) | |
| action = current_agent.step(current_state) #component_dict = current_state[self.role[current_node.name]] current_agent.compile(component_dict) | |
| gradio_process(action,current_state) | |
| memory = process(action) | |
| environment.update_memory(memory,current_state) | |
| def prepare(agents, sop, environment): | |
| client = Client() | |
| Client.send_server = client.send_message | |
| requirement_game_name = extract(sop.states['design_state'].environment_prompt,"target") | |
| client.send_message( | |
| { | |
| "requirement": requirement_game_name, | |
| "agents_name": convert2list4agentname(sop)[0], | |
| # "only_name": DebateUI.convert2list4agentname(sop)[1], | |
| "only_name": convert2list4agentname(sop)[0], | |
| "default_cos_play_id": -1, | |
| "api_key": os.environ["API_KEY"] | |
| } | |
| ) | |
| # print(f"client: send {requirement_game_name}") | |
| client.listening_for_start_() | |
| client.mode = Client.mode = client.cache["mode"] | |
| new_requirement = Client.cache['requirement'] | |
| os.environ["API_KEY"] = client.cache["api_key"] | |
| for state in sop.states.values(): | |
| state.environment_prompt = state.environment_prompt.replace("<target>a snake game with python</target>", f"<target>{new_requirement}</target>") | |
| # print(f"client: received {Client.cache['requirement']} from server.") | |
| if __name__ == '__main__': | |
| parser = argparse.ArgumentParser(description='A demo of chatbot') | |
| parser.add_argument('--agent', type=str, help='path to SOP json', default="config.json") | |
| args = parser.parse_args() | |
| agents,sop,environment = init(args.agent) | |
| # add================================ | |
| prepare(agents, sop, environment) | |
| # =================================== | |
| run(agents,sop,environment) |