@carlonicora/nestjs-neo4jsonapi 1.80.0 → 1.82.0

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 (95) hide show
  1. package/dist/config/base.config.d.ts.map +1 -1
  2. package/dist/config/base.config.js +2 -0
  3. package/dist/config/base.config.js.map +1 -1
  4. package/dist/config/interfaces/config.ai.interface.d.ts +14 -0
  5. package/dist/config/interfaces/config.ai.interface.d.ts.map +1 -1
  6. package/dist/core/index.d.ts +4 -0
  7. package/dist/core/index.d.ts.map +1 -1
  8. package/dist/core/index.js +12 -0
  9. package/dist/core/index.js.map +1 -1
  10. package/dist/core/llm/services/audio/ffmpeg-transcode.d.ts +6 -0
  11. package/dist/core/llm/services/audio/ffmpeg-transcode.d.ts.map +1 -1
  12. package/dist/core/llm/services/audio/ffmpeg-transcode.js +4 -5
  13. package/dist/core/llm/services/audio/ffmpeg-transcode.js.map +1 -1
  14. package/dist/core/llm/services/audio.llm.service.d.ts.map +1 -1
  15. package/dist/core/llm/services/audio.llm.service.js +42 -17
  16. package/dist/core/llm/services/audio.llm.service.js.map +1 -1
  17. package/dist/core/model-manager/index.d.ts +8 -0
  18. package/dist/core/model-manager/index.d.ts.map +1 -0
  19. package/dist/core/model-manager/index.js +26 -0
  20. package/dist/core/model-manager/index.js.map +1 -0
  21. package/dist/core/model-manager/model-loader.d.ts +22 -0
  22. package/dist/core/model-manager/model-loader.d.ts.map +1 -0
  23. package/dist/core/model-manager/model-loader.js +213 -0
  24. package/dist/core/model-manager/model-loader.js.map +1 -0
  25. package/dist/core/model-manager/model-manager.config.d.ts +81 -0
  26. package/dist/core/model-manager/model-manager.config.d.ts.map +1 -0
  27. package/dist/core/model-manager/model-manager.config.js +8 -0
  28. package/dist/core/model-manager/model-manager.config.js.map +1 -0
  29. package/dist/core/model-manager/model-manager.module.d.ts +12 -0
  30. package/dist/core/model-manager/model-manager.module.d.ts.map +1 -0
  31. package/dist/core/model-manager/model-manager.module.js +31 -0
  32. package/dist/core/model-manager/model-manager.module.js.map +1 -0
  33. package/dist/core/model-manager/model-manager.service.d.ts +65 -0
  34. package/dist/core/model-manager/model-manager.service.d.ts.map +1 -0
  35. package/dist/core/model-manager/model-manager.service.js +428 -0
  36. package/dist/core/model-manager/model-manager.service.js.map +1 -0
  37. package/dist/core/onnx-runtime/index.d.ts +5 -0
  38. package/dist/core/onnx-runtime/index.d.ts.map +1 -0
  39. package/dist/core/onnx-runtime/index.js +10 -0
  40. package/dist/core/onnx-runtime/index.js.map +1 -0
  41. package/dist/core/onnx-runtime/onnx-runtime.config.d.ts +72 -0
  42. package/dist/core/onnx-runtime/onnx-runtime.config.d.ts.map +1 -0
  43. package/dist/core/onnx-runtime/onnx-runtime.config.js +12 -0
  44. package/dist/core/onnx-runtime/onnx-runtime.config.js.map +1 -0
  45. package/dist/core/onnx-runtime/onnx-runtime.constants.d.ts +5 -0
  46. package/dist/core/onnx-runtime/onnx-runtime.constants.d.ts.map +1 -0
  47. package/dist/core/onnx-runtime/onnx-runtime.constants.js +8 -0
  48. package/dist/core/onnx-runtime/onnx-runtime.constants.js.map +1 -0
  49. package/dist/core/onnx-runtime/onnx-runtime.module.d.ts +67 -0
  50. package/dist/core/onnx-runtime/onnx-runtime.module.d.ts.map +1 -0
  51. package/dist/core/onnx-runtime/onnx-runtime.module.js +103 -0
  52. package/dist/core/onnx-runtime/onnx-runtime.module.js.map +1 -0
  53. package/dist/core/onnx-runtime/onnx-runtime.service.d.ts +58 -0
  54. package/dist/core/onnx-runtime/onnx-runtime.service.d.ts.map +1 -0
  55. package/dist/core/onnx-runtime/onnx-runtime.service.js +149 -0
  56. package/dist/core/onnx-runtime/onnx-runtime.service.js.map +1 -0
  57. package/dist/scripts/generate-module/__tests__/entity.spec.d.ts +2 -0
  58. package/dist/scripts/generate-module/__tests__/entity.spec.d.ts.map +1 -0
  59. package/dist/scripts/generate-module/__tests__/entity.spec.js +58 -0
  60. package/dist/scripts/generate-module/__tests__/entity.spec.js.map +1 -0
  61. package/dist/scripts/generate-module/__tests__/fixtures.d.ts +3 -0
  62. package/dist/scripts/generate-module/__tests__/fixtures.d.ts.map +1 -0
  63. package/dist/scripts/generate-module/__tests__/fixtures.js +31 -0
  64. package/dist/scripts/generate-module/__tests__/fixtures.js.map +1 -0
  65. package/dist/scripts/generate-module/__tests__/plumbing.spec.d.ts +2 -0
  66. package/dist/scripts/generate-module/__tests__/plumbing.spec.d.ts.map +1 -0
  67. package/dist/scripts/generate-module/__tests__/plumbing.spec.js +19 -0
  68. package/dist/scripts/generate-module/__tests__/plumbing.spec.js.map +1 -0
  69. package/dist/scripts/generate-module/__tests__/service-module.spec.d.ts +2 -0
  70. package/dist/scripts/generate-module/__tests__/service-module.spec.d.ts.map +1 -0
  71. package/dist/scripts/generate-module/__tests__/service-module.spec.js +33 -0
  72. package/dist/scripts/generate-module/__tests__/service-module.spec.js.map +1 -0
  73. package/dist/scripts/generate-module/generator.d.ts.map +1 -1
  74. package/dist/scripts/generate-module/generator.js +8 -0
  75. package/dist/scripts/generate-module/generator.js.map +1 -1
  76. package/dist/scripts/generate-module/templates/entity.template.d.ts.map +1 -1
  77. package/dist/scripts/generate-module/templates/entity.template.js +26 -8
  78. package/dist/scripts/generate-module/templates/entity.template.js.map +1 -1
  79. package/dist/scripts/generate-module/templates/module.template.d.ts.map +1 -1
  80. package/dist/scripts/generate-module/templates/module.template.js +14 -10
  81. package/dist/scripts/generate-module/templates/module.template.js.map +1 -1
  82. package/dist/scripts/generate-module/templates/service.spec.template.d.ts.map +1 -1
  83. package/dist/scripts/generate-module/templates/service.spec.template.js +16 -1
  84. package/dist/scripts/generate-module/templates/service.spec.template.js.map +1 -1
  85. package/dist/scripts/generate-module/templates/service.template.d.ts.map +1 -1
  86. package/dist/scripts/generate-module/templates/service.template.js +3 -1
  87. package/dist/scripts/generate-module/templates/service.template.js.map +1 -1
  88. package/dist/scripts/generate-module/transformers/relationship-mapper.d.ts.map +1 -1
  89. package/dist/scripts/generate-module/transformers/relationship-mapper.js +5 -0
  90. package/dist/scripts/generate-module/transformers/relationship-mapper.js.map +1 -1
  91. package/dist/scripts/generate-module/types/json-schema.interface.d.ts +18 -0
  92. package/dist/scripts/generate-module/types/json-schema.interface.d.ts.map +1 -1
  93. package/dist/scripts/generate-module/types/template-data.interface.d.ts +14 -0
  94. package/dist/scripts/generate-module/types/template-data.interface.d.ts.map +1 -1
  95. package/package.json +6 -1
@@ -0,0 +1,428 @@
1
+ "use strict";
2
+ /**
3
+ * Model Manager Service
4
+ *
5
+ * Centralized service for managing all ML models:
6
+ * - Loads models.config.yaml
7
+ * - Downloads models on startup (runtime)
8
+ * - Verifies SHA256 hashes
9
+ * - Checks version compatibility
10
+ * - Caches ONNX sessions and Transformers models
11
+ * - Provides unified interface for model access
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
30
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
31
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
32
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
33
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
34
+ };
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ var __metadata = (this && this.__metadata) || function (k, v) {
53
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
54
+ };
55
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
56
+ return function (target, key) { decorator(target, key, paramIndex); }
57
+ };
58
+ var ModelManagerService_1;
59
+ Object.defineProperty(exports, "__esModule", { value: true });
60
+ exports.ModelManagerService = void 0;
61
+ const common_1 = require("@nestjs/common");
62
+ const conditional_service_decorator_1 = require("../../common/decorators/conditional-service.decorator");
63
+ const fs = __importStar(require("fs"));
64
+ const path = __importStar(require("path"));
65
+ const crypto = __importStar(require("crypto"));
66
+ const ort = __importStar(require("onnxruntime-node"));
67
+ const model_loader_1 = require("./model-loader");
68
+ let ModelManagerService = ModelManagerService_1 = class ModelManagerService {
69
+ constructor(appModeConfig) {
70
+ this.appModeConfig = appModeConfig;
71
+ this.logger = new common_1.Logger(ModelManagerService_1.name);
72
+ // ONNX session cache
73
+ this.onnxSessions = new Map();
74
+ // Transformers model cache
75
+ this.transformersModels = new Map();
76
+ // Load status tracking
77
+ this.loadStatus = [];
78
+ this.config = (0, model_loader_1.getModelLoader)().getConfig();
79
+ this.cacheDir = process.env.MODELS_CACHE_DIR || path.join(process.cwd(), ".cache", "models");
80
+ // HuggingFace host only; each model's repo comes from its `modelId` so the
81
+ // shared lib serves multiple apps (the download URL is built per-model below).
82
+ this.baseUrl = process.env.MODEL_BASE_URL || "https://huggingface.co";
83
+ this.verifyHash = process.env.MODEL_VERIFY_HASH !== "false";
84
+ this.strictHash = process.env.MODEL_STRICT_HASH !== "false";
85
+ this.autoUpdate = process.env.MODEL_AUTO_UPDATE !== "false";
86
+ // Initialize readiness promise
87
+ this.readyPromise = new Promise((resolve) => {
88
+ this.readyResolver = resolve;
89
+ });
90
+ this.logger.log(`ModelManager initialized`);
91
+ this.logger.log(`Cache directory: ${this.cacheDir}`);
92
+ this.logger.log(`Base URL: ${this.baseUrl}`);
93
+ this.logger.log(`Hash verification: ${this.verifyHash}, Strict: ${this.strictHash}`);
94
+ this.logger.log(`Auto-update: ${this.autoUpdate}`);
95
+ }
96
+ /**
97
+ * Check if running in worker mode.
98
+ * Defaults to worker mode if no app mode config (tests, standalone scripts).
99
+ */
100
+ isWorkerMode() {
101
+ if (!this.appModeConfig)
102
+ return true;
103
+ return this.appModeConfig.mode === conditional_service_decorator_1.AppMode.WORKER;
104
+ }
105
+ /**
106
+ * Determine if a model should be loaded based on current app mode.
107
+ * - Worker mode: load all models
108
+ * - API mode: only load models marked with loadInApi: true
109
+ */
110
+ shouldLoadModel(model) {
111
+ if (this.isWorkerMode())
112
+ return true;
113
+ return model.loadInApi === true;
114
+ }
115
+ async onApplicationBootstrap() {
116
+ const mode = this.isWorkerMode() ? "Worker" : "API";
117
+ this.logger.log(`${mode} mode - starting model loading process...`);
118
+ const startTime = Date.now();
119
+ // Create cache directory
120
+ this.ensureCacheDir();
121
+ // Combine all models and sort by priority
122
+ const allModels = [
123
+ ...this.config.registry.onnx.map((m) => ({ config: m, framework: "onnx" })),
124
+ ...this.config.registry.transformers.map((m) => ({ config: m, framework: "transformers" })),
125
+ ].sort((a, b) => a.config.priority - b.config.priority);
126
+ // Filter models based on mode
127
+ const modelsToLoad = allModels.filter(({ config }) => this.shouldLoadModel(config));
128
+ const skippedCount = allModels.length - modelsToLoad.length;
129
+ if (skippedCount > 0) {
130
+ this.logger.log(`${mode} mode: Loading ${modelsToLoad.length} models, skipping ${skippedCount} worker-only models`);
131
+ }
132
+ else {
133
+ this.logger.log(`Loading ${modelsToLoad.length} models...`);
134
+ }
135
+ // Load each model
136
+ for (const { config, framework } of modelsToLoad) {
137
+ await this.loadModel(config, framework);
138
+ // Small delay between models to reduce memory pressure
139
+ await new Promise((r) => setTimeout(r, 100));
140
+ }
141
+ const totalTime = Date.now() - startTime;
142
+ this.logger.log(`All models loaded in ${totalTime}ms`);
143
+ // Log load status summary
144
+ const loaded = this.loadStatus.filter((s) => s.status === "loaded").length;
145
+ const failed = this.loadStatus.filter((s) => s.status === "failed").length;
146
+ this.logger.log(`Load summary: ${loaded} loaded, ${failed} failed`);
147
+ // Signal that models are ready
148
+ this.readyResolver();
149
+ }
150
+ async loadModel(model, framework) {
151
+ const status = {
152
+ name: model.name,
153
+ framework: framework,
154
+ status: "loading",
155
+ };
156
+ this.loadStatus.push(status);
157
+ const startTime = Date.now();
158
+ try {
159
+ if (framework === "onnx") {
160
+ await this.loadOnnxModel(model);
161
+ }
162
+ else {
163
+ await this.loadTransformersModel(model);
164
+ }
165
+ status.status = "loaded";
166
+ status.loadTimeMs = Date.now() - startTime;
167
+ this.logger.log(`[${model.name}] Model loaded in ${status.loadTimeMs}ms`);
168
+ }
169
+ catch (error) {
170
+ const message = error instanceof Error ? error.message : String(error);
171
+ status.status = "failed";
172
+ status.error = message;
173
+ this.logger.error(`[${model.name}] Failed to load: ${message}`);
174
+ if (!model.optional && this.strictHash && message.includes("hash verification")) {
175
+ throw new Error(`Required model ${model.name} failed hash verification`);
176
+ }
177
+ if (!model.optional && !message.includes("optional")) {
178
+ throw new Error(`Required model ${model.name} failed to load`);
179
+ }
180
+ }
181
+ }
182
+ async loadOnnxModel(config) {
183
+ const cachePath = path.join(this.cacheDir, "onnx", config.name);
184
+ const filePath = path.join(cachePath, path.basename(config.path));
185
+ // Ensure cache directory exists
186
+ if (!fs.existsSync(cachePath)) {
187
+ fs.mkdirSync(cachePath, { recursive: true });
188
+ }
189
+ // Download if missing or if version mismatch
190
+ const needsDownload = await this.needsDownload(filePath, config);
191
+ if (needsDownload) {
192
+ const downloadUrl = `${this.baseUrl}/${config.modelId}/resolve/main/${config.path}`;
193
+ await this.downloadFile(downloadUrl, filePath, config.name);
194
+ }
195
+ // Verify hash
196
+ if (this.verifyHash) {
197
+ const isValid = this.verifyFileHash(filePath, config.hash);
198
+ if (!isValid) {
199
+ if (this.strictHash) {
200
+ throw new Error(`Hash verification failed for ${config.name}`);
201
+ }
202
+ this.logger.warn(`[${config.name}] Hash verification failed (non-strict mode, continuing)`);
203
+ }
204
+ }
205
+ // Download additional files (e.g., .onnx.data for external data models)
206
+ if (config.additionalFiles) {
207
+ for (const additionalFile of config.additionalFiles) {
208
+ const additionalFilePath = path.join(cachePath, path.basename(additionalFile.path));
209
+ const needsAdditionalDownload = !fs.existsSync(additionalFilePath);
210
+ if (needsAdditionalDownload) {
211
+ const additionalUrl = `${this.baseUrl}/${config.modelId}/resolve/main/${additionalFile.path}`;
212
+ await this.downloadFile(additionalUrl, additionalFilePath, config.name, path.basename(additionalFile.path));
213
+ }
214
+ // Verify hash for additional file
215
+ if (this.verifyHash) {
216
+ const isValid = this.verifyFileHash(additionalFilePath, additionalFile.hash);
217
+ if (!isValid) {
218
+ if (this.strictHash) {
219
+ throw new Error(`Hash verification failed for ${config.name}/${path.basename(additionalFile.path)}`);
220
+ }
221
+ this.logger.warn(`[${config.name}/${path.basename(additionalFile.path)}] Hash verification failed (non-strict mode, continuing)`);
222
+ }
223
+ }
224
+ }
225
+ }
226
+ // Load ONNX session
227
+ const sessionOptions = {
228
+ executionProviders: ["cpu"],
229
+ graphOptimizationLevel: "all",
230
+ intraOpNumThreads: parseInt(process.env.ONNX_INTRA_OP_NUM_THREADS || "2"),
231
+ interOpNumThreads: parseInt(process.env.ONNX_INTER_OP_NUM_THREADS || "1"),
232
+ enableCpuMemArena: true,
233
+ enableMemPattern: true,
234
+ };
235
+ const session = await ort.InferenceSession.create(filePath, sessionOptions);
236
+ this.onnxSessions.set(config.name, session);
237
+ }
238
+ async loadTransformersModel(config) {
239
+ const cachePath = path.join(this.cacheDir, "transformers", config.name);
240
+ const modelCache = new Map();
241
+ // Ensure cache directory exists
242
+ if (!fs.existsSync(cachePath)) {
243
+ fs.mkdirSync(cachePath, { recursive: true });
244
+ }
245
+ // Load each component
246
+ for (const component of config.components) {
247
+ const componentPath = path.join(cachePath, component.file);
248
+ // Download if missing or if version mismatch
249
+ const componentUrl = `${this.baseUrl}/${config.modelId}/resolve/main/${config.path}/${component.file}`;
250
+ const needsDownload = await this.needsDownload(componentPath, config, component);
251
+ if (needsDownload) {
252
+ await this.downloadFile(componentUrl, componentPath, config.name, component.name);
253
+ }
254
+ // Verify hash
255
+ if (this.verifyHash) {
256
+ const isValid = this.verifyFileHash(componentPath, component.hash);
257
+ if (!isValid) {
258
+ if (this.strictHash) {
259
+ throw new Error(`Hash verification failed for ${config.name}/${component.name}`);
260
+ }
261
+ this.logger.warn(`[${config.name}/${component.name}] Hash verification failed (non-strict mode, continuing)`);
262
+ }
263
+ }
264
+ // For Transformers.js models, we don't load them here
265
+ // They're loaded lazily by the services that use them
266
+ // We just verify they're downloaded and cached
267
+ modelCache.set(component.name, { path: componentPath });
268
+ }
269
+ this.transformersModels.set(config.name, modelCache);
270
+ }
271
+ async needsDownload(filePath, config, _component) {
272
+ // If file doesn't exist, need download
273
+ if (!fs.existsSync(filePath)) {
274
+ return true;
275
+ }
276
+ // Check version compatibility if auto-update enabled
277
+ if (!this.autoUpdate) {
278
+ return false;
279
+ }
280
+ // Check version metadata
281
+ const metadataPath = filePath + ".metadata";
282
+ if (fs.existsSync(metadataPath)) {
283
+ try {
284
+ const metadata = JSON.parse(fs.readFileSync(metadataPath, "utf-8"));
285
+ if (metadata.version === config.version) {
286
+ return false; // Version matches, no download needed
287
+ }
288
+ this.logger.log(`[${config.name}] Version mismatch: cached=${metadata.version}, config=${config.version}`);
289
+ }
290
+ catch {
291
+ // Invalid metadata, need download
292
+ return true;
293
+ }
294
+ }
295
+ return true;
296
+ }
297
+ async downloadFile(url, filePath, modelName, componentName) {
298
+ const label = componentName ? `${modelName}/${componentName}` : modelName;
299
+ this.logger.log(`[${label}] Downloading from ${url}...`);
300
+ const startTime = Date.now();
301
+ try {
302
+ const response = await fetch(url);
303
+ if (!response.ok) {
304
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
305
+ }
306
+ const contentLength = response.headers.get("content-length");
307
+ const totalBytes = contentLength ? parseInt(contentLength, 10) : 0;
308
+ // Ensure directory exists
309
+ const dir = path.dirname(filePath);
310
+ if (!fs.existsSync(dir)) {
311
+ fs.mkdirSync(dir, { recursive: true });
312
+ }
313
+ // Stream the response to file
314
+ const fileStream = fs.createWriteStream(filePath);
315
+ const reader = response.body?.getReader();
316
+ if (!reader) {
317
+ throw new Error("Failed to get response reader");
318
+ }
319
+ let downloadedBytes = 0;
320
+ let lastLoggedPercent = 0;
321
+ while (true) {
322
+ const { done, value } = await reader.read();
323
+ if (done)
324
+ break;
325
+ fileStream.write(Buffer.from(value));
326
+ downloadedBytes += value.length;
327
+ // Log progress every 10%
328
+ if (totalBytes > 0) {
329
+ const percent = Math.floor((downloadedBytes / totalBytes) * 100);
330
+ if (percent >= lastLoggedPercent + 10) {
331
+ lastLoggedPercent = percent;
332
+ const mbDownloaded = (downloadedBytes / 1024 / 1024).toFixed(1);
333
+ const mbTotal = (totalBytes / 1024 / 1024).toFixed(1);
334
+ this.logger.log(`[${label}] Progress: ${percent}% (${mbDownloaded}/${mbTotal} MB)`);
335
+ }
336
+ }
337
+ }
338
+ fileStream.end();
339
+ // Wait for file to be fully written
340
+ await new Promise((resolve, reject) => {
341
+ fileStream.on("finish", resolve);
342
+ fileStream.on("error", reject);
343
+ });
344
+ const duration = ((Date.now() - startTime) / 1000).toFixed(1);
345
+ const fileSizeMB = (downloadedBytes / 1024 / 1024).toFixed(1);
346
+ this.logger.log(`[${label}] Downloaded ${fileSizeMB} MB in ${duration}s`);
347
+ // Save metadata
348
+ const metadataPath = filePath + ".metadata";
349
+ fs.writeFileSync(metadataPath, JSON.stringify({
350
+ version: "1.0.0",
351
+ downloadedAt: new Date().toISOString(),
352
+ }));
353
+ }
354
+ catch (error) {
355
+ // Clean up partial download
356
+ if (fs.existsSync(filePath)) {
357
+ fs.unlinkSync(filePath);
358
+ }
359
+ const message = error instanceof Error ? error.message : String(error);
360
+ throw new Error(`Download failed: ${message}`);
361
+ }
362
+ }
363
+ verifyFileHash(filePath, expectedHash) {
364
+ const actualHash = this.computeHash(filePath);
365
+ const isValid = actualHash === expectedHash;
366
+ if (!isValid) {
367
+ this.logger.error(`Hash mismatch for ${filePath}`);
368
+ this.logger.error(` Expected: ${expectedHash}`);
369
+ this.logger.error(` Actual: ${actualHash}`);
370
+ }
371
+ return isValid;
372
+ }
373
+ computeHash(filePath) {
374
+ const fileBuffer = fs.readFileSync(filePath);
375
+ const hashSum = crypto.createHash("sha256");
376
+ hashSum.update(fileBuffer);
377
+ return "sha256:" + hashSum.digest("hex");
378
+ }
379
+ ensureCacheDir() {
380
+ if (!fs.existsSync(this.cacheDir)) {
381
+ fs.mkdirSync(this.cacheDir, { recursive: true });
382
+ }
383
+ }
384
+ // Public API for accessing models
385
+ getOnnxSession(name) {
386
+ return this.onnxSessions.get(name) ?? null;
387
+ }
388
+ getTransformersModel(name, component) {
389
+ const modelCache = this.transformersModels.get(name);
390
+ if (!modelCache) {
391
+ return null;
392
+ }
393
+ if (component) {
394
+ return modelCache.get(component) ?? null;
395
+ }
396
+ return modelCache;
397
+ }
398
+ isModelLoaded(name, framework) {
399
+ if (framework === "onnx") {
400
+ return this.onnxSessions.has(name);
401
+ }
402
+ return this.transformersModels.has(name);
403
+ }
404
+ getLoadedModels() {
405
+ return {
406
+ onnx: Array.from(this.onnxSessions.keys()),
407
+ transformers: Array.from(this.transformersModels.keys()),
408
+ };
409
+ }
410
+ getLoadStatus() {
411
+ return [...this.loadStatus];
412
+ }
413
+ /**
414
+ * Wait for all models to be loaded.
415
+ * Services that depend on models should call this before accessing them.
416
+ */
417
+ async waitForReady() {
418
+ return this.readyPromise;
419
+ }
420
+ };
421
+ exports.ModelManagerService = ModelManagerService;
422
+ exports.ModelManagerService = ModelManagerService = ModelManagerService_1 = __decorate([
423
+ (0, common_1.Injectable)(),
424
+ __param(0, (0, common_1.Optional)()),
425
+ __param(0, (0, common_1.Inject)(conditional_service_decorator_1.APP_MODE_TOKEN)),
426
+ __metadata("design:paramtypes", [Object])
427
+ ], ModelManagerService);
428
+ //# sourceMappingURL=model-manager.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-manager.service.js","sourceRoot":"","sources":["../../../src/core/model-manager/model-manager.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { OnnxRuntimeModule } from "./onnx-runtime.module";
2
+ export { OnnxRuntimeService } from "./onnx-runtime.service";
3
+ export type { OnnxRuntimeModuleOptions } from "./onnx-runtime.config";
4
+ export { ONNX_RUNTIME_OPTIONS } from "./onnx-runtime.constants";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/onnx-runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAK5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ONNX_RUNTIME_OPTIONS = exports.OnnxRuntimeService = exports.OnnxRuntimeModule = void 0;
4
+ var onnx_runtime_module_1 = require("./onnx-runtime.module");
5
+ Object.defineProperty(exports, "OnnxRuntimeModule", { enumerable: true, get: function () { return onnx_runtime_module_1.OnnxRuntimeModule; } });
6
+ var onnx_runtime_service_1 = require("./onnx-runtime.service");
7
+ Object.defineProperty(exports, "OnnxRuntimeService", { enumerable: true, get: function () { return onnx_runtime_service_1.OnnxRuntimeService; } });
8
+ var onnx_runtime_constants_1 = require("./onnx-runtime.constants");
9
+ Object.defineProperty(exports, "ONNX_RUNTIME_OPTIONS", { enumerable: true, get: function () { return onnx_runtime_constants_1.ONNX_RUNTIME_OPTIONS; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/onnx-runtime/index.ts"],"names":[],"mappings":";;;AAAA,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAM3B,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Configuration for a single ONNX model to be loaded.
3
+ */
4
+ export interface OnnxModelConfig {
5
+ /**
6
+ * Unique identifier for the model (e.g., 'yolo-pose', 'arcface').
7
+ * Used to retrieve the session via OnnxRuntimeService.getSession(name).
8
+ */
9
+ name: string;
10
+ /**
11
+ * Path to the ONNX model file, relative to process.cwd().
12
+ * Example: 'models/yolo11l-pose.onnx'
13
+ */
14
+ path: string;
15
+ /**
16
+ * URL to download the model from if not present locally.
17
+ * Typically a Hugging Face URL like:
18
+ * 'https://huggingface.co/<user>/<repo>/resolve/main/<filename>'
19
+ */
20
+ downloadUrl?: string;
21
+ /**
22
+ * Load priority. Lower numbers load first.
23
+ * Use to load smaller models first for faster initial availability.
24
+ */
25
+ priority: number;
26
+ /**
27
+ * If true, failure to load this model won't prevent app startup.
28
+ * The model will be unavailable but other services can still function.
29
+ */
30
+ optional: boolean;
31
+ }
32
+ /**
33
+ * Configuration options for the OnnxRuntimeModule.
34
+ *
35
+ * Note: The 'models' array is now optional since ModelManagerService
36
+ * handles model loading from models.config.yaml. This parameter is kept
37
+ * for backward compatibility but is no longer used.
38
+ */
39
+ export interface OnnxRuntimeModuleOptions {
40
+ /**
41
+ * List of models to load during application bootstrap.
42
+ * DEPRECATED: ModelManagerService now handles this from models.config.yaml
43
+ * Kept for backward compatibility.
44
+ */
45
+ models?: OnnxModelConfig[];
46
+ /**
47
+ * Number of threads for intra-operation parallelism.
48
+ * Controls parallelism within a single ONNX operation (e.g., matrix multiplication).
49
+ * Default: 2 (conservative to avoid contention with @huggingface/transformers)
50
+ */
51
+ intraOpNumThreads?: number;
52
+ /**
53
+ * Number of threads for inter-operation parallelism.
54
+ * Controls parallelism between independent operations in the graph.
55
+ * Default: 1 (sequential to avoid thread contention)
56
+ */
57
+ interOpNumThreads?: number;
58
+ /**
59
+ * Level of graph optimization to apply.
60
+ * - 'disabled': No optimizations
61
+ * - 'basic': Basic optimizations (constant folding)
62
+ * - 'extended': Extended optimizations (more aggressive)
63
+ * - 'all': All available optimizations
64
+ * Default: 'all'
65
+ */
66
+ graphOptimizationLevel?: "disabled" | "basic" | "extended" | "all";
67
+ }
68
+ /**
69
+ * Default options for OnnxRuntimeModule.
70
+ */
71
+ export declare const DEFAULT_ONNX_RUNTIME_OPTIONS: Partial<OnnxRuntimeModuleOptions>;
72
+ //# sourceMappingURL=onnx-runtime.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onnx-runtime.config.d.ts","sourceRoot":"","sources":["../../../src/core/onnx-runtime/onnx-runtime.config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAE3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;CACpE;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,OAAO,CAAC,wBAAwB,CAI1E,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_ONNX_RUNTIME_OPTIONS = void 0;
4
+ /**
5
+ * Default options for OnnxRuntimeModule.
6
+ */
7
+ exports.DEFAULT_ONNX_RUNTIME_OPTIONS = {
8
+ intraOpNumThreads: 2,
9
+ interOpNumThreads: 1,
10
+ graphOptimizationLevel: "all",
11
+ };
12
+ //# sourceMappingURL=onnx-runtime.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onnx-runtime.config.js","sourceRoot":"","sources":["../../../src/core/onnx-runtime/onnx-runtime.config.ts"],"names":[],"mappings":";;;AA4EA;;GAEG;AACU,QAAA,4BAA4B,GAAsC;IAC7E,iBAAiB,EAAE,CAAC;IACpB,iBAAiB,EAAE,CAAC;IACpB,sBAAsB,EAAE,KAAK;CAC9B,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Injection token for ONNX Runtime module options.
3
+ */
4
+ export declare const ONNX_RUNTIME_OPTIONS: unique symbol;
5
+ //# sourceMappingURL=onnx-runtime.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onnx-runtime.constants.d.ts","sourceRoot":"","sources":["../../../src/core/onnx-runtime/onnx-runtime.constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAiC,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ONNX_RUNTIME_OPTIONS = void 0;
4
+ /**
5
+ * Injection token for ONNX Runtime module options.
6
+ */
7
+ exports.ONNX_RUNTIME_OPTIONS = Symbol("ONNX_RUNTIME_OPTIONS");
8
+ //# sourceMappingURL=onnx-runtime.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onnx-runtime.constants.js","sourceRoot":"","sources":["../../../src/core/onnx-runtime/onnx-runtime.constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC"}