terminus_env / client.py
burtenshaw's picture
burtenshaw HF Staff
Upload folder using huggingface_hub
3661dd4 verified
Raw
History Blame Contribute Delete
1.64 kB
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""Client for the Terminus environment."""
from typing import Any
from openenv.core.mcp_client import MCPToolClient
from .models import CommandResult, TerminusState
class TerminusEnv(MCPToolClient):
"""MCP client for calling the Terminus single-rollout tool."""
def _parse_state(self, payload: dict[str, Any]) -> TerminusState:
"""Convert server state payloads to the Terminus state model."""
def command_results(name: str) -> list[CommandResult]:
values = payload.get(name, [])
if not isinstance(values, list):
return []
return [
value if isinstance(value, CommandResult) else CommandResult(**value)
for value in values
if isinstance(value, dict) or isinstance(value, CommandResult)
]
return TerminusState(
episode_id=payload.get("episode_id"),
step_count=payload.get("step_count", 0),
sandbox_id=payload.get("sandbox_id"),
setup_results=command_results("setup_results"),
verify_commands=list(payload.get("verify_commands", []) or []),
verify_results=command_results("verify_results"),
commands=command_results("commands"),
submitted_answer=payload.get("submitted_answer"),
last_reward=payload.get("last_reward"),
last_error=payload.get("last_error"),
)