test(agent): cover text-only model image replay
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import { describe, expect, it } from "bun:test";
|
||||
import * as path from "node:path";
|
||||
import { createMockModel, registerMockApi } from "@oh-my-pi/pi-ai/providers/mock";
|
||||
import { TempDir } from "@oh-my-pi/pi-utils";
|
||||
import { ModelRegistry } from "../src/config/model-registry";
|
||||
import { Settings } from "../src/config/settings";
|
||||
import { createAgentSession } from "../src/sdk";
|
||||
import { AuthStorage } from "../src/session/auth-storage";
|
||||
import { SessionManager } from "../src/session/session-manager";
|
||||
|
||||
registerMockApi();
|
||||
|
||||
describe("model switch from vision to text-only", () => {
|
||||
it("omits historical images from the text-only provider request", async () => {
|
||||
const dir = TempDir.createSync("@nonvision-history-");
|
||||
const auth = await AuthStorage.create(path.join(dir.path(), "auth.db"));
|
||||
try {
|
||||
auth.setRuntimeApiKey("mock", "test-key");
|
||||
const vision = createMockModel({ id: "vision", handler: () => ({ content: ["first"] }) });
|
||||
vision.input.push("image");
|
||||
const text = createMockModel({ id: "text", handler: () => ({ content: ["second"] }) });
|
||||
const settings = Settings.isolated({
|
||||
"compaction.enabled": false,
|
||||
"images.blockImages": false,
|
||||
"todo.enabled": false,
|
||||
"retry.enabled": false,
|
||||
});
|
||||
const { session } = await createAgentSession({
|
||||
cwd: dir.path(),
|
||||
agentDir: dir.path(),
|
||||
authStorage: auth,
|
||||
modelRegistry: new ModelRegistry(auth, path.join(dir.path(), "models.yml")),
|
||||
model: vision,
|
||||
settings,
|
||||
sessionManager: SessionManager.inMemory(dir.path()),
|
||||
disableExtensionDiscovery: true,
|
||||
enableMCP: false,
|
||||
enableLsp: false,
|
||||
skills: [],
|
||||
rules: [],
|
||||
contextFiles: [],
|
||||
});
|
||||
try {
|
||||
await session.prompt("see image", { images: [{ type: "image", data: "aaaa", mimeType: "image/png" }] });
|
||||
await session.setModel(text);
|
||||
await session.prompt("now text only");
|
||||
|
||||
const messages = text.calls.at(-1)?.context.messages ?? [];
|
||||
expect(messages.flatMap(message => (Array.isArray(message.content) ? message.content : []))).not.toContainEqual(
|
||||
expect.objectContaining({ type: "image" }),
|
||||
);
|
||||
} finally {
|
||||
await session.dispose();
|
||||
}
|
||||
} finally {
|
||||
auth.close();
|
||||
dir.removeSync();
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user