garu-ko 0.4.0 → 0.4.1
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/dist/index.js +27 -2
- package/models/cnn2.bin +0 -0
- package/package.json +1 -1
- package/pkg/garu_wasm.d.ts +5 -0
- package/pkg/garu_wasm.js +14 -2
- package/pkg/garu_wasm_bg.wasm +0 -0
- package/pkg/garu_wasm_bg.wasm.d.ts +1 -0
- package/pkg/package.json +1 -1
- package/pkg/snippets/garu-core-dc89881188f44ead/inline0.js +1 -0
package/dist/index.js
CHANGED
|
@@ -65,7 +65,32 @@ export class Garu {
|
|
|
65
65
|
}
|
|
66
66
|
// Construct the WASM analyzer
|
|
67
67
|
const wasmInstance = new wasmModule.GaruWasm(modelBytes);
|
|
68
|
-
|
|
68
|
+
// Load CNN reranker
|
|
69
|
+
let cnnBytes = null;
|
|
70
|
+
try {
|
|
71
|
+
if (isNode) {
|
|
72
|
+
const { readFile } = await import('fs/promises');
|
|
73
|
+
const { fileURLToPath } = await import('url');
|
|
74
|
+
const { join, dirname } = await import('path');
|
|
75
|
+
const dir = dirname(fileURLToPath(import.meta.url));
|
|
76
|
+
const buf = await readFile(join(dir, '..', 'models', 'cnn2.bin'));
|
|
77
|
+
cnnBytes = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const cnnUrl = new URL('../models/cnn2.bin', import.meta.url).href;
|
|
81
|
+
const cnnResp = await fetch(cnnUrl);
|
|
82
|
+
if (cnnResp.ok) {
|
|
83
|
+
cnnBytes = new Uint8Array(await cnnResp.arrayBuffer());
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// CNN loading is best-effort
|
|
89
|
+
}
|
|
90
|
+
if (cnnBytes) {
|
|
91
|
+
wasmInstance.load_cnn(cnnBytes);
|
|
92
|
+
}
|
|
93
|
+
return new Garu(wasmInstance, modelBytes.byteLength + (cnnBytes?.byteLength ?? 0));
|
|
69
94
|
}
|
|
70
95
|
/**
|
|
71
96
|
* Analyze Korean text, returning morphological tokens with scores.
|
|
@@ -133,7 +158,7 @@ export class Garu {
|
|
|
133
158
|
return {
|
|
134
159
|
version: this._wasm.constructor.version(),
|
|
135
160
|
size: this._modelSize,
|
|
136
|
-
accuracy: 0.
|
|
161
|
+
accuracy: 0.910,
|
|
137
162
|
};
|
|
138
163
|
}
|
|
139
164
|
/**
|
package/models/cnn2.bin
ADDED
|
Binary file
|
package/package.json
CHANGED
package/pkg/garu_wasm.d.ts
CHANGED
|
@@ -6,6 +6,10 @@ export class GaruWasm {
|
|
|
6
6
|
[Symbol.dispose](): void;
|
|
7
7
|
analyze(text: string): any;
|
|
8
8
|
analyze_topn(text: string, n: number): any;
|
|
9
|
+
/**
|
|
10
|
+
* Load CNN reranker model.
|
|
11
|
+
*/
|
|
12
|
+
load_cnn(cnn_data: Uint8Array): void;
|
|
9
13
|
constructor(model_data: Uint8Array);
|
|
10
14
|
tokenize(text: string): any;
|
|
11
15
|
static version(): string;
|
|
@@ -18,6 +22,7 @@ export interface InitOutput {
|
|
|
18
22
|
readonly __wbg_garuwasm_free: (a: number, b: number) => void;
|
|
19
23
|
readonly garuwasm_analyze: (a: number, b: number, c: number) => [number, number, number];
|
|
20
24
|
readonly garuwasm_analyze_topn: (a: number, b: number, c: number, d: number) => [number, number, number];
|
|
25
|
+
readonly garuwasm_load_cnn: (a: number, b: number, c: number) => [number, number];
|
|
21
26
|
readonly garuwasm_new: (a: number, b: number) => [number, number, number];
|
|
22
27
|
readonly garuwasm_tokenize: (a: number, b: number, c: number) => [number, number, number];
|
|
23
28
|
readonly garuwasm_version: () => [number, number];
|
package/pkg/garu_wasm.js
CHANGED
|
@@ -38,6 +38,18 @@ export class GaruWasm {
|
|
|
38
38
|
}
|
|
39
39
|
return takeFromExternrefTable0(ret[0]);
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Load CNN reranker model.
|
|
43
|
+
* @param {Uint8Array} cnn_data
|
|
44
|
+
*/
|
|
45
|
+
load_cnn(cnn_data) {
|
|
46
|
+
const ptr0 = passArray8ToWasm0(cnn_data, wasm.__wbindgen_malloc);
|
|
47
|
+
const len0 = WASM_VECTOR_LEN;
|
|
48
|
+
const ret = wasm.garuwasm_load_cnn(this.__wbg_ptr, ptr0, len0);
|
|
49
|
+
if (ret[1]) {
|
|
50
|
+
throw takeFromExternrefTable0(ret[0]);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
41
53
|
/**
|
|
42
54
|
* @param {Uint8Array} model_data
|
|
43
55
|
*/
|
|
@@ -82,7 +94,7 @@ export class GaruWasm {
|
|
|
82
94
|
}
|
|
83
95
|
}
|
|
84
96
|
if (Symbol.dispose) GaruWasm.prototype[Symbol.dispose] = GaruWasm.prototype.free;
|
|
85
|
-
import * as import1 from "./snippets/garu-core-
|
|
97
|
+
import * as import1 from "./snippets/garu-core-dc89881188f44ead/inline0.js"
|
|
86
98
|
|
|
87
99
|
function __wbg_get_imports() {
|
|
88
100
|
const import0 = {
|
|
@@ -143,7 +155,7 @@ function __wbg_get_imports() {
|
|
|
143
155
|
return {
|
|
144
156
|
__proto__: null,
|
|
145
157
|
"./garu_wasm_bg.js": import0,
|
|
146
|
-
"./snippets/garu-core-
|
|
158
|
+
"./snippets/garu-core-dc89881188f44ead/inline0.js": import1,
|
|
147
159
|
};
|
|
148
160
|
}
|
|
149
161
|
|
package/pkg/garu_wasm_bg.wasm
CHANGED
|
Binary file
|
|
@@ -4,6 +4,7 @@ export const memory: WebAssembly.Memory;
|
|
|
4
4
|
export const __wbg_garuwasm_free: (a: number, b: number) => void;
|
|
5
5
|
export const garuwasm_analyze: (a: number, b: number, c: number) => [number, number, number];
|
|
6
6
|
export const garuwasm_analyze_topn: (a: number, b: number, c: number, d: number) => [number, number, number];
|
|
7
|
+
export const garuwasm_load_cnn: (a: number, b: number, c: number) => [number, number];
|
|
7
8
|
export const garuwasm_new: (a: number, b: number) => [number, number, number];
|
|
8
9
|
export const garuwasm_tokenize: (a: number, b: number, c: number) => [number, number, number];
|
|
9
10
|
export const garuwasm_version: () => [number, number];
|
package/pkg/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function performance_now() { return performance.now(); }
|