t8y2/dbx · error · RuntimeError

{candidate.name} {method}: {json.dumps(response['error'])}

Error message

{candidate.name} {method}: {json.dumps(response['error'])}

What it means

When the agent replies with a JSON-RPC response whose `error` field is non-null, AgentProcess.call re-raises it as a RuntimeError formatted as "<candidate> <method>: <json error>". It surfaces server-side JSON-RPC application errors from the agent to the benchmark driver.

Source

Thrown at agents/drivers/argo-go/bench/agent_compare.py:106

            "id": request_id,
            "method": method,
            "params": params or {},
        }
        try:
            assert self.process.stdin is not None
            with self.write_lock:
                self.process.stdin.write(json.dumps(request, separators=(",", ":")) + "\n")
                self.process.stdin.flush()
            response = response_queue.get(timeout=env_float("BENCH_RPC_TIMEOUT", 180.0))
        except queue.Empty as error:
            raise TimeoutError(self._failure(f"timed out during {method}")) from error
        finally:
            with self.request_lock:
                self.pending.pop(request_id, None)
        if isinstance(response, Exception):
            raise response
        if response.get("error") is not None:
            raise RuntimeError(
                f"{self.candidate.name} {method}: "
                f"{json.dumps(response['error'], ensure_ascii=False)}"
            )
        return response.get("result")

    def rss_kib(self) -> int:
        if self.candidate.rss_command:
            output = subprocess.check_output(
                self.candidate.rss_command,
                shell=True,
                text=True,
            ).strip()
            return int(output or "0")
        status_path = Path(f"/proc/{self.process.pid}/status")
        if status_path.is_file():
            for line in status_path.read_text().splitlines():
                if line.startswith("VmRSS:"):
                    return int(line.split()[1])

View on GitHub (pinned to c0390bff16)

Solutions

  1. Read the embedded JSON error object in the message for the agent's error code and message and fix the request accordingly
  2. Validate the workload SQL and method names in configured_workloads against the agent's supported protocol
  3. Confirm the agent's backend (Hive/TDengine) connectivity and credentials before the run
  4. Catch RuntimeError per candidate in benchmark_workload and skip/mark the candidate as failed instead of aborting the whole comparison
  5. Pin agent and bench script versions so method/param contracts match

Example fix

// before
rows = process.call("execute_query", {"sql": sql})
// after
try:
    rows = process.call("execute_query", {"sql": sql})
except RuntimeError as e:
    print(f"candidate {process.candidate.name} failed RPC: {e}")
    raise  # or continue to next candidate
Defensive patterns

Strategy: try-catch

Validate before calling

SUPPORTED_METHODS = {"execute_query", "execute_query_page", "close"}
assert workload["method"] in SUPPORTED_METHODS, f"agent does not implement {workload['method']}"

Try / catch

try:
    result = process.call(method, params)
except RuntimeError as e:
    err = e.args[0].split(": ", 1)[-1]
    detail = json.loads(err)  # agent's error object: code/message
    handle_rpc_error(method, detail)

Prevention

When it happens

Trigger: Any call() where the agent returns {"error": ...}: invalid SQL passed by execute_workload, unknown method name, missing/invalid params (e.g. bad agentSessionId), backend connection failure inside the agent, or probe_failure_semantics deliberately triggering an error response.

Common situations: Typo in workload method name in configured_workloads; SQL referencing a nonexistent table; agent not connected to Hive/TDengine backend; sending paged parameters the agent version doesn't support.

Related errors


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/f6dfb6727aa0e19e. Report an issue: GitHub.