Skip to content

Commit 8de56cc

Browse files
author
semantic-release
committed
chore: release 0.16.0
1 parent 9b8f3cd commit 8de56cc

2 files changed

Lines changed: 129 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,133 @@
11
# CHANGELOG
22

33

4+
## v0.16.0 (2026-06-12)
5+
6+
### Bug Fixes
7+
8+
- Align GRPO prompt format with SFT training format
9+
([#61](https://github.com/OpenAdaptAI/openadapt-ml/pull/61),
10+
[`04e6e9f`](https://github.com/OpenAdaptAI/openadapt-ml/commit/04e6e9f8321334e3aac6a701a8c68e29e53cb0c6))
11+
12+
The GRPO rollout prompt was missing the "Thought:" line and action history that the SFT training
13+
uses. Models fine-tuned via SFT output "Thought: ...\nAction: CLICK(...)" but the GRPO prompt
14+
didn't prompt for this format, causing verbose free-form output that couldn't be parsed → reward
15+
0.0 → zero gradients.
16+
17+
Changes: - Add "Thought:" and "Action:" prompt lines matching SFT format - Add action_history
18+
parameter for step context - Parser extracts action from "Action: ..." line before regex matching
19+
- Parser handles JSON format {"action_type": "click", "coordinate": [x,y]} - Debug logging of raw
20+
VLM output for zero-reward diagnosis
21+
22+
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
23+
24+
- Include image placeholder in chat template for VLM GRPO
25+
([#59](https://github.com/OpenAdaptAI/openadapt-ml/pull/59),
26+
[`6617e02`](https://github.com/OpenAdaptAI/openadapt-ml/commit/6617e026e564c2b7e04cbeb1bb63e8c8b7a348c7))
27+
28+
Qwen2.5-VL requires <|image_pad|> tokens in the input. These are inserted by apply_chat_template
29+
only when messages include {"type": "image"} content blocks.
30+
31+
Fixed both agent_fn and _compute_rollout_loss.
32+
33+
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
34+
35+
- Increase max_new_tokens to 2048 and make configurable via GRPOConfig
36+
([#62](https://github.com/OpenAdaptAI/openadapt-ml/pull/62),
37+
[`fecf461`](https://github.com/OpenAdaptAI/openadapt-ml/commit/fecf4619ce9ebe3763b90d3f6007a0a31689afe3))
38+
39+
* fix: align GRPO prompt format with SFT training format
40+
41+
The GRPO rollout prompt was missing the "Thought:" line and action history that the SFT training
42+
uses. Models fine-tuned via SFT output "Thought: ...\nAction: CLICK(...)" but the GRPO prompt
43+
didn't prompt for this format, causing verbose free-form output that couldn't be parsed → reward
44+
0.0 → zero gradients.
45+
46+
Changes: - Add "Thought:" and "Action:" prompt lines matching SFT format - Add action_history
47+
parameter for step context - Parser extracts action from "Action: ..." line before regex matching
48+
- Parser handles JSON format {"action_type": "click", "coordinate": [x,y]} - Debug logging of raw
49+
VLM output for zero-reward diagnosis
50+
51+
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
52+
53+
* fix: increase max_new_tokens to 2048 and make configurable
54+
55+
The default of 100 tokens truncated reasoning models mid-thought, producing unparseable output →
56+
DONE → reward 0.0 → zero gradients. Caused 4 failed training runs (~20 GPU-hours wasted).
57+
58+
- Add max_new_tokens to GRPOConfig (default 2048) - Use config value instead of hardcoded 100 - Add
59+
truncation warning when generation hits the limit
60+
61+
---------
62+
63+
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
64+
65+
- Repair broken internal imports, CPU training, and config packaging (OpenAdapt#999)
66+
([#63](https://github.com/OpenAdaptAI/openadapt-ml/pull/63),
67+
[`9b8f3cd`](https://github.com/OpenAdaptAI/openadapt-ml/commit/9b8f3cd8a2e0f95203813338917bc89bae474001))
68+
69+
* fix: repair broken internal imports, CPU training, and config packaging
70+
71+
Fixes the openadapt-ml side of OpenAdaptAI/OpenAdapt#999:
72+
73+
- Add missing update_current_symlink_to_latest() to training/trainer.py; cmd_serve imported it but
74+
it never existed, so `openadapt serve` failed with a misleading "openadapt-ml not installed" error
75+
(bug 2) - scripts/train.py: capture_to_episode(goal=) -> instruction=, matching the actual
76+
signature (bug 3) - scripts/demo_policy.py: import generate_synthetic_episodes instead of the
77+
non-existent generate_synthetic_sessions (bug 4) - Ship configs/ inside the wheel (hatch
78+
force-include) and add resolve_config_path() so installed packages find bundled configs instead of
79+
failing on repo-relative paths (bug 5) - training/trl_trainer.py: pass use_cpu/bf16/fp16 to
80+
SFTConfig based on CUDA availability so CPU-only training no longer raises ValueError (bug 7)
81+
82+
Verified: py_compile on all changed files, isolated functional test of
83+
84+
the symlink helper, and wheel build confirming configs are included.
85+
86+
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
87+
88+
* fix: respect MPS in CPU fallback, prefer run-like dirs for symlink
89+
90+
- use_cpu now stays False on Apple Silicon (MPS) so the previous accelerated path isn't regressed;
91+
only true CPU-only setups get use_cpu=True - update_current_symlink_to_latest prefers directories
92+
containing training_log.json or dashboard.html so a stray top-level "checkpoints" directory from
93+
the old flat layout can't win
94+
95+
* style: ruff format grpo modules (pre-existing violations blocking CI)
96+
97+
These two files fail 'ruff format --check' on main as well; formatting them here so the test matrix
98+
can actually run.
99+
100+
---------
101+
102+
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
103+
104+
### Features
105+
106+
- Add --task-dir support for milestone-based rewards in standalone GRPO trainer
107+
([#60](https://github.com/OpenAdaptAI/openadapt-ml/pull/60),
108+
[`7d095da`](https://github.com/OpenAdaptAI/openadapt-ml/commit/7d095dabbcf39b4146eb3bb5a28d12bde95a6bd7))
109+
110+
* fix: include image placeholder in chat template for VLM GRPO
111+
112+
Qwen2.5-VL requires <|image_pad|> tokens in the input. These are inserted by apply_chat_template
113+
only when messages include {"type": "image"} content blocks.
114+
115+
Fixed both agent_fn and _compute_rollout_loss.
116+
117+
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
118+
119+
* feat: add --task-dir support for milestone-based rewards in standalone GRPO trainer
120+
121+
- GRPOConfig: add task_dir field - reward.py: evaluate_milestones_screenshot() for client-side
122+
reward - trainer.py: load TaskConfigs, auto-populate task_ids, override rewards -
123+
rollout_collector.py: pass task_configs to env - No WAA evaluate endpoint needed — rewards
124+
computed via VLM judge
125+
126+
---------
127+
128+
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
129+
130+
4131
## v0.15.1 (2026-03-21)
5132

6133
### Bug Fixes

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "openadapt-ml"
3-
version = "0.15.1"
3+
version = "0.16.0"
44
description = "Model-agnostic, domain-agnostic ML engine for GUI automation agents"
55
readme = "README.md"
66
requires-python = ">=3.10"
@@ -79,6 +79,7 @@ Homepage = "https://github.com/OpenAdaptAI/openadapt-ml"
7979
Repository = "https://github.com/OpenAdaptAI/openadapt-ml"
8080
Documentation = "https://github.com/OpenAdaptAI/openadapt-ml/tree/main/docs"
8181

82+
8283
[build-system]
8384
requires = ["hatchling"]
8485
build-backend = "hatchling.build"

0 commit comments

Comments
 (0)