@coherentglobal/wasm-runner 0.1.4 → 0.2.4
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 +137 -222
- package/dist/CancellationToken.js +2 -0
- package/dist/CancellationToken.js.map +1 -1
- package/dist/browser/logger.js +6 -2
- package/dist/browser/logger.js.map +1 -1
- package/dist/browser/template/main.template.js +1 -1
- package/dist/browser/template/main.template.js.map +1 -1
- package/dist/browser/template/worker.template.js +117 -108
- package/dist/browser/template/worker.template.js.map +1 -1
- package/dist/browser/template.js +2 -2
- package/dist/browser/template.js.map +1 -1
- package/dist/browser.d.ts +5 -5
- package/dist/browser.js +242 -257
- package/dist/browser.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/defaultExternalResolver.js +6 -15
- package/dist/defaultExternalResolver.js.map +1 -1
- package/dist/error.d.ts +5 -0
- package/dist/error.js +23 -5
- package/dist/error.js.map +1 -1
- package/dist/node/logger.d.ts +2 -1
- package/dist/node/logger.js +2 -2
- package/dist/node/logger.js.map +1 -1
- package/dist/node/logger.ts +2 -2
- package/dist/node/mockLogger.d.ts +2 -1
- package/dist/node/template/main.template.ejs +108 -69
- package/dist/node/threads/mockWorkerThread.d.ts +1 -0
- package/dist/node/threads/mockWorkerThread.js +10 -3
- package/dist/node/threads/mockWorkerThread.js.map +1 -1
- package/dist/node/threads/workerPool.d.ts +4 -5
- package/dist/node/threads/workerPool.js +8 -11
- package/dist/node/threads/workerPool.js.map +1 -1
- package/dist/node/threads/workerPool.ts +15 -10
- package/dist/node/threads/workerThread.d.ts +2 -2
- package/dist/node/threads/workerThread.js +36 -35
- package/dist/node/threads/workerThread.js.map +1 -1
- package/dist/node/threads/workerThread.ts +28 -25
- package/dist/node.d.ts +32 -7
- package/dist/node.js +602 -331
- package/dist/node.js.map +1 -1
- package/dist/responseTimeMetric.d.ts +20 -0
- package/dist/responseTimeMetric.js +159 -0
- package/dist/responseTimeMetric.js.map +1 -0
- package/dist/serializer/columnarSerializer.d.ts +9 -0
- package/dist/serializer/columnarSerializer.js +59 -30
- package/dist/serializer/columnarSerializer.js.map +1 -1
- package/dist/types.d.ts +36 -2
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +3 -1
- package/dist/utils.js +53 -59
- package/dist/utils.js.map +1 -1
- package/package.json +74 -60
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
import { isMainThread, parentPort } from "worker_threads";
|
|
2
|
-
import { createId as cuid } from "@paralleldrive/cuid2";
|
|
1
|
+
import { isMainThread, parentPort, threadId } from "worker_threads";
|
|
3
2
|
import { ThreadWorker } from "poolifier";
|
|
4
3
|
import { THREAD_EVENT_TYPES } from "../../constants";
|
|
5
4
|
|
|
6
|
-
import type { TaskFunctions, TaskFunction, WorkerOptions } from "poolifier";
|
|
7
5
|
import type { EVENT_TYPE, EventRequestData } from "../../types";
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
constructor(
|
|
11
|
-
taskFunctions:
|
|
12
|
-
| TaskFunction<unknown, Response>
|
|
13
|
-
| TaskFunctions<unknown, Response>,
|
|
14
|
-
opts?: WorkerOptions
|
|
15
|
-
) {
|
|
16
|
-
super(taskFunctions, opts);
|
|
17
|
-
}
|
|
7
|
+
const activeListeners = new Map();
|
|
18
8
|
|
|
9
|
+
class WorkerThread extends ThreadWorker {
|
|
19
10
|
/**
|
|
20
11
|
* Sends message back to the main thread.
|
|
21
12
|
*
|
|
@@ -43,6 +34,16 @@ class WorkerThread extends ThreadWorker {
|
|
|
43
34
|
}
|
|
44
35
|
}
|
|
45
36
|
|
|
37
|
+
private cleanupListener = (eventId) => {
|
|
38
|
+
setTimeout(() => {
|
|
39
|
+
const listener = activeListeners.get(eventId);
|
|
40
|
+
if (listener) {
|
|
41
|
+
parentPort.off("message", listener);
|
|
42
|
+
activeListeners.delete(eventId);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
46
47
|
/**
|
|
47
48
|
* Sends a request to the main thread and waits for a response.
|
|
48
49
|
*
|
|
@@ -54,30 +55,32 @@ class WorkerThread extends ThreadWorker {
|
|
|
54
55
|
*/
|
|
55
56
|
async requestMessage(payload: any, context: any) {
|
|
56
57
|
return new Promise((resolve, reject) => {
|
|
57
|
-
const eventId = cuid();
|
|
58
|
-
|
|
59
58
|
// Send the request to parent
|
|
60
59
|
this.postMessage({
|
|
61
60
|
payload,
|
|
62
61
|
context,
|
|
63
62
|
type: THREAD_EVENT_TYPES.REQUEST_EXECUTE as EVENT_TYPE,
|
|
64
|
-
|
|
63
|
+
threadId,
|
|
65
64
|
});
|
|
66
65
|
|
|
67
66
|
// Receive the response from parent once ready
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
message?.type === THREAD_EVENT_TYPES.RESPONSE
|
|
72
|
-
) {
|
|
67
|
+
const messageListener = (message: EventRequestData) => {
|
|
68
|
+
parentPort.off("message", messageListener);
|
|
69
|
+
if (message?.type === THREAD_EVENT_TYPES.RESPONSE) {
|
|
73
70
|
resolve(message?.payload);
|
|
74
|
-
} else if (
|
|
75
|
-
message.eventId === eventId &&
|
|
76
|
-
message?.type === THREAD_EVENT_TYPES.ERROR
|
|
77
|
-
) {
|
|
71
|
+
} else if (message?.type === THREAD_EVENT_TYPES.ERROR) {
|
|
78
72
|
reject(message?.payload);
|
|
79
73
|
}
|
|
80
|
-
}
|
|
74
|
+
};
|
|
75
|
+
this.onMessage(messageListener);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
reportStats(payload: any) {
|
|
80
|
+
this.postMessage({
|
|
81
|
+
payload,
|
|
82
|
+
type: THREAD_EVENT_TYPES.STATS_REPORT as EVENT_TYPE,
|
|
83
|
+
threadId,
|
|
81
84
|
});
|
|
82
85
|
}
|
|
83
86
|
}
|
package/dist/node.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import tmp from "tmp";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import EventEmitter from "events";
|
|
3
|
+
import { BaseLogger } from "pino";
|
|
4
|
+
import { NodeModel, RunnerConfig, ModelConfig, ResponseObject, Compatibility, WasmOptions, ModelInstance } from "./types";
|
|
4
5
|
import { CancellationToken } from "./CancellationToken";
|
|
5
6
|
export { ColumnarSerializer } from "./serializer/columnarSerializer";
|
|
6
7
|
export { CancellationToken } from "./CancellationToken";
|
|
@@ -11,19 +12,22 @@ export { ModelExecuteCancelled } from "./error";
|
|
|
11
12
|
* @class
|
|
12
13
|
* @classdesc WasmRunner class, responsible for managing model and it's lifecycle
|
|
13
14
|
*/
|
|
14
|
-
export declare class WasmRunner {
|
|
15
|
+
export declare class WasmRunner extends EventEmitter {
|
|
15
16
|
_tempWorkerFolder: tmp.DirResult;
|
|
16
17
|
_tempModelFolder: tmp.DirResult;
|
|
17
18
|
license: string;
|
|
18
19
|
models: any[];
|
|
19
20
|
externalResolverModule: any;
|
|
20
21
|
initializingModels: string[];
|
|
22
|
+
options: WasmOptions;
|
|
23
|
+
safeCompiler: string;
|
|
24
|
+
logger: BaseLogger;
|
|
21
25
|
/**
|
|
22
26
|
* Create new Wasm Runner instance
|
|
23
27
|
*
|
|
24
28
|
* @param {RunnerConfig} wasmRunnerConfig
|
|
25
29
|
*/
|
|
26
|
-
constructor(wasmRunnerConfig?: RunnerConfig, externalResolverModule?: string, license?: string);
|
|
30
|
+
constructor(wasmRunnerConfig?: RunnerConfig, externalResolverModule?: string, options?: any, license?: string);
|
|
27
31
|
/**
|
|
28
32
|
* Initialize wasm runner fetching model from remote server
|
|
29
33
|
*
|
|
@@ -31,9 +35,9 @@ export declare class WasmRunner {
|
|
|
31
35
|
* @function initialize
|
|
32
36
|
*/
|
|
33
37
|
initialize(license?: string): Promise<void>;
|
|
34
|
-
_createModelInstance(id: any, url: any, workerFolder: any, size
|
|
38
|
+
_createModelInstance(id: any, url: any, workerFolder: any, size?: number): Promise<ModelInstance>;
|
|
35
39
|
_initializeModelInstance(m: NodeModel): Promise<void>;
|
|
36
|
-
_createModelInstanceFromURL(id: string, url: string, workerFolder: string, modelFolder: string, size: number): Promise<
|
|
40
|
+
_createModelInstanceFromURL(id: string, url: string, workerFolder: string, modelFolder: string, size: number): Promise<ModelInstance>;
|
|
37
41
|
/**
|
|
38
42
|
* Append and initialize model in preparation for the `execute()`.
|
|
39
43
|
*
|
|
@@ -52,14 +56,32 @@ export declare class WasmRunner {
|
|
|
52
56
|
* @returns {Promise<void>}
|
|
53
57
|
*/
|
|
54
58
|
remove(id: string): Promise<void>;
|
|
55
|
-
_parseError(rawResponse: any):
|
|
59
|
+
_parseError(rawResponse: any): object;
|
|
56
60
|
_getModel(id: string): NodeModel;
|
|
61
|
+
getModelSize(id: string): number;
|
|
62
|
+
getModelCompilerVersion(id: any): string;
|
|
57
63
|
/**
|
|
58
64
|
* Check if model existed
|
|
59
65
|
* @param {string} id Model id
|
|
60
66
|
* @returns {boolean}
|
|
61
67
|
*/
|
|
62
68
|
isExist(id: string): boolean;
|
|
69
|
+
isModelCompatible(model: any, input: any): boolean;
|
|
70
|
+
getModelsStats(): {
|
|
71
|
+
thread_stats: any;
|
|
72
|
+
memory_usage_mb: any;
|
|
73
|
+
uptime_ms: number;
|
|
74
|
+
min_time_ms: any;
|
|
75
|
+
mean_time_ms: any;
|
|
76
|
+
p95_time_ms: any;
|
|
77
|
+
p99_time_ms: any;
|
|
78
|
+
max_time_ms: any;
|
|
79
|
+
busy: any;
|
|
80
|
+
size: any;
|
|
81
|
+
id: any;
|
|
82
|
+
}[];
|
|
83
|
+
private getPartiallyCompatibleMessage;
|
|
84
|
+
private getIncompatibleMessage;
|
|
63
85
|
/**
|
|
64
86
|
* Perform calculation. The runner will use request_meta.version_uuid of input argument to locate model
|
|
65
87
|
* @async
|
|
@@ -67,4 +89,7 @@ export declare class WasmRunner {
|
|
|
67
89
|
* @returns {Promise<ResponseObject>} - Response model data
|
|
68
90
|
*/
|
|
69
91
|
execute(input: any, id?: string, raw?: boolean, cancelToken?: CancellationToken): Promise<ResponseObject>;
|
|
92
|
+
getNeuronCompilerVersion(logFile: any): Promise<any>;
|
|
93
|
+
checkCompilerVersionCompatibility(modelCompilerVersion: string): Promise<Compatibility>;
|
|
94
|
+
getSafeCompilerVersion(runnerVersion: string): any;
|
|
70
95
|
}
|