UNPKG

clustering-tfjs

Version:

High-performance TypeScript clustering algorithms (K-Means, Spectral, Agglomerative) with TensorFlow.js acceleration and scikit-learn compatibility

106 lines (98 loc) 3.39 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.benchmarkInBrowser = benchmarkInBrowser; const puppeteer_1 = __importDefault(require("puppeteer")); const http_1 = require("http"); const benchmarkHTML = ` <!DOCTYPE html> <html> <head> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"></script> </head> <body> <script> window.runBenchmark = async function(config) { const { algorithm, backend, samples, features, centers } = config; // Set backend await tf.setBackend(backend); await tf.ready(); // Generate random data (simplified makeBlobs) const X = tf.randomNormal([samples, features]); // Track memory const memBefore = tf.memory(); const start = performance.now(); // Run clustering (simplified - would need actual implementations) // For now, just do some tensor operations to simulate work let result; if (algorithm === 'kmeans') { // Simulate k-means operations const centroids = tf.randomNormal([centers, features]); for (let i = 0; i < 10; i++) { const distances = tf.sum(tf.square(tf.sub( tf.expandDims(X, 1), tf.expandDims(centroids, 0) )), 2); const labels = tf.argMin(distances, 1); labels.dispose(); distances.dispose(); } centroids.dispose(); } const executionTime = performance.now() - start; const memAfter = tf.memory(); X.dispose(); return { algorithm, backend, datasetSize: samples, features, executionTime, memoryUsed: memAfter.numBytes - memBefore.numBytes, }; }; </script> </body> </html> `; async function benchmarkInBrowser(configs) { // Create a simple HTTP server to serve the benchmark page const server = (0, http_1.createServer)((req, res) => { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(benchmarkHTML); }); await new Promise((resolve) => { server.listen(0, () => resolve()); }); const address = server.address(); if (!address || typeof address !== 'object') { throw new Error('Failed to get server address'); } const port = address.port; // Launch headless browser const browser = await puppeteer_1.default.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'], }); const page = await browser.newPage(); await page.goto(`http://localhost:${port}`); const results = []; for (const config of configs) { console.log(`Running ${config.algorithm} on ${config.backend} in browser...`); try { const result = await page.evaluate( // eslint-disable-next-line @typescript-eslint/no-explicit-any (cfg) => window.runBenchmark(cfg), config); results.push(result); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); console.error(`Failed: ${errorMessage}`); } } await browser.close(); server.close(); return results; }