Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 31x 1x 1x 1x | import { NodejsPlatformServices } from '@metamask/kernel-node-runtime';
import { makeSQLKernelDatabase } from '@metamask/kernel-store/sqlite/nodejs';
import { waitUntilQuiescent } from '@metamask/kernel-utils';
import {
Logger,
makeArrayTransport,
makeConsoleTransport,
} from '@metamask/logger';
import type { LogEntry } from '@metamask/logger';
import { Kernel } from '@metamask/ocap-kernel';
import type {
ChatParams,
ChatResult,
} from '@ocap/kernel-language-model-service';
import {
LANGUAGE_MODEL_SERVICE_NAME,
makeKernelLanguageModelService,
} from '@ocap/kernel-language-model-service';
import { expect } from 'vitest';
import { LMS_CHAT_MODEL } from './constants.ts';
import { filterTransports } from './utils.ts';
const getBundleSpec = (name: string): string =>
new URL(`./vats/${name}.bundle`, import.meta.url).toString();
export const runLmsChatKernelTest = async (
chat: (params: ChatParams & { stream?: true & false }) => Promise<ChatResult>,
): Promise<void> => {
const kernelDatabase = await makeSQLKernelDatabase({
dbFilename: ':memory:',
});
const entries: LogEntry[] = [];
const logger = new Logger({
transports: [
filterTransports(makeConsoleTransport(), makeArrayTransport(entries)),
],
});
const platformServices = new NodejsPlatformServices({
logger: logger.subLogger({ tags: ['vat-worker-manager'] }),
});
const kernel = await Kernel.make(platformServices, kernelDatabase, {
resetStorage: true,
logger,
});
const { name, service } = makeKernelLanguageModelService(chat);
kernel.registerKernelServiceObject(name, service);
await kernel.launchSubcluster({
bootstrap: 'main',
services: [LANGUAGE_MODEL_SERVICE_NAME],
vats: {
main: {
bundleSpec: getBundleSpec('lms-chat-vat'),
parameters: { model: LMS_CHAT_MODEL },
},
},
});
await waitUntilQuiescent(100);
const responseEntry = entries.find((entry) =>
entry.message?.startsWith('lms-chat response:'),
);
expect(responseEntry).toBeDefined();
expect(responseEntry?.message?.length).toBeGreaterThan(
'lms-chat response: '.length,
);
expect(responseEntry?.message).toMatch(/^lms-chat response: [hH]ello[.!]?$/u);
};
|