Spaces:
Paused
Paused
| 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; | |
| } | |