Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test runs only with pattern: os != 'android'
- Manifest: browser/components/aiwindow/models/tests/xpcshell/xpcshell.toml
/**
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/**
* Testing Strategy for compactMessages (Prompt Compaction)
*
* This suite verifies the middleware's structural safety and inter-turn
* deduplication logic. Coverage includes:
*
* - test_no_tool_calls_bypass: Verifies arrays without tool calls are safely deep-cloned and passed through unmodified.
* - test_basic_deduplication: Verifies older page reads are replaced with placeholders when the exact same URL is read in a later turn.
* - test_multi_url_partial_deduplication: Verifies precise index-matching when only a subset of URLs overlap across multi-URL requests.
* - test_global_failsafe_non_array: Verifies invalid non-array inputs are safely bypassed without throwing errors.
* - test_granular_failsafe_bad_json: Verifies malformed JSON arguments/contents are skipped gracefully without crashing the pipeline.
*/
const { compactMessages } = ChromeUtils.importESModule(
"moz-src:///browser/components/aiwindow/models/PromptOptimizer.sys.mjs"
);
// test: No tool calls present, should return the exact same array
add_task(async function test_no_tool_calls_bypass() {
const originalMessages = [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Hello!" },
{ role: "assistant", content: "Hi there!" },
];
const optimized = compactMessages(originalMessages);
Assert.deepEqual(
optimized,
originalMessages,
"Array without tool calls should remain completely unchanged."
);
Assert.notEqual(
optimized,
originalMessages,
"The returned array must be a deep clone, not the same reference."
);
});
// test: Basic deduplication of a single URL read twice
add_task(async function test_basic_deduplication() {
const url = "https://example.com/article";
const originalMessages = [
{
role: "assistant",
content: "",
tool_calls: [
{
id: "call_older",
type: "function",
function: {
name: "get_page_content",
arguments: JSON.stringify({ url_list: [url] }),
},
},
],
},
{
role: "tool",
name: "get_page_content",
tool_call_id: "call_older",
content: JSON.stringify(["[Heavy DOM Content - Older]"]),
},
{
role: "assistant",
content: "",
tool_calls: [
{
id: "call_newer",
type: "function",
function: {
name: "get_page_content",
arguments: JSON.stringify({ url_list: [url] }),
},
},
],
},
{
role: "tool",
name: "get_page_content",
tool_call_id: "call_newer",
content: JSON.stringify(["[Heavy DOM Content - Newer]"]),
},
];
const optimized = compactMessages(originalMessages);
const oldToolResponse = JSON.parse(optimized[1].content);
const newToolResponse = JSON.parse(optimized[3].content);
Assert.ok(
oldToolResponse[0].includes("Content omitted"),
"Older redundant payload should be replaced with the omitted placeholder."
);
Assert.equal(
newToolResponse[0],
"[Heavy DOM Content - Newer]",
"The newest payload must remain fully intact."
);
});
// test: Multi-URL array where only one URL overlaps
add_task(async function test_multi_url_partial_deduplication() {
const urlA = "https://site.com/a";
const urlB = "https://site.com/b";
const urlC = "https://site.com/c";
const originalMessages = [
{
role: "assistant",
content: "",
tool_calls: [
{
id: "call_multi_1",
type: "function",
function: {
name: "get_page_content",
arguments: JSON.stringify({ url_list: [urlA, urlB] }),
},
},
],
},
{
role: "tool",
name: "get_page_content",
tool_call_id: "call_multi_1",
content: JSON.stringify(["[Content A1]", "[Content B1]"]),
},
// Later in the chat, the AI rereads URL B, but introduces a new URL C
{
role: "assistant",
content: "",
tool_calls: [
{
id: "call_multi_2",
type: "function",
function: {
name: "get_page_content",
arguments: JSON.stringify({ url_list: [urlB, urlC] }),
},
},
],
},
{
role: "tool",
name: "get_page_content",
tool_call_id: "call_multi_2",
content: JSON.stringify(["[Content B2]", "[Content C1]"]),
},
];
const optimized = compactMessages(originalMessages);
const firstToolResponse = JSON.parse(optimized[1].content);
const secondToolResponse = JSON.parse(optimized[3].content);
// Assertions for Call 1
Assert.equal(
firstToolResponse[0],
"[Content A1]",
"URL A was not reread, so its original content should be preserved."
);
Assert.ok(
firstToolResponse[1].includes("Content omitted"),
"URL B was reread later, so the older Content B1 should be dropped."
);
// Assertions for Call 2
Assert.equal(
secondToolResponse[0],
"[Content B2]",
"The newer Content B2 must be preserved."
);
Assert.equal(
secondToolResponse[1],
"[Content C1]",
"The new Content C1 must be preserved."
);
});
// test: Global Failsafe - Returns input if not an array
add_task(async function test_global_failsafe_non_array() {
const invalidInput = {
role: "user",
content: "I am an object, not an array",
};
const optimized = compactMessages(invalidInput);
Assert.equal(
optimized,
invalidInput,
"Should safely return the original input if it is not an array."
);
});
// test: Granular Failsafe - Gracefully handles hallucinated/malformed JSON
add_task(async function test_granular_failsafe_bad_json() {
const originalMessages = [
{
role: "assistant",
content: "",
tool_calls: [
{
id: "call_bad_json",
type: "function",
function: {
name: "get_page_content",
arguments: "{ bad_json: missing_quotes }", // Invalid JSON string
},
},
],
},
{
role: "tool",
name: "get_page_content",
tool_call_id: "call_bad_json",
content: "{ not_an_array_anyway }", // Invalid JSON content
},
];
let optimized;
let errorThrown = false;
try {
optimized = compactMessages(originalMessages);
} catch (e) {
errorThrown = true;
}
Assert.ok(
!errorThrown,
"Optimizer should catch bad JSON and not throw an error."
);
Assert.deepEqual(
optimized,
originalMessages,
"Optimizer should skip malformed tools and return the array structurally intact."
);
});