feat: enforce final tag parsing for embedded PI

This commit is contained in:
Peter Steinberger
2025-12-24 00:52:33 +00:00
parent bc916dbf35
commit 3fcdd6c9d7
3 changed files with 151 additions and 6 deletions

View File

@@ -0,0 +1,95 @@
import { describe, expect, it, vi } from "vitest";
import { subscribeEmbeddedPiSession } from "./pi-embedded-subscribe.js";
type StubSession = {
subscribe: (fn: (evt: unknown) => void) => () => void;
};
describe("subscribeEmbeddedPiSession", () => {
it("filters to <final> and falls back when tags are malformed", () => {
let handler: ((evt: unknown) => void) | undefined;
const session: StubSession = {
subscribe: (fn) => {
handler = fn;
return () => {};
},
};
const onPartialReply = vi.fn();
const onAgentEvent = vi.fn();
subscribeEmbeddedPiSession({
session: session as unknown as Parameters<
typeof subscribeEmbeddedPiSession
>[0]["session"],
runId: "run",
enforceFinalTag: true,
onPartialReply,
onAgentEvent,
});
handler?.({
type: "message_update",
message: { role: "assistant" },
assistantMessageEvent: {
type: "text_delta",
delta: "<final>Hi there</final>",
},
});
expect(onPartialReply).toHaveBeenCalled();
const firstPayload = onPartialReply.mock.calls[0][0];
expect(firstPayload.text).toBe("Hi there");
onPartialReply.mockReset();
handler?.({
type: "message_end",
message: { role: "assistant" },
});
handler?.({
type: "message_update",
message: { role: "assistant" },
assistantMessageEvent: {
type: "text_delta",
delta: "</final>Oops no start",
},
});
const secondPayload = onPartialReply.mock.calls[0][0];
expect(secondPayload.text).toContain("Oops no start");
});
it("does not require <final> when enforcement is off", () => {
let handler: ((evt: unknown) => void) | undefined;
const session: StubSession = {
subscribe: (fn) => {
handler = fn;
return () => {};
},
};
const onPartialReply = vi.fn();
subscribeEmbeddedPiSession({
session: session as unknown as Parameters<
typeof subscribeEmbeddedPiSession
>[0]["session"],
runId: "run",
onPartialReply,
});
handler?.({
type: "message_update",
message: { role: "assistant" },
assistantMessageEvent: {
type: "text_delta",
delta: "Hello world",
},
});
const payload = onPartialReply.mock.calls[0][0];
expect(payload.text).toBe("Hello world");
});
});