refactor: extract shared turn queue runtime (#991)

This commit is contained in:
Charles Packer
2026-02-17 12:58:33 -08:00
committed by GitHub
parent 44d4cc87c1
commit 3728d1ec0c
4 changed files with 148 additions and 57 deletions

View File

@@ -0,0 +1,63 @@
import { describe, expect, test } from "bun:test";
import type { MessageCreate } from "@letta-ai/letta-client/resources/agents/agents";
import {
mergeQueuedTurnInput,
type QueuedTurnInput,
} from "../../queue/turnQueueRuntime";
describe("turnQueueRuntime", () => {
test("merges user and task notification entries with separators", () => {
const queued: QueuedTurnInput<string>[] = [
{ kind: "user", content: "hello" },
{
kind: "task_notification",
text: "<task-notification>done</task-notification>",
},
{ kind: "user", content: "world" },
];
const merged = mergeQueuedTurnInput(queued, {
normalizeUserContent: (content) => content,
});
expect(Array.isArray(merged)).toBe(true);
if (!Array.isArray(merged)) return;
const text = merged.flatMap((part) =>
part.type === "text" ? [part.text] : [],
);
expect(text.join("")).toBe(
"hello\n<task-notification>done</task-notification>\nworld",
);
});
test("preserves multimodal user content", () => {
const content = [
{ type: "text", text: "describe this" },
{
type: "image",
source: { type: "base64", media_type: "image/png", data: "abc" },
},
] as unknown as Exclude<MessageCreate["content"], string>;
const queued: QueuedTurnInput<MessageCreate["content"]>[] = [
{ kind: "user", content },
];
const merged = mergeQueuedTurnInput(queued, {
normalizeUserContent: (userContent) => userContent,
});
expect(Array.isArray(merged)).toBe(true);
if (!Array.isArray(merged)) return;
expect(merged[0]).toEqual(content[0]);
expect(merged[1]).toEqual(content[1]);
});
test("returns null when no queued items exist", () => {
expect(
mergeQueuedTurnInput([], {
normalizeUserContent: (content: string) => content,
}),
).toBeNull();
});
});