evOo-local/packages/adapters/src/pi-runtime-attachments.test.ts
cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

89 lines
2.4 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const promptCalls = vi.hoisted(() => ({
images: [] as Array<{ type: "image"; data: string; mimeType: string }> | undefined,
}));
vi.mock("@earendil-works/pi-agent-core", () => ({
Agent: class {
state = { errorMessage: undefined, messages: [] };
subscribe() {}
async prompt(
_input: string,
images?: Array<{ type: "image"; data: string; mimeType: string }>,
) {
promptCalls.images = images;
}
async waitForIdle() {}
abort() {}
},
}));
vi.mock("@earendil-works/pi-ai/providers/all", () => ({
builtinModels: () => ({
getModel: (_provider: string, modelId: string) =>
modelId === "vision-test-model" ? { provider: "test", id: modelId } : undefined,
streamSimple: () => {
throw new Error("provider should not be called");
},
}),
}));
vi.mock("./pi-local-provider.js", () => ({
registerLocalProvider: (models: unknown) => models,
}));
vi.mock("./pi-openai-compatible-provider.js", () => ({
OPENAI_COMPATIBLE_PROVIDER_ID: "openai-compatible",
registerOpenAiCompatibleCatalog: (models: unknown) => models,
registerOpenAiCompatibleRuntime: (models: unknown) => models,
}));
import { PiAgentRuntime } from "./pi-runtime.js";
describe("Pi runtime attachments", () => {
beforeEach(() => {
promptCalls.images = undefined;
});
it("forwards current-turn images to agent.prompt", async () => {
const runtime = new PiAgentRuntime();
for await (const _event of runtime.run(
{
botId: "bot",
threadId: "thread",
runId: "run",
prompt: "what is in this image?",
instructions: "test",
history: [],
currentTurnImages: [
{
name: "shot.png",
mimeType: "image/png",
data: new Uint8Array([137, 80, 78, 71]),
},
],
tools: [],
model: { provider: "test", id: "vision-test-model" },
},
{
operationId: "attachment-test",
traceId: "attachment-test",
spaceId: "workspace",
userId: "user",
signal: new AbortController().signal,
},
)) {
// exhaust runtime
}
expect(promptCalls.images).toEqual([
{
type: "image",
data: Buffer.from([137, 80, 78, 71]).toString("base64"),
mimeType: "image/png",
},
]);
});
});