zed/crates/eval_cli/zed_eval/verifier.py
Anant Goel 10f501d700
eval_cli: Add remote benchmark orchestration (#59802)
Summary:

- Add the `zed-eval` Python CLI for Modal/Harbor/Pier benchmark
orchestration, including content-addressed remote builds, run/suite
management, reporting, rejudge, baseline, and cleanup workflows.
- Extend `eval-cli` for remote evals with provider/model overrides and
step/tool-call metrics in `result.json`.
- Add install/source-run helper scripts so `zed-eval` can be installed
or run from the checkout without manually setting `PYTHONPATH`.
- Harden the remote harness wrappers around exit-code preservation,
archive extraction, custom secret wiring, and Harbor/Pier option parity,
with regression coverage.

Testing:

- Using the CLI for two weeks
- `PYTHONPATH=crates/eval_cli python3 -m compileall -q
crates/eval_cli/zed_eval`
- `uv run --project crates/eval_cli/zed_eval python -m unittest discover
-s crates/eval_cli/zed_eval/tests`
- `bash -n crates/eval_cli/script/install-zed-eval
crates/eval_cli/script/zed-eval`
- `cargo check -p eval_cli`
- `cargo fmt --package eval_cli -- --check`
- `cargo test -p eval_cli --no-run`
- `./script/clippy -p eval_cli`

Release Notes:

- N/A
2026-06-24 15:32:41 +00:00

59 lines
2.2 KiB
Python

from __future__ import annotations
from harbor.models.verifier.result import VerifierResult
from harbor.utils.env import resolve_env_vars
from harbor.verifier.verifier import Verifier
from .judge_proxy import JUDGE_PROXY_ENSURE_SCRIPT, JUDGE_PROXY_SCRIPT
class ZedJudgeProxyVerifier(Verifier):
async def verify(self) -> VerifierResult:
await self._ensure_judge_proxy()
return await super().verify()
def _merged_verifier_env(self) -> dict[str, str]:
return {
**self.task.config.verifier.env,
**(self.verifier_env or {}),
**self.override_env,
}
async def _ensure_judge_proxy(self) -> None:
merged_env = self._merged_verifier_env()
if not merged_env.get("ZED_JUDGE_UPSTREAM"):
return
env = resolve_env_vars(merged_env)
result = await self.environment.exec(
command=(
"set -e\n"
"mkdir -p /usr/local/lib /usr/local/bin\n"
"cat > /usr/local/lib/zed_judge_proxy.py <<'ZED_PROXY_EOF'\n"
f"{JUDGE_PROXY_SCRIPT}"
"ZED_PROXY_EOF\n"
"cat > /usr/local/bin/ensure-judge-proxy <<'ZED_ENSURE_EOF'\n"
f"{JUDGE_PROXY_ENSURE_SCRIPT}"
"ZED_ENSURE_EOF\n"
"chmod +x /usr/local/bin/ensure-judge-proxy\n"
"ensure-judge-proxy\n"
"python3 - <<'ZED_PROXY_CHECK_EOF'\n"
"import os, socket\n"
"port = int(os.environ.get('ZED_JUDGE_PROXY_PORT', '8089'))\n"
"with socket.create_connection(('127.0.0.1', port), timeout=5):\n"
" pass\n"
"ZED_PROXY_CHECK_EOF\n"
"if [ -f /tmp/zed-judge-proxy.log ]; then "
"tail -2 /tmp/zed-judge-proxy.log; fi\n"
),
user="root",
env=env,
)
if result.return_code != 0:
output = "\n".join(
part for part in (result.stdout, result.stderr) if part
).strip()
detail = f": {output}" if output else ""
raise RuntimeError(
f"Failed to install or start judge proxy (exit {result.return_code}){detail}"
)