98 lines
3.1 KiB
TypeScript
98 lines
3.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { buildHistoryContextFromEntries } from "../auto-reply/reply/history.js";
|
|
import { extractTextFromChatContent } from "../shared/chat-content.js";
|
|
import { buildAgentMessageFromConversationEntries } from "./agent-prompt.js";
|
|
|
|
describe("gateway agent prompt", () => {
|
|
it("returns empty for no entries", () => {
|
|
expect(buildAgentMessageFromConversationEntries([])).toBe("");
|
|
});
|
|
|
|
it("returns current body when there is no history", () => {
|
|
expect(
|
|
buildAgentMessageFromConversationEntries([
|
|
{ role: "user", entry: { sender: "User", body: "hi" } },
|
|
]),
|
|
).toBe("hi");
|
|
});
|
|
|
|
it("extracts text from content-array body when there is no history", () => {
|
|
expect(
|
|
buildAgentMessageFromConversationEntries([
|
|
{
|
|
role: "user",
|
|
entry: {
|
|
sender: "User",
|
|
body: [
|
|
{ type: "text", text: "hi" },
|
|
{ type: "image", data: "base64-image", mimeType: "image/png" },
|
|
{ type: "text", text: "there" },
|
|
] as unknown as string,
|
|
},
|
|
},
|
|
]),
|
|
).toBe("hi there");
|
|
});
|
|
|
|
it("uses history context when there is history", () => {
|
|
const entries = [
|
|
{ role: "assistant", entry: { sender: "Assistant", body: "prev" } },
|
|
{ role: "user", entry: { sender: "User", body: "next" } },
|
|
] as const;
|
|
|
|
const expected = buildHistoryContextFromEntries({
|
|
entries: entries.map((e) => e.entry),
|
|
currentMessage: "User: next",
|
|
formatEntry: (e) => `${e.sender}: ${e.body}`,
|
|
});
|
|
|
|
expect(buildAgentMessageFromConversationEntries([...entries])).toBe(expected);
|
|
});
|
|
|
|
it("prefers last tool entry over assistant for current message", () => {
|
|
const entries = [
|
|
{ role: "user", entry: { sender: "User", body: "question" } },
|
|
{ role: "tool", entry: { sender: "Tool:x", body: "tool output" } },
|
|
{ role: "assistant", entry: { sender: "Assistant", body: "assistant text" } },
|
|
] as const;
|
|
|
|
const expected = buildHistoryContextFromEntries({
|
|
entries: [entries[0].entry, entries[1].entry],
|
|
currentMessage: "Tool:x: tool output",
|
|
formatEntry: (e) => `${e.sender}: ${e.body}`,
|
|
});
|
|
|
|
expect(buildAgentMessageFromConversationEntries([...entries])).toBe(expected);
|
|
});
|
|
|
|
it("normalizes content-array bodies in history and current message", () => {
|
|
const entries = [
|
|
{
|
|
role: "assistant",
|
|
entry: {
|
|
sender: "Assistant",
|
|
body: [{ type: "text", text: "prev" }] as unknown as string,
|
|
},
|
|
},
|
|
{
|
|
role: "user",
|
|
entry: {
|
|
sender: "User",
|
|
body: [
|
|
{ type: "text", text: "next" },
|
|
{ type: "text", text: "step" },
|
|
] as unknown as string,
|
|
},
|
|
},
|
|
] as const;
|
|
|
|
const expected = buildHistoryContextFromEntries({
|
|
entries: entries.map((e) => e.entry),
|
|
currentMessage: "User: next step",
|
|
formatEntry: (e) => `${e.sender}: ${extractTextFromChatContent(e.body) ?? ""}`,
|
|
});
|
|
|
|
expect(buildAgentMessageFromConversationEntries([...entries])).toBe(expected);
|
|
});
|
|
});
|