54 lines
1.8 KiB
JavaScript
54 lines
1.8 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import { normalizeContext } from "@earendil-works/pi-ai";
|
|
import { mapContextToChat } from "../src/context-map.ts";
|
|
|
|
const tool = (name) => ({
|
|
name,
|
|
description: name,
|
|
parameters: { type: "object", properties: {} },
|
|
});
|
|
|
|
// Regression for #7: Pi 0.86 moves prompt and tools into system messages.
|
|
test("preserves the prompt and tools from a normalized transcript", () => {
|
|
const read = tool("read");
|
|
const context = normalizeContext({
|
|
systemPrompt: "Inspect the repository.",
|
|
tools: [read],
|
|
messages: [{ role: "user", content: "Read README", timestamp: 1 }],
|
|
});
|
|
assert.deepEqual(mapContextToChat(context), {
|
|
systemPrompt: "Inspect the repository.",
|
|
messages: [
|
|
{ role: "user", content: "Read README" },
|
|
],
|
|
tools: [read],
|
|
});
|
|
});
|
|
|
|
test("applies later instruction, section, and tool changes", () => {
|
|
const bash = tool("bash");
|
|
const context = {
|
|
messages: [
|
|
{ role: "system", content: "Inspect the repository.", sections: { policy: "Old policy", obsolete: "Remove me" }, toolsAdded: [tool("read")], timestamp: 0 },
|
|
{ role: "user", content: "Continue", timestamp: 1 },
|
|
{ role: "system", content: "Use bash.", sections: { policy: "Do not edit.", obsolete: null }, toolsRemoved: [{ name: "read" }], toolsAdded: [bash], timestamp: 2 },
|
|
],
|
|
};
|
|
assert.deepEqual(mapContextToChat(context), {
|
|
systemPrompt: "Inspect the repository.\n\nUse bash.\n\nDo not edit.",
|
|
messages: [
|
|
{ role: "user", content: "Continue" },
|
|
],
|
|
tools: [bash],
|
|
});
|
|
});
|
|
|
|
test("accepts an empty transcript", () => {
|
|
assert.deepEqual(mapContextToChat(normalizeContext({ messages: [] })), {
|
|
systemPrompt: undefined,
|
|
messages: [],
|
|
tools: [],
|
|
});
|
|
});
|