Merge commit 'd803bfe2b1fe7f5e219e50ac20d6801a0a58ac75' as 'vendor/ruvector'
This commit is contained in:
37
vendor/ruvector/examples/onnx-embeddings-wasm/parallel-worker.mjs
vendored
Normal file
37
vendor/ruvector/examples/onnx-embeddings-wasm/parallel-worker.mjs
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Worker thread for parallel ONNX embedding generation
|
||||
*/
|
||||
import { parentPort, workerData } from 'worker_threads';
|
||||
import { WasmEmbedder, WasmEmbedderConfig } from './pkg/ruvector_onnx_embeddings_wasm.js';
|
||||
|
||||
// Initialize embedder with model data passed from main thread
|
||||
const { modelBytes, tokenizerJson, config } = workerData;
|
||||
|
||||
const embedderConfig = new WasmEmbedderConfig()
|
||||
.setMaxLength(config.maxLength)
|
||||
.setNormalize(true)
|
||||
.setPooling(0);
|
||||
|
||||
const embedder = WasmEmbedder.withConfig(
|
||||
new Uint8Array(modelBytes),
|
||||
tokenizerJson,
|
||||
embedderConfig
|
||||
);
|
||||
|
||||
// Listen for texts to embed
|
||||
parentPort.on('message', (message) => {
|
||||
if (message.type === 'embed') {
|
||||
const { id, texts } = message;
|
||||
try {
|
||||
const embeddings = texts.map(text => Array.from(embedder.embedOne(text)));
|
||||
parentPort.postMessage({ type: 'result', id, embeddings });
|
||||
} catch (error) {
|
||||
parentPort.postMessage({ type: 'error', id, error: error.message });
|
||||
}
|
||||
} else if (message.type === 'shutdown') {
|
||||
process.exit(0);
|
||||
}
|
||||
});
|
||||
|
||||
// Signal ready
|
||||
parentPort.postMessage({ type: 'ready' });
|
||||
Reference in New Issue
Block a user