Support long-running agent turns

This commit is contained in:
Georg Bauer
2026-07-26 11:07:28 +02:00
parent 2a14b93335
commit 3c75b8f6c1
14 changed files with 432 additions and 90 deletions

View File

@@ -196,6 +196,7 @@ impl Tokenizer {
&[ChatTurn {
user: true,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
@@ -255,6 +256,13 @@ impl Tokenizer {
output.extend(self.tokenize_rendered(system_prompt));
}
for (index, message) in messages.iter().enumerate() {
if message.system {
if self.family == ModelFamily::Glm {
output.push(self.system);
}
output.extend(self.tokenize_rendered(&message.content));
continue;
}
if message.tool {
if self.family == ModelFamily::Glm {
output.push(self.observation);

View File

@@ -905,6 +905,7 @@ mod tests {
ChatTurn {
user: true,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
@@ -913,6 +914,7 @@ mod tests {
ChatTurn {
user: false,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
@@ -921,6 +923,7 @@ mod tests {
ChatTurn {
user: true,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
@@ -941,6 +944,33 @@ mod tests {
model.render_continuation("Hello", ReasoningMode::Direct, true),
[128_803, 19_923, 128_804, 128_822]
);
assert_eq!(
model.render_conversation(
"",
&[
ChatTurn {
user: false,
tool: false,
system: true,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
content: "Hello".into(),
},
ChatTurn {
user: true,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
content: "Hello".into(),
},
],
ReasoningMode::Direct,
),
[0, 19_923, 128_803, 19_923, 128_804, 128_822]
);
assert_eq!(
model.render_history(
"",
@@ -948,6 +978,7 @@ mod tests {
ChatTurn {
user: true,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
@@ -956,6 +987,7 @@ mod tests {
ChatTurn {
user: false,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
@@ -969,6 +1001,7 @@ mod tests {
let tool_turn = ChatTurn {
user: false,
tool: true,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
@@ -977,6 +1010,7 @@ mod tests {
let wrapped_user = ChatTurn {
user: true,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
@@ -993,6 +1027,7 @@ mod tests {
ChatTurn {
user: true,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
@@ -1001,6 +1036,7 @@ mod tests {
ChatTurn {
user: false,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: Some("Hello".into()),
reasoning_complete: true,
@@ -1009,6 +1045,7 @@ mod tests {
ChatTurn {
user: true,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,