Add kaggle/train_grpo.py
Browse files- kaggle/train_grpo.py +62 -1
kaggle/train_grpo.py
CHANGED
|
@@ -48,6 +48,7 @@ def _ensure_package() -> None:
|
|
| 48 |
token=token,
|
| 49 |
allow_patterns=["src/deepagents_rl/**"],
|
| 50 |
local_dir=str(root),
|
|
|
|
| 51 |
)
|
| 52 |
pkg_parent = root / "src"
|
| 53 |
if str(pkg_parent) not in sys.path:
|
|
@@ -498,13 +499,45 @@ def make_eval_before_save_callback(
|
|
| 498 |
if wandb.run is not None:
|
| 499 |
wandb_run_id = wandb.run.id
|
| 500 |
mean_r = sum(float(r["reward_total"]) for r in results) / max(len(results), 1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 501 |
wandb.log(
|
| 502 |
{
|
| 503 |
"eval/mean_reward_total": mean_r,
|
| 504 |
-
"eval/mean_pass_frac": sum(
|
|
|
|
|
|
|
| 505 |
/ max(len(results), 1),
|
| 506 |
"eval/n_resolved": sum(1 for r in results if r.get("resolved")),
|
|
|
|
| 507 |
"eval/checkpoint_step": step,
|
|
|
|
| 508 |
},
|
| 509 |
step=step,
|
| 510 |
)
|
|
@@ -742,12 +775,40 @@ def main(cfg: Cfg | None = None) -> None:
|
|
| 742 |
Path(output_dir, "ckpt_eval_step_0.json").write_text(
|
| 743 |
json.dumps(base_summary | {"results": baseline}, indent=2), encoding="utf-8"
|
| 744 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 745 |
wandb.log(
|
| 746 |
{
|
| 747 |
"eval/mean_pass_frac": base_summary["mean_pass_frac"],
|
| 748 |
"eval/mean_reward_total": base_summary["mean_reward_total"],
|
| 749 |
"eval/n_resolved": base_summary.get("n_resolved", 0),
|
|
|
|
|
|
|
| 750 |
"eval/checkpoint_step": 0,
|
|
|
|
| 751 |
"langfuse/ckpt_trace_id": base_summary.get("langfuse_trace_id"),
|
| 752 |
},
|
| 753 |
step=0,
|
|
|
|
| 48 |
token=token,
|
| 49 |
allow_patterns=["src/deepagents_rl/**"],
|
| 50 |
local_dir=str(root),
|
| 51 |
+
force_download=True,
|
| 52 |
)
|
| 53 |
pkg_parent = root / "src"
|
| 54 |
if str(pkg_parent) not in sys.path:
|
|
|
|
| 499 |
if wandb.run is not None:
|
| 500 |
wandb_run_id = wandb.run.id
|
| 501 |
mean_r = sum(float(r["reward_total"]) for r in results) / max(len(results), 1)
|
| 502 |
+
mean_tools = sum(float(r.get("n_tool_calls") or 0) for r in results) / max(
|
| 503 |
+
len(results), 1
|
| 504 |
+
)
|
| 505 |
+
table = wandb.Table(
|
| 506 |
+
columns=[
|
| 507 |
+
"task_id",
|
| 508 |
+
"reward_total",
|
| 509 |
+
"pass_frac",
|
| 510 |
+
"resolved",
|
| 511 |
+
"resolution",
|
| 512 |
+
"n_tool_calls",
|
| 513 |
+
"tools_used",
|
| 514 |
+
"langfuse_trace_id",
|
| 515 |
+
"completion",
|
| 516 |
+
]
|
| 517 |
+
)
|
| 518 |
+
for r in results:
|
| 519 |
+
table.add_data(
|
| 520 |
+
str(r.get("task_id") or ""),
|
| 521 |
+
float(r.get("reward_total") or 0),
|
| 522 |
+
float(r.get("pass_frac") or 0),
|
| 523 |
+
bool(r.get("resolved")),
|
| 524 |
+
str(r.get("resolution") or ""),
|
| 525 |
+
int(r.get("n_tool_calls") or 0),
|
| 526 |
+
",".join(r.get("tools_used") or []),
|
| 527 |
+
str(r.get("langfuse_trace_id") or ""),
|
| 528 |
+
str(r.get("completion") or "")[:1500],
|
| 529 |
+
)
|
| 530 |
wandb.log(
|
| 531 |
{
|
| 532 |
"eval/mean_reward_total": mean_r,
|
| 533 |
+
"eval/mean_pass_frac": sum(
|
| 534 |
+
float(r["pass_frac"]) for r in results
|
| 535 |
+
)
|
| 536 |
/ max(len(results), 1),
|
| 537 |
"eval/n_resolved": sum(1 for r in results if r.get("resolved")),
|
| 538 |
+
"eval/mean_n_tool_calls": mean_tools,
|
| 539 |
"eval/checkpoint_step": step,
|
| 540 |
+
"eval/episodes": table,
|
| 541 |
},
|
| 542 |
step=step,
|
| 543 |
)
|
|
|
|
| 775 |
Path(output_dir, "ckpt_eval_step_0.json").write_text(
|
| 776 |
json.dumps(base_summary | {"results": baseline}, indent=2), encoding="utf-8"
|
| 777 |
)
|
| 778 |
+
base_table = wandb.Table(
|
| 779 |
+
columns=[
|
| 780 |
+
"task_id",
|
| 781 |
+
"reward_total",
|
| 782 |
+
"pass_frac",
|
| 783 |
+
"resolved",
|
| 784 |
+
"resolution",
|
| 785 |
+
"n_tool_calls",
|
| 786 |
+
"tools_used",
|
| 787 |
+
"langfuse_trace_id",
|
| 788 |
+
"completion",
|
| 789 |
+
]
|
| 790 |
+
)
|
| 791 |
+
for r in baseline:
|
| 792 |
+
base_table.add_data(
|
| 793 |
+
str(r.get("task_id") or ""),
|
| 794 |
+
float(r.get("reward_total") or 0),
|
| 795 |
+
float(r.get("pass_frac") or 0),
|
| 796 |
+
bool(r.get("resolved")),
|
| 797 |
+
str(r.get("resolution") or ""),
|
| 798 |
+
int(r.get("n_tool_calls") or 0),
|
| 799 |
+
",".join(r.get("tools_used") or []),
|
| 800 |
+
str(r.get("langfuse_trace_id") or ""),
|
| 801 |
+
str(r.get("completion") or "")[:1500],
|
| 802 |
+
)
|
| 803 |
wandb.log(
|
| 804 |
{
|
| 805 |
"eval/mean_pass_frac": base_summary["mean_pass_frac"],
|
| 806 |
"eval/mean_reward_total": base_summary["mean_reward_total"],
|
| 807 |
"eval/n_resolved": base_summary.get("n_resolved", 0),
|
| 808 |
+
"eval/mean_n_tool_calls": sum(float(r.get("n_tool_calls") or 0) for r in baseline)
|
| 809 |
+
/ max(len(baseline), 1),
|
| 810 |
"eval/checkpoint_step": 0,
|
| 811 |
+
"eval/episodes": base_table,
|
| 812 |
"langfuse/ckpt_trace_id": base_summary.get("langfuse_trace_id"),
|
| 813 |
},
|
| 814 |
step=0,
|