Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 40dbdf62e8952dd6c5afcb9ce2a73199f3f532a6 Co-authored-by: echoVic <16428813+echoVic@users.noreply.github.com> Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com> Reviewed-by: @gumadeiras
36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import type { AssistantMessage } from "@mariozechner/pi-ai";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import { createStubSessionHarness } from "./pi-embedded-subscribe.e2e-harness.js";
|
|
import { subscribeEmbeddedPiSession } from "./pi-embedded-subscribe.js";
|
|
|
|
describe("subscribeEmbeddedPiSession lifecycle billing errors", () => {
|
|
it("includes provider and model context in lifecycle billing errors", () => {
|
|
const { session, emit } = createStubSessionHarness();
|
|
const onAgentEvent = vi.fn();
|
|
|
|
subscribeEmbeddedPiSession({
|
|
session,
|
|
runId: "run-billing-error",
|
|
onAgentEvent,
|
|
sessionKey: "test-session",
|
|
});
|
|
|
|
const assistantMessage = {
|
|
role: "assistant",
|
|
stopReason: "error",
|
|
errorMessage: "insufficient credits",
|
|
provider: "Anthropic",
|
|
model: "claude-3-5-sonnet",
|
|
} as AssistantMessage;
|
|
|
|
emit({ type: "message_update", message: assistantMessage });
|
|
emit({ type: "agent_end" });
|
|
|
|
const lifecycleError = onAgentEvent.mock.calls.find(
|
|
(call) => call[0]?.stream === "lifecycle" && call[0]?.data?.phase === "error",
|
|
);
|
|
expect(lifecycleError).toBeDefined();
|
|
expect(lifecycleError?.[0]?.data?.error).toContain("Anthropic (claude-3-5-sonnet)");
|
|
});
|
|
});
|