Proposal: EvalPort adapter to export ExpResult data as portable eval results
まだ誰も着手していません。
評価
調査の方向性
Start with browsergym/experiments/src/browsergym/experiments/loop.py and read how ExpResult exposes summary_info and exp_args. The issue proposes a standalone adapter but does not establish whether maintainers want it in this repository or define an accepted interface, so clarify scope before starting. If approved, the proposal describes a standalone package with tests and a README; done would include converting results and validating the result set.
索引モデルが issue の本文から書いたものです。
説明
EvalPort (https://github.com/adhabnr-ux/evalport) is a small open interchange spec + SDK (evalport-sdk on PyPI) for portable LLM/agent eval datasets and results, so results produced by one framework can be validated and read by tooling that doesn't know that framework's internals.
I read through browsergym/experiments/src/browsergym/experiments/loop.py and think BrowserGym's ExpResult is a genuinely good fit, not just eval-adjacent:
get_exp_result(exp_dir)/yield_all_exp_results(savedir_base)already give you a per-task-run iterator over a benchmark run.ExpResult.summary_infois a real structured per-episode record:n_steps,cum_reward,cum_raw_reward,terminated,truncated,err_msg,stack_trace, plus flattenedstats.*(aggregatedStepInfo.stats, itself built fromAbstractBrowserTask.validate()'s(reward, done, message, info)return).ExpResult.exp_args(ExpArgs→agent_args,env_args.task_name,env_args.task_seed) gives a stable per-run identifier.
That maps cleanly onto EvalPort's per-test-case result model: one ExpResult -> one result record (id from task_name/task_seed, pass/fail from terminated + absence of err_msg, score from cum_reward, everything else as metadata).
Sketch of what a zero-footprint browsergym-openeval-adapter package would let you do:
# today
from browsergym.experiments import yield_all_exp_results
for exp_result in yield_all_exp_results("./results/my_run"):
summary = exp_result.summary_info # n_steps, cum_reward, terminated, truncated, err_msg, stats.*
args = exp_result.exp_args # env_args.task_name, env_args.task_seed
print(args.env_args.task_name, summary["cum_reward"], summary.get("terminated"))
# with an adapter
from browsergym_openeval_adapter import results_to_openeval
from openeval.validate import validate_result_set
result_set = results_to_openeval(yield_all_exp_results("./results/my_run"))
validate_result_set(result_set)
# each ExpResult becomes one OpenEval result:
# id = f"{args.env_args.task_name}_{args.env_args.task_seed}"
# passed = bool(summary.get("terminated")) and not summary.get("err_msg")
# score = summary.get("cum_reward")
# metadata = {"n_steps": ..., "cum_raw_reward": ..., "stack_trace": ..., **stats}
This would let anyone who runs BrowserGym benchmarks (MiniWoB, WebArena, WorkArena, etc.) drop their savedir_base results into any OpenEval-consuming tool without writing custom parsing against the pickle/json layout.
Happy to build this myself and open it as a PR (adapters/browsergym-openeval-adapter/, standalone installable package, depends on evalport-sdk, includes tests + README) if that's of interest — just wanted to check first given BrowserGym has no CONTRIBUTING.md spelling out a preferred process for this kind of thing.
— Sahi, independent contributor, maintainer of EvalPort
- 主要言語
- Python
- スター
- 1.4k
- フォーク
- 202
- 平均マージ
- 12日 2時間
- マージ済み PR(30日)
- 1
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
ServiceNow/BrowserGym のほかの issue
-
[Feature]: Add webarena_verified_hard benchmark subset configuration対応中かも @sriram687 が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
ServiceNow/BrowserGym#415 ·
-
WebArena-Verified reward averages evaluator scores instead of using the benchmark's task score (partial credit for failed tasks)対応中かも @salma2vec が 4 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 32/100
ServiceNow/BrowserGym#412 ·
-
full_reset() gives no signal whether the environment was reset; skipped reset is indistinguishable from a successful one対応中かも @Tharun-Varshan-S が 6 日前に担当しました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 38/100
ServiceNow/BrowserGym#406 · コメント 3 件 ·
-
AssistantBench scorer treats a thousands separator as a decimal point: "3,080,000" scores 0 against gold 3080000, while "1,000" scores 1.0 against gold 1対応中かも @Andiii208 が 25 日前に担当しました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 25/100
ServiceNow/BrowserGym#404 · コメント 1 件 ·
-
`miniwob.find-greatest` can be marked successful after selecting a non-maximum card対応中かも @jstar0 が 101 日前に担当しました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
ServiceNow/BrowserGym#392 ·
ServiceNow/BrowserGym の issue をすべて見る
似ている issue
-
follow-up
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
modelscope/modelscope#1833 ·
メンテナーはふだん 1 日以内に返信
-
ocr_data_to_elements() raises AttributeError when a layout element is a List対応中かも @Eapp1e が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 79/100
Unstructured-IO/unstructured#4616 ·
メンテナーはふだん 1 日以内に返信