@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,221 @@
1
+ // SPDX-FileCopyrightText: 2026 TKMD and Reftrix Contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { EmbeddingService } from "./service.js";
4
+ /**
5
+ * デフォルトのキャッシュサイズ
6
+ */
7
+ const DEFAULT_MAX_CACHE_SIZE = 5000;
8
+ /**
9
+ * VisionFeaturesをテキスト表現に変換する
10
+ *
11
+ * @param features - 視覚特徴量
12
+ * @returns テキスト表現
13
+ */
14
+ export function visionFeaturesToText(features) {
15
+ const parts = [
16
+ `visual_rhythm: ${features.rhythm}`,
17
+ `whitespace_ratio: ${features.whitespaceRatio}`,
18
+ `content_density: ${features.density}`,
19
+ `visual_gravity: ${features.gravity}`,
20
+ `color_theme: ${features.theme}`,
21
+ ];
22
+ // オプショナルフィールドを追加(存在する場合のみ)
23
+ if (features.mood !== undefined && features.mood !== null) {
24
+ parts.push(`mood: ${features.mood}`);
25
+ }
26
+ if (features.brandTone !== undefined && features.brandTone !== null) {
27
+ parts.push(`brandTone: ${features.brandTone}`);
28
+ }
29
+ return parts.join(", ");
30
+ }
31
+ /**
32
+ * VisionFeaturesからキャッシュキーを生成
33
+ */
34
+ function getCacheKey(features) {
35
+ return JSON.stringify({
36
+ r: features.rhythm,
37
+ w: features.whitespaceRatio,
38
+ d: features.density,
39
+ g: features.gravity,
40
+ t: features.theme,
41
+ m: features.mood,
42
+ b: features.brandTone,
43
+ });
44
+ }
45
+ /**
46
+ * VisionEmbeddingService
47
+ *
48
+ * 視覚特徴量から768次元の埋め込みベクトルを生成するサービス
49
+ */
50
+ export class VisionEmbeddingService {
51
+ embeddingService;
52
+ cache = new Map();
53
+ cacheHits = 0;
54
+ cacheMisses = 0;
55
+ cacheEvictions = 0;
56
+ maxCacheSize;
57
+ constructor(config = {}) {
58
+ this.maxCacheSize = config.maxCacheSize ?? DEFAULT_MAX_CACHE_SIZE;
59
+ this.embeddingService = new EmbeddingService();
60
+ if (process.env.NODE_ENV === "development") {
61
+ // eslint-disable-next-line no-console
62
+ console.log("[VisionEmbedding] Service created with maxCacheSize:", this.maxCacheSize);
63
+ }
64
+ }
65
+ /**
66
+ * VisionFeaturesから768次元の埋め込みベクトルを生成
67
+ *
68
+ * @param features - 視覚特徴量
69
+ * @returns 768次元のL2正規化されたベクトル
70
+ */
71
+ async generateVisionEmbedding(features) {
72
+ const cacheKey = getCacheKey(features);
73
+ // キャッシュチェック(LRU更新付き)
74
+ const cached = this.getCacheEntry(cacheKey);
75
+ if (cached) {
76
+ this.cacheHits++;
77
+ if (process.env.NODE_ENV === "development") {
78
+ // eslint-disable-next-line no-console
79
+ console.log("[VisionEmbedding] Cache hit");
80
+ }
81
+ return cached;
82
+ }
83
+ this.cacheMisses++;
84
+ // テキスト表現に変換
85
+ const text = visionFeaturesToText(features);
86
+ if (process.env.NODE_ENV === "development") {
87
+ // eslint-disable-next-line no-console
88
+ console.log("[VisionEmbedding] Generating embedding for:", text.substring(0, 80));
89
+ }
90
+ // EmbeddingServiceを使用して埋め込み生成
91
+ // 'passage'プレフィックスを使用(ドキュメント埋め込み)
92
+ const embedding = await this.embeddingService.generateEmbedding(text, "passage");
93
+ // キャッシュに保存(LRU eviction付き)
94
+ this.setCacheEntry(cacheKey, embedding);
95
+ return embedding;
96
+ }
97
+ /**
98
+ * 複数のVisionFeaturesから埋め込みベクトルを一括生成
99
+ *
100
+ * @param featuresArray - 視覚特徴量の配列
101
+ * @returns 768次元ベクトルの配列
102
+ */
103
+ async generateBatchVisionEmbeddings(featuresArray) {
104
+ if (featuresArray.length === 0) {
105
+ return [];
106
+ }
107
+ if (process.env.NODE_ENV === "development") {
108
+ // eslint-disable-next-line no-console
109
+ console.log("[VisionEmbedding] Batch processing", featuresArray.length, "items");
110
+ }
111
+ // キャッシュチェックと未キャッシュアイテムの特定
112
+ const results = new Array(featuresArray.length);
113
+ const uncachedIndices = [];
114
+ const uncachedTexts = [];
115
+ for (let i = 0; i < featuresArray.length; i++) {
116
+ const features = featuresArray[i];
117
+ if (!features)
118
+ continue;
119
+ const cacheKey = getCacheKey(features);
120
+ const cached = this.getCacheEntry(cacheKey);
121
+ if (cached) {
122
+ this.cacheHits++;
123
+ results[i] = cached;
124
+ }
125
+ else {
126
+ this.cacheMisses++;
127
+ uncachedIndices.push(i);
128
+ uncachedTexts.push(visionFeaturesToText(features));
129
+ }
130
+ }
131
+ // 未キャッシュアイテムの一括生成
132
+ if (uncachedTexts.length > 0) {
133
+ const embeddings = await this.embeddingService.generateBatchEmbeddings(uncachedTexts, "passage");
134
+ for (let j = 0; j < uncachedIndices.length; j++) {
135
+ const originalIndex = uncachedIndices[j];
136
+ const embedding = embeddings[j];
137
+ const features = featuresArray[originalIndex ?? 0];
138
+ if (originalIndex !== undefined && embedding && features) {
139
+ results[originalIndex] = embedding;
140
+ // キャッシュに保存
141
+ const cacheKey = getCacheKey(features);
142
+ this.setCacheEntry(cacheKey, embedding);
143
+ }
144
+ }
145
+ }
146
+ // undefinedを除去して返却
147
+ return results.filter((r) => r !== undefined);
148
+ }
149
+ /**
150
+ * キャッシュ統計を取得
151
+ */
152
+ getCacheStats() {
153
+ return {
154
+ hits: this.cacheHits,
155
+ misses: this.cacheMisses,
156
+ size: this.cache.size,
157
+ evictions: this.cacheEvictions,
158
+ };
159
+ }
160
+ /**
161
+ * キャッシュをクリア
162
+ */
163
+ clearCache() {
164
+ this.cache.clear();
165
+ this.cacheHits = 0;
166
+ this.cacheMisses = 0;
167
+ this.cacheEvictions = 0;
168
+ if (process.env.NODE_ENV === "development") {
169
+ // eslint-disable-next-line no-console
170
+ console.log("[VisionEmbedding] Cache cleared");
171
+ }
172
+ }
173
+ /**
174
+ * キャッシュエントリを取得(LRU更新)
175
+ */
176
+ getCacheEntry(key) {
177
+ const value = this.cache.get(key);
178
+ if (value !== undefined) {
179
+ // LRU: 最近使用したエントリを末尾に移動
180
+ this.cache.delete(key);
181
+ this.cache.set(key, value);
182
+ }
183
+ return value;
184
+ }
185
+ /**
186
+ * キャッシュエントリを設定(LRU eviction)
187
+ */
188
+ setCacheEntry(key, value) {
189
+ // キャッシュがいっぱいの場合、最も古いエントリを削除
190
+ while (this.cache.size >= this.maxCacheSize) {
191
+ const oldestKey = this.cache.keys().next().value;
192
+ if (oldestKey !== undefined) {
193
+ this.cache.delete(oldestKey);
194
+ this.cacheEvictions++;
195
+ if (process.env.NODE_ENV === "development") {
196
+ // eslint-disable-next-line no-console
197
+ console.log("[VisionEmbedding] Cache evicted oldest entry");
198
+ }
199
+ }
200
+ else {
201
+ break;
202
+ }
203
+ }
204
+ this.cache.set(key, value);
205
+ }
206
+ }
207
+ // シングルトンインスタンス
208
+ export const visionEmbeddingService = new VisionEmbeddingService();
209
+ /**
210
+ * 単一のVisionFeaturesから埋め込みを生成するヘルパー関数
211
+ */
212
+ export async function createVisionEmbedding(features) {
213
+ return visionEmbeddingService.generateVisionEmbedding(features);
214
+ }
215
+ /**
216
+ * 複数のVisionFeaturesから埋め込みを一括生成するヘルパー関数
217
+ */
218
+ export async function createBatchVisionEmbeddings(featuresArray) {
219
+ return visionEmbeddingService.generateBatchVisionEmbeddings(featuresArray);
220
+ }
221
+ //# sourceMappingURL=vision-embedding.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-embedding.service.js","sourceRoot":"","sources":["../../src/embeddings/vision-embedding.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Vision Embedding Types
3
+ *
4
+ * Vision Embedding生成ロジック
5
+ *
6
+ * 視覚特徴量を表す型定義
7
+ */
8
+ /**
9
+ * 視覚的リズムの種類
10
+ * - regular: 規則的なリズム(均等配置)
11
+ * - varied: 変化のあるリズム(意図的な強弱)
12
+ * - asymmetric: 非対称なリズム(アシンメトリック)
13
+ */
14
+ export type VisionRhythm = "regular" | "varied" | "asymmetric";
15
+ /**
16
+ * コンテンツ密度の種類
17
+ * - sparse: 疎(ホワイトスペースが多い)
18
+ * - moderate: 中程度
19
+ * - dense: 密集(コンテンツが多い)
20
+ */
21
+ export type VisionDensity = "sparse" | "moderate" | "dense";
22
+ /**
23
+ * 視覚的重心の位置
24
+ * - top: 上部
25
+ * - center: 中央
26
+ * - bottom: 下部
27
+ * - left: 左側
28
+ * - right: 右側
29
+ */
30
+ export type VisionGravity = "top" | "center" | "bottom" | "left" | "right";
31
+ /**
32
+ * カラーテーマの種類
33
+ * - light: ライトテーマ
34
+ * - dark: ダークテーマ
35
+ * - mixed: 混合テーマ
36
+ */
37
+ export type VisionTheme = "light" | "dark" | "mixed";
38
+ /**
39
+ * 視覚特徴量インターフェース
40
+ *
41
+ * Webページのレイアウト/デザインから抽出された視覚的特徴を表す
42
+ */
43
+ export interface VisionFeatures {
44
+ /**
45
+ * 視覚的リズム
46
+ * 要素の配置パターン・繰り返しの規則性
47
+ */
48
+ rhythm: VisionRhythm;
49
+ /**
50
+ * ホワイトスペース比率 (0-1)
51
+ * 0: ホワイトスペースなし(完全にコンテンツで埋まっている)
52
+ * 1: 完全にホワイトスペース(コンテンツなし)
53
+ */
54
+ whitespaceRatio: number;
55
+ /**
56
+ * コンテンツ密度
57
+ * ページ上のコンテンツ要素の密集度
58
+ */
59
+ density: VisionDensity;
60
+ /**
61
+ * 視覚的重心
62
+ * コンテンツの視覚的な重心位置
63
+ */
64
+ gravity: VisionGravity;
65
+ /**
66
+ * カラーテーマ
67
+ * 全体的な色調
68
+ */
69
+ theme: VisionTheme;
70
+ /**
71
+ * ムード (オプション)
72
+ * Vision AIから取得したページの雰囲気/印象
73
+ * 例: 'professional', 'playful', 'elegant', 'minimal'
74
+ */
75
+ mood?: string;
76
+ /**
77
+ * ブランドトーン (オプション)
78
+ * Vision AIから取得したブランドの印象
79
+ * 例: 'corporate', 'startup', 'luxury', 'friendly'
80
+ */
81
+ brandTone?: string;
82
+ }
83
+ /**
84
+ * VisionEmbeddingServiceの設定オプション
85
+ */
86
+ export interface VisionEmbeddingServiceConfig {
87
+ /**
88
+ * キャッシュの最大サイズ
89
+ * @default 5000
90
+ */
91
+ maxCacheSize?: number;
92
+ }
93
+ /**
94
+ * キャッシュ統計情報
95
+ */
96
+ export interface VisionCacheStats {
97
+ hits: number;
98
+ misses: number;
99
+ size: number;
100
+ evictions: number;
101
+ }
102
+ //# sourceMappingURL=vision-embedding.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-embedding.types.d.ts","sourceRoot":"","sources":["../../src/embeddings/vision-embedding.types.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;;OAGG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;;OAGG;IACH,KAAK,EAAE,WAAW,CAAC;IAEnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,4 @@
1
+ // SPDX-FileCopyrightText: 2026 TKMD and Reftrix Contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
4
+ //# sourceMappingURL=vision-embedding.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-embedding.types.js","sourceRoot":"","sources":["../../src/embeddings/vision-embedding.types.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,yCAAyC"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Worker Thread message types for ONNX embedding inference.
3
+ *
4
+ * Communication protocol between main thread (EmbeddingService) and
5
+ * worker thread (embedding-worker.ts). Messages are serialized via
6
+ * structured clone (MessagePort), so only plain objects and typed arrays
7
+ * are used — no ONNX Session/Tensor objects cross the boundary.
8
+ *
9
+ * @module embeddings/worker-thread-types
10
+ */
11
+ /**
12
+ * Initialize the ONNX pipeline in the worker thread.
13
+ */
14
+ export interface WorkerInitMessage {
15
+ type: "init";
16
+ requestId: string;
17
+ config: {
18
+ modelId: string;
19
+ cacheDir: string;
20
+ device: string;
21
+ dtype: string;
22
+ pipelineRecycleThreshold: number;
23
+ };
24
+ }
25
+ /**
26
+ * Generate embedding for a single prefixed text.
27
+ * The main thread is responsible for adding E5 prefix before sending.
28
+ */
29
+ export interface WorkerGenerateMessage {
30
+ type: "generate";
31
+ requestId: string;
32
+ text: string;
33
+ }
34
+ /**
35
+ * Generate embeddings for a batch of prefixed texts.
36
+ * The main thread is responsible for adding E5 prefix before sending.
37
+ */
38
+ export interface WorkerGenerateBatchMessage {
39
+ type: "generateBatch";
40
+ requestId: string;
41
+ texts: string[];
42
+ }
43
+ /**
44
+ * Dispose the ONNX pipeline to free native memory.
45
+ */
46
+ export interface WorkerDisposeMessage {
47
+ type: "dispose";
48
+ requestId: string;
49
+ }
50
+ /**
51
+ * Terminate the worker thread gracefully.
52
+ */
53
+ export interface WorkerTerminateMessage {
54
+ type: "terminate";
55
+ requestId: string;
56
+ }
57
+ /**
58
+ * Switch the ONNX execution provider at runtime (e.g. cpu → cuda).
59
+ * Disposes the current pipeline and re-initializes with the new provider.
60
+ */
61
+ export interface WorkerSwitchProviderMessage {
62
+ type: "switch-provider";
63
+ requestId: string;
64
+ provider: "cpu" | "cuda";
65
+ }
66
+ /**
67
+ * Release GPU resources by disposing the pipeline and reverting to CPU.
68
+ * Safe to call even if already on CPU — acts as a no-op dispose.
69
+ */
70
+ export interface WorkerReleaseGpuMessage {
71
+ type: "release-gpu";
72
+ requestId: string;
73
+ }
74
+ export type WorkerMessage = WorkerInitMessage | WorkerGenerateMessage | WorkerGenerateBatchMessage | WorkerDisposeMessage | WorkerTerminateMessage | WorkerSwitchProviderMessage | WorkerReleaseGpuMessage;
75
+ /**
76
+ * Successful response from init.
77
+ */
78
+ export interface WorkerInitResponse {
79
+ type: "init";
80
+ requestId: string;
81
+ success: true;
82
+ loadTimeMs: number;
83
+ /** The resolved ONNX execution provider ('cpu' or 'cuda'). */
84
+ executionProvider: string;
85
+ }
86
+ /**
87
+ * Successful response from generate.
88
+ * Embedding is a plain number[] (structured clone compatible).
89
+ */
90
+ export interface WorkerGenerateResponse {
91
+ type: "generate";
92
+ requestId: string;
93
+ success: true;
94
+ embedding: number[];
95
+ inferenceTimeMs: number;
96
+ }
97
+ /**
98
+ * Successful response from generateBatch.
99
+ */
100
+ export interface WorkerGenerateBatchResponse {
101
+ type: "generateBatch";
102
+ requestId: string;
103
+ success: true;
104
+ embeddings: number[][];
105
+ inferenceTimeMs: number;
106
+ }
107
+ /**
108
+ * Successful response from dispose.
109
+ */
110
+ export interface WorkerDisposeResponse {
111
+ type: "dispose";
112
+ requestId: string;
113
+ success: true;
114
+ }
115
+ /**
116
+ * Successful response from terminate (sent just before process.exit).
117
+ */
118
+ export interface WorkerTerminateResponse {
119
+ type: "terminate";
120
+ requestId: string;
121
+ success: true;
122
+ }
123
+ /**
124
+ * Successful response from switch-provider.
125
+ */
126
+ export interface WorkerSwitchProviderResponse {
127
+ type: "switch-provider";
128
+ requestId: string;
129
+ success: true;
130
+ /** The provider now in effect after the switch. */
131
+ provider: "cpu" | "cuda";
132
+ }
133
+ /**
134
+ * Successful response from release-gpu.
135
+ */
136
+ export interface WorkerReleaseGpuResponse {
137
+ type: "release-gpu";
138
+ requestId: string;
139
+ success: true;
140
+ }
141
+ /**
142
+ * Error response for any message type.
143
+ */
144
+ export interface WorkerErrorResponse {
145
+ type: "error";
146
+ requestId: string;
147
+ success: false;
148
+ error: string;
149
+ originalType: WorkerMessage["type"];
150
+ }
151
+ export type WorkerResponse = WorkerInitResponse | WorkerGenerateResponse | WorkerGenerateBatchResponse | WorkerDisposeResponse | WorkerTerminateResponse | WorkerSwitchProviderResponse | WorkerReleaseGpuResponse | WorkerErrorResponse;
152
+ //# sourceMappingURL=worker-thread-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-thread-types.d.ts","sourceRoot":"","sources":["../../src/embeddings/worker-thread-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ // SPDX-FileCopyrightText: 2026 TKMD and Reftrix Contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
4
+ //# sourceMappingURL=worker-thread-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-thread-types.js","sourceRoot":"","sources":["../../src/embeddings/worker-thread-types.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,yCAAyC"}
@@ -0,0 +1,4 @@
1
+ declare let inferencesSinceRecycle: number;
2
+ declare let totalRecycles: number;
3
+ export { totalRecycles, inferencesSinceRecycle };
4
+ //# sourceMappingURL=worker-thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-thread.d.ts","sourceRoot":"","sources":["../../src/embeddings/worker-thread.ts"],"names":[],"mappings":"AA2HA,QAAA,IAAI,sBAAsB,QAAI,CAAC;AAC/B,QAAA,IAAI,aAAa,QAAI,CAAC;AAoZtB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAC"}