Wire mic through Whisper-compatible transcriptions on LLM_BASE_URL. Photos upload to MinIO and reach the vision model as base64 image_url parts.
65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { describe, it } from "node:test";
|
|
import {
|
|
clearAssistantChat,
|
|
loadAssistantChat,
|
|
saveAssistantChat,
|
|
toClientChatMessage,
|
|
} from "../../src/modules/agent/assistant-chat-storage";
|
|
|
|
const storage = new Map<string, string>();
|
|
|
|
Object.defineProperty(globalThis, "localStorage", {
|
|
value: {
|
|
getItem: (key: string) => storage.get(key) ?? null,
|
|
setItem: (key: string, value: string) => {
|
|
storage.set(key, value);
|
|
},
|
|
removeItem: (key: string) => {
|
|
storage.delete(key);
|
|
},
|
|
},
|
|
configurable: true,
|
|
});
|
|
|
|
describe("assistant chat storage", () => {
|
|
it("round-trips messages per user", () => {
|
|
storage.clear();
|
|
const userId = "user-a";
|
|
const messages = [
|
|
{ role: "user" as const, content: "hello" },
|
|
{ role: "assistant" as const, content: "hi there" },
|
|
];
|
|
|
|
saveAssistantChat(userId, messages);
|
|
assert.deepEqual(loadAssistantChat(userId), messages);
|
|
});
|
|
|
|
it("keeps sessions isolated by user id", () => {
|
|
storage.clear();
|
|
saveAssistantChat("user-a", [{ role: "user", content: "for a" }]);
|
|
saveAssistantChat("user-b", [{ role: "user", content: "for b" }]);
|
|
|
|
assert.deepEqual(loadAssistantChat("user-a"), [{ role: "user", content: "for a" }]);
|
|
assert.deepEqual(loadAssistantChat("user-b"), [{ role: "user", content: "for b" }]);
|
|
});
|
|
|
|
it("clears stored chat", () => {
|
|
storage.clear();
|
|
saveAssistantChat("user-a", [{ role: "user", content: "hello" }]);
|
|
clearAssistantChat("user-a");
|
|
assert.deepEqual(loadAssistantChat("user-a"), []);
|
|
});
|
|
|
|
it("maps stored image messages to client attachments", () => {
|
|
const message = toClientChatMessage({
|
|
role: "user",
|
|
content: "read this",
|
|
imageUrl: "/api/uploads/assistant/home/photo.jpg",
|
|
});
|
|
assert.deepEqual(message.attachments, [
|
|
{ type: "image", url: "/api/uploads/assistant/home/photo.jpg" },
|
|
]);
|
|
});
|
|
});
|