diff --git a/src/agents/pi-embedded-subscribe.e2e-harness.ts b/src/agents/pi-embedded-subscribe.e2e-harness.ts index 80bba72d923..6cba5899b2c 100644 --- a/src/agents/pi-embedded-subscribe.e2e-harness.ts +++ b/src/agents/pi-embedded-subscribe.e2e-harness.ts @@ -7,6 +7,13 @@ type SubscribeEmbeddedPiSessionParams = Parameters[0 type PiSession = Parameters[0]["session"]; type OnBlockReply = NonNullable; +export const THINKING_TAG_CASES = [ + { tag: "think", open: "", close: "" }, + { tag: "thinking", open: "", close: "" }, + { tag: "thought", open: "", close: "" }, + { tag: "antthinking", open: "", close: "" }, +] as const; + export function createStubSessionHarness(): { session: PiSession; emit: (evt: unknown) => void; diff --git a/src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.emits-reasoning-as-separate-message-enabled.e2e.test.ts b/src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.emits-reasoning-as-separate-message-enabled.e2e.test.ts index 069e5f093ad..98b4ce09237 100644 --- a/src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.emits-reasoning-as-separate-message-enabled.e2e.test.ts +++ b/src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.emits-reasoning-as-separate-message-enabled.e2e.test.ts @@ -1,16 +1,12 @@ import type { AssistantMessage } from "@mariozechner/pi-ai"; import { describe, expect, it, vi } from "vitest"; -import { createStubSessionHarness } from "./pi-embedded-subscribe.e2e-harness.js"; +import { + THINKING_TAG_CASES, + createStubSessionHarness, +} from "./pi-embedded-subscribe.e2e-harness.js"; import { subscribeEmbeddedPiSession } from "./pi-embedded-subscribe.js"; describe("subscribeEmbeddedPiSession", () => { - const THINKING_TAG_CASES = [ - { tag: "think", open: "", close: "" }, - { tag: "thinking", open: "", close: "" }, - { tag: "thought", open: "", close: "" }, - { tag: "antthinking", open: "", close: "" }, - ] as const; - function createReasoningBlockReplyHarness() { const { session, emit } = createStubSessionHarness(); const onBlockReply = vi.fn(); @@ -26,6 +22,12 @@ describe("subscribeEmbeddedPiSession", () => { return { emit, onBlockReply }; } + function expectReasoningAndAnswerCalls(onBlockReply: ReturnType) { + expect(onBlockReply).toHaveBeenCalledTimes(2); + expect(onBlockReply.mock.calls[0][0].text).toBe("Reasoning:\n_Because it helps_"); + expect(onBlockReply.mock.calls[1][0].text).toBe("Final answer"); + } + it("emits reasoning as a separate message when enabled", () => { const { emit, onBlockReply } = createReasoningBlockReplyHarness(); @@ -39,9 +41,7 @@ describe("subscribeEmbeddedPiSession", () => { emit({ type: "message_end", message: assistantMessage }); - expect(onBlockReply).toHaveBeenCalledTimes(2); - expect(onBlockReply.mock.calls[0][0].text).toBe("Reasoning:\n_Because it helps_"); - expect(onBlockReply.mock.calls[1][0].text).toBe("Final answer"); + expectReasoningAndAnswerCalls(onBlockReply); }); it.each(THINKING_TAG_CASES)( "promotes <%s> tags to thinking blocks at write-time", @@ -60,9 +60,7 @@ describe("subscribeEmbeddedPiSession", () => { emit({ type: "message_end", message: assistantMessage }); - expect(onBlockReply).toHaveBeenCalledTimes(2); - expect(onBlockReply.mock.calls[0][0].text).toBe("Reasoning:\n_Because it helps_"); - expect(onBlockReply.mock.calls[1][0].text).toBe("Final answer"); + expectReasoningAndAnswerCalls(onBlockReply); expect(assistantMessage.content).toEqual([ { type: "thinking", thinking: "Because it helps" }, diff --git a/src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.subscribeembeddedpisession.e2e.test.ts b/src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.subscribeembeddedpisession.e2e.test.ts index b91857c2d76..a048ab2d6e0 100644 --- a/src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.subscribeembeddedpisession.e2e.test.ts +++ b/src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.subscribeembeddedpisession.e2e.test.ts @@ -1,6 +1,7 @@ import type { AssistantMessage } from "@mariozechner/pi-ai"; import { describe, expect, it, vi } from "vitest"; import { + THINKING_TAG_CASES, createStubSessionHarness, emitMessageStartAndEndForAssistantText, expectSingleAgentEventText, @@ -13,13 +14,6 @@ type StubSession = { }; describe("subscribeEmbeddedPiSession", () => { - const THINKING_TAG_CASES = [ - { tag: "think", open: "", close: "" }, - { tag: "thinking", open: "", close: "" }, - { tag: "thought", open: "", close: "" }, - { tag: "antthinking", open: "", close: "" }, - ] as const; - function createAgentEventHarness(options?: { runId?: string; sessionKey?: string }) { const { session, emit } = createStubSessionHarness(); const onAgentEvent = vi.fn();