mirror of
https://github.com/kolbytn/mindcraft.git
synced 2025-04-29 19:44:53 +02:00
making eval script more robust to server randomly crashing
This commit is contained in:
parent
2027b71fe7
commit
19bedf0593
1 changed files with 63 additions and 7 deletions
|
@ -8,6 +8,8 @@ import re
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
import filecmp
|
||||||
|
import json
|
||||||
|
|
||||||
BLOCKED_ACTIONS_COOKING = [
|
BLOCKED_ACTIONS_COOKING = [
|
||||||
'!activate', '!attackPlayer', '!checkBlueprint', '!checkBlueprintLevel',
|
'!activate', '!attackPlayer', '!checkBlueprint', '!checkBlueprintLevel',
|
||||||
|
@ -225,6 +227,8 @@ def launch_server_experiment(task_path,
|
||||||
|
|
||||||
subprocess.run(['tmux', 'new-session', '-d', '-s', session_name], check=True)
|
subprocess.run(['tmux', 'new-session', '-d', '-s', session_name], check=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# set environment variables
|
# set environment variables
|
||||||
set_environment_variable_tmux_session(session_name, "MINECRAFT_PORT", server_port)
|
set_environment_variable_tmux_session(session_name, "MINECRAFT_PORT", server_port)
|
||||||
set_environment_variable_tmux_session(session_name, "MINDSERVER_PORT", mindserver_port)
|
set_environment_variable_tmux_session(session_name, "MINDSERVER_PORT", mindserver_port)
|
||||||
|
@ -233,13 +237,14 @@ def launch_server_experiment(task_path,
|
||||||
set_environment_variable_tmux_session(session_name, "INSECURE_CODING", "true")
|
set_environment_variable_tmux_session(session_name, "INSECURE_CODING", "true")
|
||||||
|
|
||||||
# you need to add the bots to the world first before you can add them as op
|
# you need to add the bots to the world first before you can add them as op
|
||||||
cmd = f"node main.js --task_path example_tasks.json --task_id debug_{num_agents}_agent_timeout"
|
# cmd = f"node main.js --task_path example_tasks.json --task_id debug_{num_agents}_agent_timeout"
|
||||||
|
|
||||||
subprocess.run(["tmux", "send-keys", "-t", session_name, cmd, "C-m"])
|
# subprocess.run(["tmux", "send-keys", "-t", session_name, cmd, "C-m"])
|
||||||
|
|
||||||
time.sleep(40)
|
# time.sleep(40)
|
||||||
|
|
||||||
subprocess.run(["tmux", "send-keys", "-t", "server_" + session_name, f"/op {agent_names[0]}", "C-m"])
|
# subprocess.run(["tmux", "send-keys", "-t", "server_" + session_name, f"/op @a", "C-m"])
|
||||||
|
make_ops(agent_names, session_name)
|
||||||
|
|
||||||
# add the bots as op
|
# add the bots as op
|
||||||
# op_script_content = "sleep 5\n\op @p" * 20
|
# op_script_content = "sleep 5\n\op @p" * 20
|
||||||
|
@ -252,6 +257,11 @@ def launch_server_experiment(task_path,
|
||||||
elif task_type == "construction":
|
elif task_type == "construction":
|
||||||
set_environment_variable_tmux_session(session_name, "BLOCKED_ACTIONS", BLOCKED_ACTIONS_CONSTRUCTION)
|
set_environment_variable_tmux_session(session_name, "BLOCKED_ACTIONS", BLOCKED_ACTIONS_CONSTRUCTION)
|
||||||
|
|
||||||
|
split_task_path = task_path.split("/")
|
||||||
|
if len(split_task_path) > 1:
|
||||||
|
task_path_name = split_task_path[-2]
|
||||||
|
else:
|
||||||
|
task_path_name = "tasks"
|
||||||
|
|
||||||
script_content = ""
|
script_content = ""
|
||||||
for task_id in task_ids:
|
for task_id in task_ids:
|
||||||
|
@ -274,8 +284,7 @@ def launch_server_experiment(task_path,
|
||||||
script_content += f"{cp_cmd}\n"
|
script_content += f"{cp_cmd}\n"
|
||||||
script_content += "sleep 1\n"
|
script_content += "sleep 1\n"
|
||||||
if s3:
|
if s3:
|
||||||
s3_cmd = f"aws s3 cp {agent_file_path} s3://{bucket_name}/{task_type}/{model}/{exp_name}/{task_id}/{agent}_{_}.json"
|
s3_cmd = f"aws s3 cp {agent_file_path} s3://{bucket_name}/{task_type}/{model}/{task_path_name}/{exp_name}/{task_id}/{agent}_{_}.json"
|
||||||
s3_upload_experiment = f"aws s3 cp {agent_file_path} s3://{bucket_name}/{task_type}/{model}/{exp_name}/{task_id}/{agent}_{_}.json"
|
|
||||||
script_content += f"echo 'Uploading {agent_file_path} to S3'\n"
|
script_content += f"echo 'Uploading {agent_file_path} to S3'\n"
|
||||||
script_content += f"echo '{s3_cmd}'\n"
|
script_content += f"echo '{s3_cmd}'\n"
|
||||||
script_content += f"{s3_cmd}\n"
|
script_content += f"{s3_cmd}\n"
|
||||||
|
@ -283,12 +292,42 @@ def launch_server_experiment(task_path,
|
||||||
script_content += f"sleep 10\n"
|
script_content += f"sleep 10\n"
|
||||||
if s3:
|
if s3:
|
||||||
for agent in agent_names:
|
for agent in agent_names:
|
||||||
script_content += f"aws s3 cp bots/{agent} s3://{bucket_name}/{task_type}/{model}/{exp_name}/bots/{agent} --recursive\n"
|
script_content += f"aws s3 cp bots/{agent} s3://{bucket_name}/{task_type}/{model}/{task_path_name}/{exp_name}/bots/{agent} --recursive\n"
|
||||||
|
|
||||||
# Create a temporary shell script file
|
# Create a temporary shell script file
|
||||||
script_file = f"./tmp/experiment_script_{session_name}.sh"
|
script_file = f"./tmp/experiment_script_{session_name}.sh"
|
||||||
make_script_file_and_run(script_content, session_name, script_file)
|
make_script_file_and_run(script_content, session_name, script_file)
|
||||||
|
|
||||||
|
def make_ops(agent_names, session_name):
|
||||||
|
"""Make the agents operators in the Minecraft world."""
|
||||||
|
print('Making agents operators...')
|
||||||
|
|
||||||
|
cmd = f"node main.js --task_path example_tasks.json --task_id debug_{len(agent_names)}_agent_timeout"
|
||||||
|
|
||||||
|
subprocess.run(["tmux", "send-keys", "-t", session_name, cmd, "C-m"])
|
||||||
|
|
||||||
|
time.sleep(30)
|
||||||
|
|
||||||
|
subprocess.run(["tmux", "send-keys", "-t", "server_" + session_name, f"/op @a", "C-m"])
|
||||||
|
|
||||||
|
agents_op = check_agent_ops(agent_names, ops_file=f"./server_data_{session_name}/ops.json")
|
||||||
|
if agents_op:
|
||||||
|
print("Agents are operators! You are good to go :D")
|
||||||
|
else:
|
||||||
|
print("Agents are not operators! Something went wrong :(")
|
||||||
|
make_ops(agent_names, session_name)
|
||||||
|
|
||||||
|
def check_agent_ops(agent_names, ops_file="ops.json"):
|
||||||
|
with open(ops_file, "r") as f:
|
||||||
|
ops_data = json.load(f)
|
||||||
|
|
||||||
|
ops_names = [op["name"] for op in ops_data]
|
||||||
|
|
||||||
|
for agent in agent_names:
|
||||||
|
if agent not in ops_names:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def make_script_file_and_run(script_content, session_name, file_name):
|
def make_script_file_and_run(script_content, session_name, file_name):
|
||||||
script_dir = os.path.dirname(file_name)
|
script_dir = os.path.dirname(file_name)
|
||||||
os.makedirs(script_dir, exist_ok=True)
|
os.makedirs(script_dir, exist_ok=True)
|
||||||
|
@ -372,6 +411,23 @@ def copy_server_files(source_path, dest_path):
|
||||||
print(f"Server files copied to {dest_path}")
|
print(f"Server files copied to {dest_path}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error copying server files: {e}")
|
print(f"Error copying server files: {e}")
|
||||||
|
time.sleep(10)
|
||||||
|
|
||||||
|
same_files = check_same_files(source_path, dest_path)
|
||||||
|
if not same_files:
|
||||||
|
copy_server_files(source_path, dest_path)
|
||||||
|
print("The destination path does not contain all the same files as the source path.")
|
||||||
|
else:
|
||||||
|
print("The destination path contains all the same files as the source path.")
|
||||||
|
|
||||||
|
def check_same_files(d1, d2):
|
||||||
|
|
||||||
|
items1 = set(os.listdir(d1))
|
||||||
|
items2 = set(os.listdir(d2))
|
||||||
|
|
||||||
|
if items1 != items2:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def delete_server_files(dest_path):
|
def delete_server_files(dest_path):
|
||||||
"""Delete server files from the specified location."""
|
"""Delete server files from the specified location."""
|
||||||
|
|
Loading…
Add table
Reference in a new issue