@reftrixmcp/ml 0.1.7

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 (97) hide show
  1. package/LICENSE +661 -0
  2. package/dist/dinov2/index.d.ts +7 -0
  3. package/dist/dinov2/index.d.ts.map +1 -0
  4. package/dist/dinov2/index.js +7 -0
  5. package/dist/dinov2/index.js.map +1 -0
  6. package/dist/dinov2/service.d.ts +106 -0
  7. package/dist/dinov2/service.d.ts.map +1 -0
  8. package/dist/dinov2/service.js +446 -0
  9. package/dist/dinov2/service.js.map +1 -0
  10. package/dist/dinov2/worker-thread-types.d.ts +77 -0
  11. package/dist/dinov2/worker-thread-types.d.ts.map +1 -0
  12. package/dist/dinov2/worker-thread-types.js +4 -0
  13. package/dist/dinov2/worker-thread-types.js.map +1 -0
  14. package/dist/dinov2/worker-thread.d.ts +2 -0
  15. package/dist/dinov2/worker-thread.d.ts.map +1 -0
  16. package/dist/dinov2/worker-thread.js +231 -0
  17. package/dist/dinov2/worker-thread.js.map +1 -0
  18. package/dist/embeddings/index.d.ts +12 -0
  19. package/dist/embeddings/index.d.ts.map +1 -0
  20. package/dist/embeddings/index.js +13 -0
  21. package/dist/embeddings/index.js.map +1 -0
  22. package/dist/embeddings/multimodal-embedding.service.d.ts +400 -0
  23. package/dist/embeddings/multimodal-embedding.service.d.ts.map +1 -0
  24. package/dist/embeddings/multimodal-embedding.service.js +650 -0
  25. package/dist/embeddings/multimodal-embedding.service.js.map +1 -0
  26. package/dist/embeddings/service.d.ts +261 -0
  27. package/dist/embeddings/service.d.ts.map +1 -0
  28. package/dist/embeddings/service.js +1093 -0
  29. package/dist/embeddings/service.js.map +1 -0
  30. package/dist/embeddings/style-embedding.service.d.ts +117 -0
  31. package/dist/embeddings/style-embedding.service.d.ts.map +1 -0
  32. package/dist/embeddings/style-embedding.service.js +157 -0
  33. package/dist/embeddings/style-embedding.service.js.map +1 -0
  34. package/dist/embeddings/types.d.ts +83 -0
  35. package/dist/embeddings/types.d.ts.map +1 -0
  36. package/dist/embeddings/types.js +4 -0
  37. package/dist/embeddings/types.js.map +1 -0
  38. package/dist/embeddings/vision-embedding.service.d.ts +70 -0
  39. package/dist/embeddings/vision-embedding.service.d.ts.map +1 -0
  40. package/dist/embeddings/vision-embedding.service.js +221 -0
  41. package/dist/embeddings/vision-embedding.service.js.map +1 -0
  42. package/dist/embeddings/vision-embedding.types.d.ts +102 -0
  43. package/dist/embeddings/vision-embedding.types.d.ts.map +1 -0
  44. package/dist/embeddings/vision-embedding.types.js +4 -0
  45. package/dist/embeddings/vision-embedding.types.js.map +1 -0
  46. package/dist/embeddings/worker-thread-types.d.ts +152 -0
  47. package/dist/embeddings/worker-thread-types.d.ts.map +1 -0
  48. package/dist/embeddings/worker-thread-types.js +4 -0
  49. package/dist/embeddings/worker-thread-types.js.map +1 -0
  50. package/dist/embeddings/worker-thread.d.ts +4 -0
  51. package/dist/embeddings/worker-thread.d.ts.map +1 -0
  52. package/dist/embeddings/worker-thread.js +441 -0
  53. package/dist/embeddings/worker-thread.js.map +1 -0
  54. package/dist/index.d.ts +18 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +19 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/search/fulltext-helpers.d.ts +30 -0
  59. package/dist/search/fulltext-helpers.d.ts.map +1 -0
  60. package/dist/search/fulltext-helpers.js +40 -0
  61. package/dist/search/fulltext-helpers.js.map +1 -0
  62. package/dist/search/hybrid.d.ts +40 -0
  63. package/dist/search/hybrid.d.ts.map +1 -0
  64. package/dist/search/hybrid.js +61 -0
  65. package/dist/search/hybrid.js.map +1 -0
  66. package/dist/search/index.d.ts +12 -0
  67. package/dist/search/index.d.ts.map +1 -0
  68. package/dist/search/index.js +11 -0
  69. package/dist/search/index.js.map +1 -0
  70. package/dist/search/rrf.d.ts +69 -0
  71. package/dist/search/rrf.d.ts.map +1 -0
  72. package/dist/search/rrf.js +108 -0
  73. package/dist/search/rrf.js.map +1 -0
  74. package/dist/search/types.d.ts +130 -0
  75. package/dist/search/types.d.ts.map +1 -0
  76. package/dist/search/types.js +4 -0
  77. package/dist/search/types.js.map +1 -0
  78. package/package.json +65 -0
  79. package/src/dinov2/index.ts +21 -0
  80. package/src/dinov2/service.ts +539 -0
  81. package/src/dinov2/worker-thread-types.ts +103 -0
  82. package/src/dinov2/worker-thread.ts +306 -0
  83. package/src/embeddings/index.ts +74 -0
  84. package/src/embeddings/multimodal-embedding.service.ts +992 -0
  85. package/src/embeddings/service.ts +1287 -0
  86. package/src/embeddings/style-embedding.service.ts +201 -0
  87. package/src/embeddings/types.ts +95 -0
  88. package/src/embeddings/vision-embedding.service.ts +273 -0
  89. package/src/embeddings/vision-embedding.types.ts +117 -0
  90. package/src/embeddings/worker-thread-types.ts +194 -0
  91. package/src/embeddings/worker-thread.ts +529 -0
  92. package/src/index.ts +70 -0
  93. package/src/search/fulltext-helpers.ts +45 -0
  94. package/src/search/hybrid.ts +107 -0
  95. package/src/search/index.ts +25 -0
  96. package/src/search/rrf.ts +154 -0
  97. package/src/search/types.ts +141 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-thread-types.js","sourceRoot":"","sources":["../../src/dinov2/worker-thread-types.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,yCAAyC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=worker-thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-thread.d.ts","sourceRoot":"","sources":["../../src/dinov2/worker-thread.ts"],"names":[],"mappings":""}
@@ -0,0 +1,231 @@
1
+ // SPDX-FileCopyrightText: 2026 TKMD and Reftrix Contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * DINOv2 ONNX Worker Thread
5
+ *
6
+ * Runs DINOv2 ViT-B/14 inference in a separate thread so CPU-bound
7
+ * inference does not block the main thread's event loop. This allows
8
+ * BullMQ heartbeats, IPC messages, and other async operations to proceed
9
+ * while inference is in progress.
10
+ *
11
+ * Architecture:
12
+ * - Main thread sends preprocessed 224x224 RGB pixel buffers via parentPort.
13
+ * - This worker owns the ONNX InferenceSession lifecycle (init, inference, dispose).
14
+ * - Results are sent back as plain number[] (structured clone safe).
15
+ * - ONNX Session/Tensor objects never cross thread boundaries.
16
+ *
17
+ * Uses onnxruntime-node InferenceSession directly (not transformers.js pipeline).
18
+ *
19
+ * @module dinov2/worker-thread
20
+ */
21
+ import { parentPort } from "node:worker_threads";
22
+ let ort = null;
23
+ async function getOrt() {
24
+ if (!ort) {
25
+ ort = await import("onnxruntime-node");
26
+ }
27
+ return ort;
28
+ }
29
+ let session = null;
30
+ const DINOV2_EMBEDDING_DIMENSION = 768;
31
+ // ImageNet normalization constants
32
+ const IMAGENET_MEAN = [0.485, 0.456, 0.406];
33
+ const IMAGENET_STD = [0.229, 0.224, 0.225];
34
+ // =====================================================
35
+ // Preprocessing functions
36
+ // =====================================================
37
+ /**
38
+ * Preprocess raw RGB pixel buffer into DINOv2 input tensor format.
39
+ *
40
+ * Converts HWC (height-width-channel) uint8 pixels to CHW (channel-height-width)
41
+ * float32 with ImageNet normalization: (pixel/255 - mean) / std
42
+ *
43
+ * @param rawPixels - Raw 224x224x3 RGB pixel buffer
44
+ * @param width - Image width (expected: 224)
45
+ * @param height - Image height (expected: 224)
46
+ * @returns Float32Array in [1, 3, H, W] layout (flattened)
47
+ */
48
+ function preprocessImage(rawPixels, width, height) {
49
+ const pixels = new Uint8Array(rawPixels);
50
+ const expectedSize = width * height * 3;
51
+ if (pixels.length !== expectedSize) {
52
+ throw new Error(`Invalid buffer size: expected ${expectedSize}, got ${pixels.length}`);
53
+ }
54
+ const float32 = new Float32Array(3 * width * height);
55
+ // HWC -> CHW with ImageNet normalization
56
+ for (let c = 0; c < 3; c++) {
57
+ const mean = IMAGENET_MEAN[c];
58
+ const std = IMAGENET_STD[c];
59
+ for (let h = 0; h < height; h++) {
60
+ for (let w = 0; w < width; w++) {
61
+ const srcIdx = (h * width + w) * 3 + c;
62
+ const dstIdx = c * height * width + h * width + w;
63
+ float32[dstIdx] = (pixels[srcIdx] / 255.0 - mean) / std;
64
+ }
65
+ }
66
+ }
67
+ return float32;
68
+ }
69
+ /**
70
+ * L2 normalize a vector to unit length.
71
+ *
72
+ * Validates all elements are finite numbers (NaN/Infinity defense [H-3]).
73
+ * Throws on zero vector to prevent degenerate embeddings in pgvector.
74
+ *
75
+ * @param vec - Input vector
76
+ * @returns L2-normalized vector
77
+ */
78
+ function l2Normalize(vec) {
79
+ let norm = 0;
80
+ for (let i = 0; i < vec.length; i++) {
81
+ const v = vec[i];
82
+ if (!Number.isFinite(v)) {
83
+ throw new Error(`NaN/Infinity detected at index ${i}`);
84
+ }
85
+ norm += v * v;
86
+ }
87
+ norm = Math.sqrt(norm);
88
+ if (norm === 0) {
89
+ throw new Error("Zero vector: L2 norm is 0");
90
+ }
91
+ const result = new Float32Array(vec.length);
92
+ for (let i = 0; i < vec.length; i++) {
93
+ result[i] = vec[i] / norm;
94
+ }
95
+ return result;
96
+ }
97
+ // =====================================================
98
+ // Session management
99
+ // =====================================================
100
+ async function initializeSession(modelPath) {
101
+ if (session)
102
+ return;
103
+ const ortModule = await getOrt();
104
+ session = (await ortModule.InferenceSession.create(modelPath, {
105
+ executionProviders: ["cpu"],
106
+ }));
107
+ // eslint-disable-next-line no-console
108
+ console.log("[DINOv2Worker] Session initialized:", modelPath);
109
+ }
110
+ async function disposeSession() {
111
+ if (session) {
112
+ try {
113
+ await session.release();
114
+ }
115
+ catch {
116
+ // Disposal failure should not break the workflow
117
+ }
118
+ session = null;
119
+ }
120
+ }
121
+ /**
122
+ * Run DINOv2 inference on preprocessed image data.
123
+ *
124
+ * Input: pixel_values tensor [1, 3, 224, 224]
125
+ * Output: last_hidden_state [1, 257, 768] -> CLS token [768] -> L2 normalized
126
+ *
127
+ * The 257 tokens = 1 CLS token + 256 patch tokens (14x14 patches from 224x224 image, 16px each).
128
+ */
129
+ async function runInference(rawPixels, width, height) {
130
+ if (!session) {
131
+ throw new Error("DINOv2 session not initialized");
132
+ }
133
+ const ortModule = await getOrt();
134
+ // Preprocess: HWC uint8 -> CHW float32 with ImageNet normalization
135
+ const inputData = preprocessImage(rawPixels, width, height);
136
+ // Create input tensor [1, 3, height, width]
137
+ const inputTensor = new ortModule.Tensor("float32", inputData, [1, 3, height, width]);
138
+ // Run inference
139
+ const output = await session.run({ pixel_values: inputTensor });
140
+ // Extract CLS token from last_hidden_state [1, 257, 768]
141
+ const lastHiddenState = output.last_hidden_state;
142
+ if (!lastHiddenState) {
143
+ throw new Error("Model output missing last_hidden_state");
144
+ }
145
+ const data = lastHiddenState.data;
146
+ const dims = lastHiddenState.dims;
147
+ // Validate output shape: [1, 257, 768]
148
+ if (dims.length !== 3 || dims[2] !== DINOV2_EMBEDDING_DIMENSION) {
149
+ throw new Error(`Unexpected output shape: [${dims.join(", ")}], expected [1, 257, ${DINOV2_EMBEDDING_DIMENSION}]`);
150
+ }
151
+ // Extract CLS token (first token, index 0)
152
+ const clsToken = new Float32Array(DINOV2_EMBEDDING_DIMENSION);
153
+ for (let i = 0; i < DINOV2_EMBEDDING_DIMENSION; i++) {
154
+ clsToken[i] = data[i];
155
+ }
156
+ // L2 normalize with NaN/Infinity defense
157
+ const normalized = l2Normalize(clsToken);
158
+ // Convert to plain number[] for structured clone
159
+ return Array.from(normalized);
160
+ }
161
+ // =====================================================
162
+ // Message handler
163
+ // =====================================================
164
+ function sendResponse(response) {
165
+ parentPort?.postMessage(response);
166
+ }
167
+ function sendError(requestId, originalType, error) {
168
+ const errorMessage = error instanceof Error ? error.message : String(error);
169
+ const response = {
170
+ type: "error",
171
+ requestId,
172
+ success: false,
173
+ error: errorMessage,
174
+ originalType,
175
+ };
176
+ parentPort?.postMessage(response);
177
+ }
178
+ async function handleMessage(message) {
179
+ switch (message.type) {
180
+ case "init": {
181
+ const startTime = Date.now();
182
+ await initializeSession(message.modelPath);
183
+ sendResponse({
184
+ type: "init",
185
+ requestId: message.requestId,
186
+ success: true,
187
+ loadTimeMs: Date.now() - startTime,
188
+ });
189
+ break;
190
+ }
191
+ case "infer": {
192
+ const startTime = Date.now();
193
+ const embedding = await runInference(message.imageBuffer, message.width, message.height);
194
+ sendResponse({
195
+ type: "infer",
196
+ requestId: message.requestId,
197
+ success: true,
198
+ embedding,
199
+ inferenceTimeMs: Date.now() - startTime,
200
+ });
201
+ break;
202
+ }
203
+ case "dispose": {
204
+ await disposeSession();
205
+ sendResponse({
206
+ type: "dispose",
207
+ requestId: message.requestId,
208
+ success: true,
209
+ });
210
+ break;
211
+ }
212
+ default: {
213
+ // SEC-M2: Reject unknown message types for defense-in-depth
214
+ const unknownType = message.type ?? "unknown";
215
+ sendError(message.requestId ?? "unknown", unknownType, new Error(`Unknown worker message type: ${String(unknownType)}`));
216
+ break;
217
+ }
218
+ }
219
+ }
220
+ // =====================================================
221
+ // Setup parentPort listener
222
+ // =====================================================
223
+ if (!parentPort) {
224
+ throw new Error("dinov2/worker-thread.ts must be run as a Worker Thread (no parentPort)");
225
+ }
226
+ parentPort.on("message", (message) => {
227
+ handleMessage(message).catch((error) => {
228
+ sendError(message.requestId, message.type, error);
229
+ });
230
+ });
231
+ //# sourceMappingURL=worker-thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-thread.js","sourceRoot":"","sources":["../../src/dinov2/worker-thread.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Embedding service exports
3
+ */
4
+ export { EmbeddingService, embeddingService, cosineSimilarity, DEFAULT_MAX_CACHE_SIZE, DEFAULT_PIPELINE_RECYCLE_THRESHOLD, } from "./service.js";
5
+ export type { EmbeddingTextType, EmbeddingServiceConfig, CacheStats, EmbeddingResult, BatchEmbeddingResult, } from "./types.js";
6
+ export { MultimodalEmbeddingService, DEFAULT_MULTIMODAL_CONFIG, multimodalEmbeddingConfigSchema, multimodalEmbeddingInputSchema, multimodalEmbeddingResultSchema, } from "./multimodal-embedding.service.js";
7
+ export type { IEmbeddingService, MultimodalEmbeddingConfig, MultimodalEmbeddingInput, MultimodalEmbeddingResult, SearchMode, MultimodalEmbeddingResultV2, MultimodalBatchItem, MultimodalBatchResult, MultimodalBatchMetrics, OptimizedBatchProgress, OptimizedBatchOptions, OptimizedBatchResult, } from "./multimodal-embedding.service.js";
8
+ export { StyleEmbeddingService, styleEmbeddingService, createStyleEmbedding, createBatchStyleEmbeddings, createQueryEmbedding, } from "./style-embedding.service.js";
9
+ export type { StyleEmbeddingConfig } from "./style-embedding.service.js";
10
+ export { VisionEmbeddingService, visionEmbeddingService, createVisionEmbedding, createBatchVisionEmbeddings, visionFeaturesToText, } from "./vision-embedding.service.js";
11
+ export type { VisionFeatures, VisionRhythm, VisionDensity, VisionGravity, VisionTheme, VisionEmbeddingServiceConfig, VisionCacheStats, } from "./vision-embedding.types.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EAEzB,UAAU,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EAErB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,4BAA4B,EAC5B,gBAAgB,GACjB,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,13 @@
1
+ // SPDX-FileCopyrightText: 2026 TKMD and Reftrix Contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Embedding service exports
5
+ */
6
+ export { EmbeddingService, embeddingService, cosineSimilarity, DEFAULT_MAX_CACHE_SIZE, DEFAULT_PIPELINE_RECYCLE_THRESHOLD, } from "./service.js";
7
+ // Multimodal Embedding
8
+ export { MultimodalEmbeddingService, DEFAULT_MULTIMODAL_CONFIG, multimodalEmbeddingConfigSchema, multimodalEmbeddingInputSchema, multimodalEmbeddingResultSchema, } from "./multimodal-embedding.service.js";
9
+ // Style Feature Embedding
10
+ export { StyleEmbeddingService, styleEmbeddingService, createStyleEmbedding, createBatchStyleEmbeddings, createQueryEmbedding, } from "./style-embedding.service.js";
11
+ // Vision Feature Embedding
12
+ export { VisionEmbeddingService, visionEmbeddingService, createVisionEmbedding, createBatchVisionEmbeddings, visionFeaturesToText, } from "./vision-embedding.service.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,yCAAyC;AAEzC;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,cAAc,CAAC;AAStB,uBAAuB;AACvB,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,mCAAmC,CAAC;AAkB3C,0BAA0B;AAC1B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAGtC,2BAA2B;AAC3B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,+BAA+B,CAAC"}