@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.
Files changed (55) hide show
  1. package/README.md +137 -222
  2. package/dist/CancellationToken.js +2 -0
  3. package/dist/CancellationToken.js.map +1 -1
  4. package/dist/browser/logger.js +6 -2
  5. package/dist/browser/logger.js.map +1 -1
  6. package/dist/browser/template/main.template.js +1 -1
  7. package/dist/browser/template/main.template.js.map +1 -1
  8. package/dist/browser/template/worker.template.js +117 -108
  9. package/dist/browser/template/worker.template.js.map +1 -1
  10. package/dist/browser/template.js +2 -2
  11. package/dist/browser/template.js.map +1 -1
  12. package/dist/browser.d.ts +5 -5
  13. package/dist/browser.js +242 -257
  14. package/dist/browser.js.map +1 -1
  15. package/dist/constants.d.ts +1 -0
  16. package/dist/constants.js +2 -0
  17. package/dist/constants.js.map +1 -1
  18. package/dist/defaultExternalResolver.js +6 -15
  19. package/dist/defaultExternalResolver.js.map +1 -1
  20. package/dist/error.d.ts +5 -0
  21. package/dist/error.js +23 -5
  22. package/dist/error.js.map +1 -1
  23. package/dist/node/logger.d.ts +2 -1
  24. package/dist/node/logger.js +2 -2
  25. package/dist/node/logger.js.map +1 -1
  26. package/dist/node/logger.ts +2 -2
  27. package/dist/node/mockLogger.d.ts +2 -1
  28. package/dist/node/template/main.template.ejs +108 -69
  29. package/dist/node/threads/mockWorkerThread.d.ts +1 -0
  30. package/dist/node/threads/mockWorkerThread.js +10 -3
  31. package/dist/node/threads/mockWorkerThread.js.map +1 -1
  32. package/dist/node/threads/workerPool.d.ts +4 -5
  33. package/dist/node/threads/workerPool.js +8 -11
  34. package/dist/node/threads/workerPool.js.map +1 -1
  35. package/dist/node/threads/workerPool.ts +15 -10
  36. package/dist/node/threads/workerThread.d.ts +2 -2
  37. package/dist/node/threads/workerThread.js +36 -35
  38. package/dist/node/threads/workerThread.js.map +1 -1
  39. package/dist/node/threads/workerThread.ts +28 -25
  40. package/dist/node.d.ts +32 -7
  41. package/dist/node.js +602 -331
  42. package/dist/node.js.map +1 -1
  43. package/dist/responseTimeMetric.d.ts +20 -0
  44. package/dist/responseTimeMetric.js +159 -0
  45. package/dist/responseTimeMetric.js.map +1 -0
  46. package/dist/serializer/columnarSerializer.d.ts +9 -0
  47. package/dist/serializer/columnarSerializer.js +59 -30
  48. package/dist/serializer/columnarSerializer.js.map +1 -1
  49. package/dist/types.d.ts +36 -2
  50. package/dist/types.js +8 -0
  51. package/dist/types.js.map +1 -1
  52. package/dist/utils.d.ts +3 -1
  53. package/dist/utils.js +53 -59
  54. package/dist/utils.js.map +1 -1
  55. 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
- class WorkerThread extends ThreadWorker {
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
- eventId,
63
+ threadId,
65
64
  });
66
65
 
67
66
  // Receive the response from parent once ready
68
- this.onMessage((message: EventRequestData) => {
69
- if (
70
- message.eventId === eventId &&
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 type { FixedThreadPool } from "./node/threads/workerPool";
3
- import type { NodeModel, RunnerConfig, ModelConfig, ResponseObject } from "./types";
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: any): Promise<FixedThreadPool<any, any>>;
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<FixedThreadPool<any, any>>;
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): Object;
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
  }