kjarni-wasm 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  # kjarni-wasm
2
2
 
3
- Local AI inference in the browser. Embeddings, classification, reranking, semantic
4
- search and chat, running in a Web Worker so the page never freezes.
3
+ **Run transformer models inside your web page. Same output as PyTorch, no server.**
4
+
5
+ Kjarni is a transformer inference library, and this is its WebAssembly build:
6
+ embeddings, classification, reranking, semantic search and chat in the browser,
7
+ running in a Web Worker so the page never freezes. The same engine ships for
8
+ Python, C#, Go, C++ and Rust.
5
9
 
6
10
  ```bash
7
11
  npm i kjarni-wasm
@@ -11,7 +15,7 @@ Or without a bundler, straight from a CDN:
11
15
 
12
16
  ```html
13
17
  <script type="module">
14
- import { Kjarni } from "https://cdn.jsdelivr.net/npm/kjarni-wasm@0.1.4/dist/index.js";
18
+ import { Kjarni } from "https://cdn.jsdelivr.net/npm/kjarni-wasm@0.2/dist/index.js";
15
19
  </script>
16
20
  ```
17
21
 
@@ -32,7 +36,7 @@ server will do.
32
36
  ```html
33
37
  <pre id="out">starting…</pre>
34
38
  <script type="module">
35
- import init, { WasmModel } from "https://cdn.jsdelivr.net/npm/kjarni-wasm@0.1.4/pkg/kjarni_wasm.js";
39
+ import init, { WasmModel } from "https://cdn.jsdelivr.net/npm/kjarni-wasm@0.2/pkg/kjarni_wasm.js";
36
40
  await init();
37
41
 
38
42
  const url = "https://huggingface.co/olafuraron/all-MiniLM-L6-v2-q8/resolve/main/all-MiniLM-L6-v2-q8.kjq";
@@ -224,6 +228,6 @@ you need the server half of the same product:
224
228
 
225
229
  ## Making your own `.kjq`
226
230
 
227
- See [the format guide](../scripts/README.md). Any BERT-family encoder,
231
+ See [the format guide](https://github.com/olafurjohannsson/kjarni/blob/main/crates/kjarni-wasm/scripts/README.md). Any BERT-family encoder,
228
232
  cross-encoder, classifier or small decoder from Hugging Face converts with one
229
233
  script.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Capability, ClassifyResult, ModelSource, RankedDocument } from "./protocol.js";
2
- export type { ClassifyResult, ModelSource, RankedDocument };
2
+ export type { Capability, ClassifyResult, ModelSource, RankedDocument };
3
+ /** Which models {@link Kjarni.load} loads. Name only the ones you need. */
3
4
  export interface LoadOptions {
4
5
  /** Embeddings and semantic similarity. A `.kjq` file. */
5
6
  encoder?: ModelSource;
@@ -14,11 +15,23 @@ export interface LoadOptions {
14
15
  /** Called as each model is fetched, for progress UI. */
15
16
  onProgress?: (capability: Capability, loaded: number, total: number) => void;
16
17
  }
18
+ /** How {@link Kjarni.chat} generates a reply. */
17
19
  export interface ChatOptions {
20
+ /** The most tokens to generate. Defaults to 256. */
18
21
  maxNewTokens?: number;
19
- /** 0 selects greedy decoding, which is deterministic. */
22
+ /** Sampling temperature. Defaults to 0, greedy decoding, which is deterministic. */
20
23
  temperature?: number;
21
24
  }
25
+ /**
26
+ * Models running in a Web Worker. Create one with {@link Kjarni.load}; every
27
+ * method returns a promise, so the page stays responsive while a model works.
28
+ *
29
+ * ```ts
30
+ * const kjarni = await Kjarni.load({ encoder: "/models/minilm.kjq" });
31
+ * const [a, b] = await kjarni.encode(["doctor", "physician"]);
32
+ * console.log(Kjarni.cosine(a, b)); // 0.8598
33
+ * ```
34
+ */
22
35
  export declare class Kjarni {
23
36
  #private;
24
37
  private constructor();
@@ -39,7 +52,9 @@ export declare class Kjarni {
39
52
  /**
40
53
  * Generates a reply, yielding text as it arrives.
41
54
  *
42
- * for await (const piece of kjarni.chat("Explain RAG")) out.textContent += piece;
55
+ * ```ts
56
+ * for await (const piece of kjarni.chat("Explain RAG")) out.textContent += piece;
57
+ * ```
43
58
  */
44
59
  chat(prompt: string, options?: ChatOptions): AsyncGenerator<string, void, unknown>;
45
60
  /** Releases the models and stops the worker. */
package/dist/index.js CHANGED
@@ -41,6 +41,16 @@ async function toBytes(src, capability, onProgress) {
41
41
  }
42
42
  return bytes;
43
43
  }
44
+ /**
45
+ * Models running in a Web Worker. Create one with {@link Kjarni.load}; every
46
+ * method returns a promise, so the page stays responsive while a model works.
47
+ *
48
+ * ```ts
49
+ * const kjarni = await Kjarni.load({ encoder: "/models/minilm.kjq" });
50
+ * const [a, b] = await kjarni.encode(["doctor", "physician"]);
51
+ * console.log(Kjarni.cosine(a, b)); // 0.8598
52
+ * ```
53
+ */
44
54
  export class Kjarni {
45
55
  #worker;
46
56
  #next = 1;
@@ -116,7 +126,9 @@ export class Kjarni {
116
126
  /**
117
127
  * Generates a reply, yielding text as it arrives.
118
128
  *
119
- * for await (const piece of kjarni.chat("Explain RAG")) out.textContent += piece;
129
+ * ```ts
130
+ * for await (const piece of kjarni.chat("Explain RAG")) out.textContent += piece;
131
+ * ```
120
132
  */
121
133
  async *chat(prompt, options = {}) {
122
134
  const queue = [];
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,23 @@
1
1
  /** A model to load, either already in memory or somewhere to fetch it from. */
2
2
  export type ModelSource = string | URL | ArrayBuffer | Uint8Array;
3
+ /** A kind of model a {@link Kjarni} instance can hold, one of each. */
3
4
  export type Capability = "encoder" | "classifier" | "reranker" | "chat";
5
+ /** The top prediction for one text. */
4
6
  export interface ClassifyResult {
7
+ /** The predicted label, for example "POSITIVE". */
5
8
  label: string;
9
+ /** Its probability, from 0 to 1. */
6
10
  score: number;
11
+ /** The label's position in the model's label list. */
7
12
  index: number;
8
13
  }
14
+ /** One document after reranking. */
9
15
  export interface RankedDocument {
16
+ /** Its position in the list that was passed in. */
10
17
  index: number;
18
+ /** The cross-encoder's raw score; higher is more relevant. */
11
19
  score: number;
20
+ /** The document text. */
12
21
  text: string;
13
22
  }
14
23
  export type Request = {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kjarni-wasm",
3
- "version": "0.2.6",
4
- "description": "Local AI inference in the browser: embeddings, classification, reranking, semantic search and chat, running in a Web Worker.",
3
+ "version": "0.2.8",
4
+ "description": "Run transformer models inside your web page: embeddings, classification, reranking, semantic search and chat in a Web Worker. Same output as PyTorch, no server.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  "devDependencies": {
25
25
  "typescript": "^5.6.0"
26
26
  },
27
- "license": "MIT",
27
+ "license": "MIT OR Apache-2.0",
28
28
  "repository": {
29
29
  "type": "git",
30
30
  "url": "git+https://github.com/olafurjohannsson/kjarni.git",
@@ -60,7 +60,7 @@ export class WasmChat {
60
60
  * `model_id` selects the chat template, e.g. `qwen2.5-0.5b-instruct`. Without
61
61
  * one the model still generates, but its turn markers will not be applied.
62
62
  */
63
- static load(data: Uint8Array, model_id?: string | null): WasmChat;
63
+ static load(data: Uint8Array | number[], model_id?: string | null): WasmChat;
64
64
  /**
65
65
  * Sends a message in an ongoing conversation, streaming the reply.
66
66
  *
@@ -104,7 +104,7 @@ export class WasmClassifier {
104
104
  /**
105
105
  * Load a classifier from a `.kjq` container.
106
106
  */
107
- static load(data: Uint8Array): WasmClassifier;
107
+ static load(data: Uint8Array | number[]): WasmClassifier;
108
108
  /**
109
109
  * How many labels the model predicts.
110
110
  */
@@ -116,18 +116,18 @@ export class WasmEncoder {
116
116
  free(): void;
117
117
  [Symbol.dispose](): void;
118
118
  encode_file(text: string, source_path: string): any;
119
- static new(model_data: Uint8Array): WasmEncoder;
119
+ static new(model_data: Uint8Array | number[]): WasmEncoder;
120
120
  }
121
121
 
122
122
  export class WasmIndexBuilder {
123
123
  private constructor();
124
124
  free(): void;
125
125
  [Symbol.dispose](): void;
126
- add_chunk(text: string, embedding: Float32Array, source: string, chunk_index: number): void;
126
+ add_chunk(text: string, embedding: Float32Array | number[], source: string, chunk_index: number): void;
127
127
  add_file(text: string, source_path: string): number;
128
128
  doc_count(): number;
129
129
  finish(): Uint8Array;
130
- static new(model_data: Uint8Array): WasmIndexBuilder;
130
+ static new(model_data: Uint8Array | number[]): WasmIndexBuilder;
131
131
  }
132
132
 
133
133
  export class WasmModel {
@@ -145,7 +145,7 @@ export class WasmModel {
145
145
  /**
146
146
  * Load from a `.kjq` container: config, tokenizer and int8 tensors in one file.
147
147
  */
148
- static from_quantized(data: Uint8Array): WasmModel;
148
+ static from_quantized(data: Uint8Array | number[]): WasmModel;
149
149
  /**
150
150
  * Fetch a model straight from Hugging Face. Browser-only: it uses `fetch`.
151
151
  */
@@ -153,7 +153,7 @@ export class WasmModel {
153
153
  /**
154
154
  * Load from raw safetensors plus its config and tokenizer.
155
155
  */
156
- constructor(weights_data: Uint8Array, config_json: string, tokenizer_json: string);
156
+ constructor(weights_data: Uint8Array | number[], config_json: string, tokenizer_json: string);
157
157
  }
158
158
 
159
159
  export enum WasmModelType {
@@ -169,7 +169,7 @@ export class WasmReranker {
169
169
  *
170
170
  * The engine's `CrossEncoder` loads the classifier head as part of the model.
171
171
  */
172
- static load(data: Uint8Array): WasmReranker;
172
+ static load(data: Uint8Array | number[]): WasmReranker;
173
173
  /**
174
174
  * Score every document against the query and return the best `limit`,
175
175
  * highest first. Scores are raw logits, so negative values are normal.
@@ -185,9 +185,9 @@ export class WasmSearch {
185
185
  private constructor();
186
186
  free(): void;
187
187
  [Symbol.dispose](): void;
188
- add_chunk(text: string, embedding: Float32Array, source: string, chunk_index: number): void;
188
+ add_chunk(text: string, embedding: Float32Array | number[], source: string, chunk_index: number): void;
189
189
  doc_count(): number;
190
- static load(model_data: Uint8Array, index_data: Uint8Array): WasmSearch;
190
+ static load(model_data: Uint8Array | number[], index_data: Uint8Array | number[]): WasmSearch;
191
191
  remove_file(source_path: string): number;
192
192
  save_index(): Uint8Array;
193
193
  search(query: string, limit: number): any;
@@ -217,11 +217,11 @@ export interface InitOutput {
217
217
  readonly wasmchat_context_size: (a: number) => number;
218
218
  readonly wasmchat_enablePrefixCache: (a: number, b: number, c: number) => void;
219
219
  readonly wasmchat_generate: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
220
- readonly wasmchat_generate_stream: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
220
+ readonly wasmchat_generate_stream: (a: number, b: number, c: number, d: number, e: number, f: number, g: any) => void;
221
221
  readonly wasmchat_hasPrefixCache: (a: number) => number;
222
222
  readonly wasmchat_history_len: (a: number) => number;
223
223
  readonly wasmchat_load: (a: number, b: number, c: number, d: number, e: number) => void;
224
- readonly wasmchat_send_stream: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
224
+ readonly wasmchat_send_stream: (a: number, b: number, c: number, d: number, e: number, f: number, g: any) => void;
225
225
  readonly wasmclassifier_classify: (a: number, b: number, c: number, d: number) => void;
226
226
  readonly wasmclassifier_classify_batch: (a: number, b: number, c: number, d: number) => void;
227
227
  readonly wasmclassifier_labels: (a: number, b: number) => void;
@@ -236,7 +236,7 @@ export interface InitOutput {
236
236
  readonly wasmindexbuilder_new: (a: number, b: number, c: number) => void;
237
237
  readonly wasmmodel_encode: (a: number, b: number, c: number, d: number, e: number) => void;
238
238
  readonly wasmmodel_from_quantized: (a: number, b: number, c: number) => void;
239
- readonly wasmmodel_from_type: (a: number) => number;
239
+ readonly wasmmodel_from_type: (a: number) => any;
240
240
  readonly wasmmodel_new: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
241
241
  readonly wasmreranker_load: (a: number, b: number, c: number) => void;
242
242
  readonly wasmreranker_rerank: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
@@ -250,14 +250,18 @@ export interface InitOutput {
250
250
  readonly wasmsearch_search_keywords: (a: number, b: number, c: number, d: number, e: number) => void;
251
251
  readonly wasmsearch_search_semantic: (a: number, b: number, c: number, d: number, e: number) => void;
252
252
  readonly wasmsearch_update_file: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
253
- readonly __wasm_bindgen_func_elem_5706: (a: number, b: number, c: number, d: number) => void;
254
- readonly __wasm_bindgen_func_elem_5724: (a: number, b: number, c: number, d: number) => void;
253
+ readonly __wasm_bindgen_func_elem_5740: (a: number, b: number, c: number, d: any) => void;
254
+ readonly __wasm_bindgen_func_elem_5769: (a: number, b: number, c: any, d: any) => void;
255
255
  readonly __wbindgen_export: (a: number, b: number) => number;
256
256
  readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
257
- readonly __wbindgen_export3: (a: number) => void;
258
- readonly __wbindgen_export4: (a: number, b: number, c: number) => void;
259
- readonly __wbindgen_export5: (a: number, b: number) => void;
257
+ readonly __wbindgen_export3: (a: number, b: number, c: number) => void;
258
+ readonly __wbindgen_export4: (a: number) => void;
259
+ readonly __wbindgen_export5: () => number;
260
+ readonly __wbindgen_externrefs: WebAssembly.Table;
261
+ readonly __wbindgen_export6: (a: number, b: number) => void;
260
262
  readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
263
+ readonly __wbindgen_export7: (a: number) => void;
264
+ readonly __wbindgen_export8: (a: number, b: number) => void;
261
265
  readonly __wbindgen_start: () => void;
262
266
  }
263
267