|
from openhands.core.config import AppConfig
|
|
from openhands.runtime.plugins import PluginRequirement
|
|
|
|
DEFAULT_PYTHON_PREFIX = [
|
|
'/openhands/micromamba/bin/micromamba',
|
|
'run',
|
|
'-n',
|
|
'openhands',
|
|
'poetry',
|
|
'run',
|
|
]
|
|
|
|
|
|
def get_action_execution_server_startup_command(
|
|
server_port: int,
|
|
plugins: list[PluginRequirement],
|
|
app_config: AppConfig,
|
|
python_prefix: list[str] = DEFAULT_PYTHON_PREFIX,
|
|
use_nice_for_root: bool = True,
|
|
):
|
|
sandbox_config = app_config.sandbox
|
|
|
|
|
|
plugin_args = []
|
|
if plugins is not None and len(plugins) > 0:
|
|
plugin_args = ['--plugins'] + [plugin.name for plugin in plugins]
|
|
|
|
|
|
browsergym_args = []
|
|
if sandbox_config.browsergym_eval_env is not None:
|
|
browsergym_args = [
|
|
'--browsergym-eval-env'
|
|
] + sandbox_config.browsergym_eval_env.split(' ')
|
|
|
|
is_root = not app_config.run_as_openhands
|
|
|
|
base_cmd = [
|
|
*python_prefix,
|
|
'python',
|
|
'-u',
|
|
'-m',
|
|
'openhands.runtime.action_execution_server',
|
|
str(server_port),
|
|
'--working-dir',
|
|
app_config.workspace_mount_path_in_sandbox,
|
|
*plugin_args,
|
|
'--username',
|
|
'openhands' if app_config.run_as_openhands else 'root',
|
|
'--user-id',
|
|
str(sandbox_config.user_id),
|
|
*browsergym_args,
|
|
]
|
|
|
|
if is_root and use_nice_for_root:
|
|
|
|
cmd_str = ' '.join(base_cmd)
|
|
return [
|
|
'nice',
|
|
'-n',
|
|
'-20',
|
|
'sh',
|
|
'-c',
|
|
f'echo -1000 > /proc/self/oom_score_adj && exec {cmd_str}',
|
|
]
|
|
else:
|
|
|
|
return base_cmd
|
|
|