From 202ad378d0a20904706f2a920314ef041820e7aa Mon Sep 17 00:00:00 2001 From: synw Date: Wed, 11 Sep 2024 14:51:59 +0200 Subject: [PATCH] Implement modelsInfo in browser package --- packages/browser/package.json | 2 +- packages/browser/src/wllama.ts | 28 ++++++++++++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/browser/package.json b/packages/browser/package.json index 9fbc7f1..d3cf9da 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -1,6 +1,6 @@ { "name": "@locallm/browser", - "version": "0.0.5", + "version": "0.0.7", "description": "Run language models in the browser", "repository": "https://github.com/synw/locallm", "scripts": { diff --git a/packages/browser/src/wllama.ts b/packages/browser/src/wllama.ts index 113b66e..23054ba 100644 --- a/packages/browser/src/wllama.ts +++ b/packages/browser/src/wllama.ts @@ -48,12 +48,28 @@ class WllamaProvider implements LmProvider { } /** - * Not implemented for this provider - * - * @returns {Promise} - */ + * Set the available models from the browser cache + * + * @returns {Promise} + */ async modelsInfo(): Promise { - console.warn("Not implemented for this provider") + const cachedFiles = (await wllama.cacheManager.list()).filter((m) => { + return m.size === m.metadata.originalSize; + }); + const cachedURLs = new Set(cachedFiles.map((e) => e.metadata.originalURL)); + const models = new Set(); + cachedURLs.forEach((u) => { + const name = u + .split('/') + .pop() + ?.replace(/-\d{5}-of-\d{5}/, '') + .replace('.gguf', '') ?? '(unknown)'; + models.add({ + name: name, + ctx: -1 + }) + }) + this.models = Array.from(models); } async info(): Promise> { @@ -63,7 +79,7 @@ class WllamaProvider implements LmProvider { return wllama.getModelMetadata() } - async loadModel(name: string, ctx?: number, threads?: number, gpu_layers?: number): Promise { + async loadModel(name: string, ctx?: number): Promise { throw new Error("Not implemented for this provider: use loadBrowserModel"); }