Skip to content

Commit 0352890

Browse files
committed
fix(cache): fingerprint stable prepends before dispatch
1 parent 1abc7f6 commit 0352890

2 files changed

Lines changed: 16 additions & 14 deletions

File tree

‎crates/tinyagents-harness/src/agent_loop/test.rs‎

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7013,6 +7013,7 @@ fn changing_or_prepending_a_declared_system_message_invalidates_the_prefix() {
70137013

70147014
let mut prepended = original.clone();
70157015
crate::cache::prepend_system_message(&mut prepended, "new instruction".into());
7016+
assert_ne!(original.prompt_fingerprint, prepended.prompt_fingerprint);
70167017
super::run_loop::refresh_prompt_cache_fingerprint(&mut prepended);
70177018
assert_ne!(
70187019
crate::cache::prompt_cache_key(&original),
@@ -7207,7 +7208,6 @@ fn zero_prefix_stable_prepend_and_tools_keep_both_segments_in_either_order() {
72077208

72087209
#[test]
72097210
fn tools_only_prefix_survives_a_leading_compaction_summary() {
7210-
use tinyinference_llm::model::{PromptSegment, SegmentRole};
72117211
use tinyinference_llm::tool::ToolSchema;
72127212

72137213
let tool = ToolSchema::new(
@@ -7216,19 +7216,12 @@ fn tools_only_prefix_survives_a_leading_compaction_summary() {
72167216
serde_json::json!({"type": "object"}),
72177217
);
72187218
let mut before = ModelRequest::new(vec![Message::user("first")]).with_tools(vec![tool.clone()]);
7219-
before.cache_segments = vec![PromptSegment {
7220-
id: "tools".into(),
7221-
role: SegmentRole::Tools,
7222-
cacheable: true,
7223-
}];
7224-
before.prompt_fingerprint = Some("declared-tools".into());
7225-
let mut after = ModelRequest::new(vec![
7226-
Message::system("changing history summary"),
7227-
Message::user("later"),
7228-
])
7229-
.with_tools(vec![tool]);
7230-
after.cache_segments = before.cache_segments.clone();
7231-
after.prompt_fingerprint = before.prompt_fingerprint.clone();
7219+
super::run_loop::mark_empty_frozen_prefix(&mut before, Some(0));
7220+
let mut after = ModelRequest::new(vec![Message::user("later")]).with_tools(vec![tool]);
7221+
super::run_loop::mark_empty_frozen_prefix(&mut after, Some(0));
7222+
after
7223+
.messages
7224+
.insert(0, Message::system("changing history summary"));
72327225

72337226
super::run_loop::refresh_prompt_cache_fingerprint(&mut before);
72347227
super::run_loop::refresh_prompt_cache_fingerprint(&mut after);

‎crates/tinyagents-harness/src/cache/layout.rs‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ pub(crate) fn prepend_system_message(request: &mut ModelRequest, text: String) {
146146
];
147147
let mut prompt = crate::prompt::PromptBuilder::new();
148148
prompt.push_system_messages(&request.messages[..1]);
149+
if !request.tools.is_empty() {
150+
prompt.push_tools_segment("tools", request.tools.clone());
151+
}
149152
request.prompt_fingerprint = prompt.build(Vec::new()).prompt_fingerprint;
150153
return;
151154
}
@@ -159,6 +162,12 @@ pub(crate) fn prepend_system_message(request: &mut ModelRequest, text: String) {
159162
})
160163
.collect();
161164
request.cache_segments.append(&mut suffix);
165+
let mut prompt = crate::prompt::PromptBuilder::new();
166+
prompt.push_system_messages(&request.messages[..count + 1]);
167+
if !request.tools.is_empty() {
168+
prompt.push_tools_segment("tools", request.tools.clone());
169+
}
170+
request.prompt_fingerprint = prompt.build(Vec::new()).prompt_fingerprint;
162171
}
163172
}
164173

0 commit comments

Comments
 (0)