Skip to content

Commit fc2569b

Browse files
JRMeyerclaude
andcommitted
fix: Handle Qwen3 chat template continue_final_message incompatibility
Skip trajectories where the final assistant message is stripped by the chat template (e.g., when it only contains <think> content), causing continue_final_message=True to fail. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 01edc64 commit fc2569b

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

src/art/preprocessing/tokenize.py

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -159,23 +159,28 @@ def tokenize_trajectory(
159159
if history.tools is not None
160160
else None
161161
)
162-
chat = cast(
163-
str,
164-
tokenizer.apply_chat_template(
165-
cast(list[dict], messages),
166-
tools=tools, # type: ignore
167-
continue_final_message=True,
168-
tokenize=False,
169-
),
170-
)
171-
original_token_ids = cast(
172-
list[int],
173-
tokenizer.apply_chat_template(
174-
cast(list[dict], messages),
175-
tools=tools, # type: ignore
176-
continue_final_message=True,
177-
),
178-
)
162+
try:
163+
chat = cast(
164+
str,
165+
tokenizer.apply_chat_template(
166+
cast(list[dict], messages),
167+
tools=tools, # type: ignore
168+
continue_final_message=True,
169+
tokenize=False,
170+
),
171+
)
172+
original_token_ids = cast(
173+
list[int],
174+
tokenizer.apply_chat_template(
175+
cast(list[dict], messages),
176+
tools=tools, # type: ignore
177+
continue_final_message=True,
178+
),
179+
)
180+
except ValueError as e:
181+
if "continue_final_message" in str(e):
182+
return None
183+
raise
179184
sentinal_token_id = max(
180185
set(range(cast(int, tokenizer.vocab_size))) - set(original_token_ids)
181186
)

0 commit comments

Comments
 (0)