prithivMLmods's picture
Upload 39 files
a7634ef verified
import {
LoadModelConfig,
SamplingConfig,
Wllama,
AssetsPathConfig,
} from "@wllama/wllama";
import singleThreadWllamaJsUrl from "@wllama/wllama/esm/single-thread/wllama.js?url";
import singleThreadWllamaWasmUrl from "@wllama/wllama/esm/single-thread/wllama.wasm?url";
import multiThreadWllamaJsUrl from "@wllama/wllama/esm/multi-thread/wllama.js?url";
import multiThreadWllamaWasmUrl from "@wllama/wllama/esm/multi-thread/wllama.wasm?url";
import multiThreadWllamaWorkerMjsUrl from "@wllama/wllama/esm/multi-thread/wllama.worker.mjs?url";
let wllama: Wllama | undefined;
export async function initializeWllama(config: {
modelUrl: string;
modelConfig?: LoadModelConfig;
}) {
const wllamaConfigPaths: AssetsPathConfig = {
"single-thread/wllama.js": singleThreadWllamaJsUrl,
"single-thread/wllama.wasm": singleThreadWllamaWasmUrl,
"multi-thread/wllama.js": multiThreadWllamaJsUrl,
"multi-thread/wllama.wasm": multiThreadWllamaWasmUrl,
"multi-thread/wllama.worker.mjs": multiThreadWllamaWorkerMjsUrl,
};
wllama = new Wllama(wllamaConfigPaths);
return wllama.loadModelFromUrl(config.modelUrl, config.modelConfig ?? {});
}
export async function runCompletion(config: {
prompt: string;
nPredict?: number;
sampling?: SamplingConfig;
onNewToken: (token: number, piece: Uint8Array, currentText: string) => void;
}) {
if (!wllama) throw new Error("Wllama is not initialized.");
return wllama.createCompletion(config.prompt, {
nPredict: config.nPredict,
sampling: config.sampling,
onNewToken: config.onNewToken,
});
}
export async function exitWllama() {
if (!wllama) throw new Error("Wllama is not initialized.");
await wllama.exit();
wllama = undefined;
}