tywrap 0.1.2 → 0.2.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.
@@ -1,553 +1,22 @@
1
1
  /**
2
- * Optimized Node.js Runtime Bridge with Connection Pooling and Memory Management
3
- * High-performance Python subprocess management for production workloads
2
+ * @deprecated Import from './node.js' instead.
3
+ *
4
+ * OptimizedNodeBridge has been unified with NodeBridge. The NodeBridge class
5
+ * now supports both single-process mode (default) and multi-process pooling
6
+ * via the minProcesses/maxProcesses options.
7
+ *
8
+ * Migration:
9
+ * ```typescript
10
+ * // Before
11
+ * import { OptimizedNodeBridge, ProcessPoolOptions } from './optimized-node.js';
12
+ * const bridge = new OptimizedNodeBridge({ minProcesses: 2, maxProcesses: 4 });
13
+ *
14
+ * // After
15
+ * import { NodeBridge, NodeBridgeOptions } from './node.js';
16
+ * const bridge = new NodeBridge({ minProcesses: 2, maxProcesses: 4 });
17
+ * ```
18
+ *
19
+ * This file is maintained for backward compatibility only.
4
20
  */
5
- import { delimiter, isAbsolute, join, resolve } from 'node:path';
6
- import { fileURLToPath } from 'node:url';
7
- import { createRequire } from 'node:module';
8
- import { EventEmitter } from 'events';
9
- import { globalCache } from '../utils/cache.js';
10
- import { autoRegisterArrowDecoder, decodeValueAsync } from '../utils/codec.js';
11
- import { getDefaultPythonPath } from '../utils/python.js';
12
- import { getVenvBinDir, getVenvPythonExe } from '../utils/runtime.js';
13
- import { RuntimeBridge } from './base.js';
14
- import { BridgeProtocolError } from './errors.js';
15
- import { BridgeCore, ensureJsonFallback, ensurePythonEncoding, getMaxLineLengthFromEnv, getPathKey, normalizeEnv, } from './bridge-core.js';
16
- import { getComponentLogger } from '../utils/logger.js';
17
- const log = getComponentLogger('OptimizedBridge');
18
- function resolveDefaultScriptPath() {
19
- try {
20
- return fileURLToPath(new URL('../../runtime/python_bridge.py', import.meta.url));
21
- }
22
- catch {
23
- return 'runtime/python_bridge.py';
24
- }
25
- }
26
- function resolveVirtualEnv(virtualEnv, cwd) {
27
- const venvPath = resolve(cwd, virtualEnv);
28
- const binDir = join(venvPath, getVenvBinDir());
29
- const pythonPath = join(binDir, getVenvPythonExe());
30
- return { venvPath, binDir, pythonPath };
31
- }
32
- export class OptimizedNodeBridge extends RuntimeBridge {
33
- processPool = [];
34
- roundRobinIndex = 0;
35
- cleanupTimer;
36
- options;
37
- emitter = new EventEmitter();
38
- disposed = false;
39
- // Performance monitoring
40
- stats = {
41
- totalRequests: 0,
42
- totalTime: 0,
43
- cacheHits: 0,
44
- poolHits: 0,
45
- poolMisses: 0,
46
- processSpawns: 0,
47
- processDeaths: 0,
48
- memoryPeak: 0,
49
- averageTime: 0,
50
- cacheHitRate: 0,
51
- };
52
- constructor(options = {}) {
53
- super();
54
- const cwd = options.cwd ?? process.cwd();
55
- const virtualEnv = options.virtualEnv ? resolve(cwd, options.virtualEnv) : undefined;
56
- const venv = virtualEnv ? resolveVirtualEnv(virtualEnv, cwd) : undefined;
57
- const scriptPath = options.scriptPath ?? resolveDefaultScriptPath();
58
- const resolvedScriptPath = isAbsolute(scriptPath) ? scriptPath : resolve(cwd, scriptPath);
59
- this.options = {
60
- minProcesses: options.minProcesses ?? 2,
61
- maxProcesses: options.maxProcesses ?? 8,
62
- maxIdleTime: options.maxIdleTime ?? 300000, // 5 minutes
63
- maxRequestsPerProcess: options.maxRequestsPerProcess ?? 1000,
64
- pythonPath: options.pythonPath ?? venv?.pythonPath ?? getDefaultPythonPath(),
65
- scriptPath: resolvedScriptPath,
66
- virtualEnv,
67
- cwd,
68
- timeoutMs: options.timeoutMs ?? 30000,
69
- maxLineLength: options.maxLineLength,
70
- enableJsonFallback: options.enableJsonFallback ?? false,
71
- enableCache: options.enableCache ?? false,
72
- env: options.env ?? {},
73
- warmupCommands: options.warmupCommands ?? [],
74
- };
75
- // Start with minimum processes
76
- this.startCleanupScheduler();
77
- }
78
- async init() {
79
- if (this.disposed) {
80
- throw new Error('Bridge has been disposed');
81
- }
82
- const require = createRequire(import.meta.url);
83
- await autoRegisterArrowDecoder({
84
- loader: () => require('apache-arrow'),
85
- });
86
- // Ensure minimum processes are available
87
- while (this.processPool.length < this.options.minProcesses) {
88
- await this.spawnProcess();
89
- }
90
- // Warm up processes if configured
91
- if (this.options.warmupCommands.length > 0) {
92
- await this.warmupProcesses();
93
- }
94
- }
95
- async call(module, functionName, args, kwargs) {
96
- const startTime = performance.now();
97
- const cacheKey = this.options.enableCache
98
- ? this.safeCacheKey('runtime_call', module, functionName, args, kwargs)
99
- : null;
100
- if (cacheKey) {
101
- const cached = await globalCache.get(cacheKey);
102
- if (cached !== null) {
103
- this.stats.cacheHits++;
104
- this.updateStats(performance.now() - startTime);
105
- // Runtime cache HIT for ${module}.${functionName}
106
- return cached;
107
- }
108
- }
109
- try {
110
- const result = await this.executeRequest({
111
- method: 'call',
112
- params: { module, functionName, args, kwargs },
113
- });
114
- const duration = performance.now() - startTime;
115
- // Cache result for pure functions (simple heuristic)
116
- if (cacheKey && this.isPureFunctionCandidate(functionName, args)) {
117
- await globalCache.set(cacheKey, result, {
118
- computeTime: duration,
119
- dependencies: [module],
120
- });
121
- }
122
- this.updateStats(duration);
123
- return result;
124
- }
125
- catch (error) {
126
- this.updateStats(performance.now() - startTime, true);
127
- throw error;
128
- }
129
- }
130
- async instantiate(module, className, args, kwargs) {
131
- const startTime = performance.now();
132
- try {
133
- const result = await this.executeRequest({
134
- method: 'instantiate',
135
- params: { module, className, args, kwargs },
136
- });
137
- this.updateStats(performance.now() - startTime);
138
- return result;
139
- }
140
- catch (error) {
141
- this.updateStats(performance.now() - startTime, true);
142
- throw error;
143
- }
144
- }
145
- async callMethod(handle, methodName, args, kwargs) {
146
- const startTime = performance.now();
147
- try {
148
- const result = await this.executeRequest({
149
- method: 'call_method',
150
- params: { handle, methodName, args, kwargs },
151
- });
152
- this.updateStats(performance.now() - startTime);
153
- return result;
154
- }
155
- catch (error) {
156
- this.updateStats(performance.now() - startTime, true);
157
- throw error;
158
- }
159
- }
160
- async disposeInstance(handle) {
161
- await this.executeRequest({
162
- method: 'dispose_instance',
163
- params: { handle },
164
- });
165
- }
166
- /**
167
- * Execute request with intelligent process selection
168
- */
169
- async executeRequest(payload) {
170
- let worker = this.selectOptimalWorker();
171
- // Spawn new process if none available and under limit
172
- if (!worker && this.processPool.length < this.options.maxProcesses) {
173
- try {
174
- worker = await this.spawnProcess();
175
- this.stats.poolMisses++;
176
- }
177
- catch (error) {
178
- throw new Error(`Failed to spawn worker process: ${error}`);
179
- }
180
- }
181
- // Wait for worker if all are busy
182
- worker ??= await this.waitForAvailableWorker();
183
- this.stats.poolHits++;
184
- return this.sendToWorker(worker, payload);
185
- }
186
- /**
187
- * Select optimal worker based on load and performance
188
- */
189
- selectOptimalWorker() {
190
- const availableWorkers = this.processPool.filter(w => !w.busy && !w.quarantined && w.process.exitCode === null);
191
- if (availableWorkers.length === 0) {
192
- return null;
193
- }
194
- // Simple round-robin for now, could be enhanced with load-based selection
195
- const worker = availableWorkers[this.roundRobinIndex % availableWorkers.length];
196
- this.roundRobinIndex = (this.roundRobinIndex + 1) % availableWorkers.length;
197
- return worker ?? null;
198
- }
199
- /**
200
- * Wait for any worker to become available
201
- */
202
- async waitForAvailableWorker(timeoutMs = 5000) {
203
- return new Promise((resolvePromise, reject) => {
204
- const timeout = setTimeout(() => {
205
- reject(new Error('Timeout waiting for available worker'));
206
- }, timeoutMs);
207
- const checkWorker = () => {
208
- const worker = this.selectOptimalWorker();
209
- if (worker) {
210
- clearTimeout(timeout);
211
- resolvePromise(worker);
212
- }
213
- else {
214
- // Check again in 10ms
215
- setTimeout(checkWorker, 10);
216
- }
217
- };
218
- checkWorker();
219
- });
220
- }
221
- /**
222
- * Send request to specific worker
223
- */
224
- async sendToWorker(worker, payload) {
225
- worker.busy = true;
226
- worker.requestCount++;
227
- worker.lastUsed = Date.now();
228
- const startTime = performance.now();
229
- try {
230
- const result = await worker.core.send(payload);
231
- const duration = performance.now() - startTime;
232
- worker.stats.totalTime += duration;
233
- worker.stats.totalRequests++;
234
- worker.stats.averageTime = worker.stats.totalTime / worker.stats.totalRequests;
235
- return result;
236
- }
237
- catch (error) {
238
- worker.stats.errorCount++;
239
- throw error;
240
- }
241
- finally {
242
- worker.busy = false;
243
- }
244
- }
245
- quarantineWorker(worker, error) {
246
- if (worker.quarantined) {
247
- return;
248
- }
249
- worker.quarantined = true;
250
- log.warn('Quarantining worker', { workerId: worker.id, error: String(error) });
251
- this.terminateWorker(worker, { force: true })
252
- .then(() => {
253
- if (!this.disposed && this.processPool.length < this.options.minProcesses) {
254
- this.spawnProcess().catch(spawnError => {
255
- log.error('Failed to spawn replacement worker after quarantine', {
256
- error: String(spawnError),
257
- });
258
- });
259
- }
260
- })
261
- .catch(terminateError => {
262
- log.warn('Failed to terminate quarantined worker', {
263
- workerId: worker.id,
264
- error: String(terminateError),
265
- });
266
- });
267
- }
268
- /**
269
- * Spawn new worker process with optimizations
270
- */
271
- async spawnProcess() {
272
- const { spawn } = await import('child_process');
273
- const workerId = `worker_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
274
- let env = normalizeEnv(process.env, this.options.env);
275
- env.PYTHONUNBUFFERED = '1'; // Ensure immediate output
276
- env.PYTHONDONTWRITEBYTECODE = '1'; // Skip .pyc files for faster startup
277
- ensurePythonEncoding(env);
278
- if (this.options.virtualEnv) {
279
- const venv = resolveVirtualEnv(this.options.virtualEnv, this.options.cwd);
280
- env.VIRTUAL_ENV = venv.venvPath;
281
- const pathKey = getPathKey(env);
282
- // eslint-disable-next-line security/detect-object-injection -- env keys are dynamic by design
283
- const currentPath = env[pathKey] ?? '';
284
- // eslint-disable-next-line security/detect-object-injection -- env keys are dynamic by design
285
- env[pathKey] = `${venv.binDir}${delimiter}${currentPath}`;
286
- }
287
- ensureJsonFallback(env, this.options.enableJsonFallback);
288
- env = normalizeEnv(env, {});
289
- const maxLineLength = this.options.maxLineLength ?? getMaxLineLengthFromEnv(env);
290
- const childProcess = spawn(this.options.pythonPath, [this.options.scriptPath], {
291
- cwd: this.options.cwd,
292
- stdio: ['pipe', 'pipe', 'pipe'],
293
- env,
294
- });
295
- const worker = {
296
- process: childProcess,
297
- id: workerId,
298
- requestCount: 0,
299
- lastUsed: Date.now(),
300
- busy: false,
301
- quarantined: false,
302
- core: null,
303
- stats: {
304
- totalRequests: 0,
305
- totalTime: 0,
306
- averageTime: 0,
307
- errorCount: 0,
308
- },
309
- };
310
- worker.core = new BridgeCore({
311
- write: (data) => {
312
- if (!worker.process.stdin?.writable) {
313
- throw new BridgeProtocolError('Worker process stdin not writable');
314
- }
315
- worker.process.stdin.write(data);
316
- },
317
- }, {
318
- timeoutMs: this.options.timeoutMs,
319
- maxLineLength,
320
- decodeValue: decodeValueAsync,
321
- onFatalError: (error) => this.quarantineWorker(worker, error),
322
- onTimeout: (error) => this.quarantineWorker(worker, error),
323
- });
324
- // Setup process event handlers
325
- this.setupProcessHandlers(worker);
326
- this.processPool.push(worker);
327
- this.stats.processSpawns++;
328
- // Spawned Python worker process ${workerId} (pool size: ${this.processPool.length})
329
- return worker;
330
- }
331
- /**
332
- * Setup event handlers for worker process
333
- */
334
- setupProcessHandlers(worker) {
335
- const childProcess = worker.process;
336
- childProcess.stdout?.on('data', (chunk) => {
337
- worker.core.handleStdoutData(chunk);
338
- });
339
- childProcess.stderr?.on('data', (chunk) => {
340
- worker.core.handleStderrData(chunk);
341
- const errorText = chunk.toString().trim();
342
- if (errorText) {
343
- log.warn('Worker stderr', { workerId: worker.id, output: errorText });
344
- }
345
- });
346
- // Handle process exit
347
- childProcess.on('exit', code => {
348
- log.warn('Worker exited', { workerId: worker.id, code });
349
- worker.core.handleProcessExit();
350
- this.handleWorkerExit(worker, code);
351
- });
352
- // Handle process errors
353
- childProcess.on('error', error => {
354
- log.error('Worker error', { workerId: worker.id, error: String(error) });
355
- worker.core.handleProcessError(error);
356
- this.handleWorkerExit(worker, -1);
357
- });
358
- }
359
- /**
360
- * Handle worker process exit
361
- */
362
- handleWorkerExit(worker, _code) {
363
- if (!this.processPool.includes(worker)) {
364
- return;
365
- }
366
- worker.core.clear();
367
- // Remove from pool
368
- const index = this.processPool.indexOf(worker);
369
- if (index >= 0) {
370
- this.processPool.splice(index, 1);
371
- this.stats.processDeaths++;
372
- }
373
- // Spawn replacement if needed and not disposing
374
- if (!this.disposed && this.processPool.length < this.options.minProcesses) {
375
- this.spawnProcess().catch(error => {
376
- log.error('Failed to spawn replacement worker', { error: String(error) });
377
- });
378
- }
379
- }
380
- /**
381
- * Warm up processes with configured commands
382
- */
383
- async warmupProcesses() {
384
- const warmupPromises = this.processPool.map(async (worker) => {
385
- for (const cmd of this.options.warmupCommands) {
386
- try {
387
- await this.sendToWorker(worker, {
388
- method: cmd.method,
389
- params: cmd.params,
390
- });
391
- }
392
- catch (error) {
393
- log.warn('Warmup command failed', { workerId: worker.id, error: String(error) });
394
- }
395
- }
396
- });
397
- await Promise.all(warmupPromises);
398
- // Warmed up ${this.processPool.length} worker processes
399
- }
400
- safeCacheKey(prefix, ...inputs) {
401
- try {
402
- return globalCache.generateKey(prefix, ...inputs);
403
- }
404
- catch {
405
- return null;
406
- }
407
- }
408
- /**
409
- * Heuristic to determine if function result should be cached
410
- */
411
- isPureFunctionCandidate(functionName, args) {
412
- // Simple heuristics - could be made more sophisticated
413
- const pureFunctionPatterns = [
414
- /^(get|fetch|read|load|find|search|query|select)_/i,
415
- /^(compute|calculate|process|transform|convert)_/i,
416
- /^(encode|decode|serialize|deserialize)_/i,
417
- ];
418
- const impureFunctionPatterns = [
419
- /^(set|save|write|update|insert|delete|create|modify)_/i,
420
- /^(send|post|put|patch)_/i,
421
- /random|uuid|timestamp|now|current/i,
422
- ];
423
- // Don't cache if function name suggests mutation
424
- if (impureFunctionPatterns.some(pattern => pattern.test(functionName))) {
425
- return false;
426
- }
427
- // Cache if function name suggests pure computation
428
- if (pureFunctionPatterns.some(pattern => pattern.test(functionName))) {
429
- return true;
430
- }
431
- // Don't cache if args contain mutable objects (very basic check)
432
- const hasComplexArgs = args.some(arg => arg !== null && typeof arg === 'object' && !(arg instanceof Date));
433
- return !hasComplexArgs && args.length <= 3; // Cache simple calls with few args
434
- }
435
- /**
436
- * Update performance statistics
437
- */
438
- updateStats(duration, _error = false) {
439
- this.stats.totalRequests++;
440
- this.stats.totalTime += duration;
441
- const currentMemory = process.memoryUsage().heapUsed;
442
- if (currentMemory > this.stats.memoryPeak) {
443
- this.stats.memoryPeak = currentMemory;
444
- }
445
- }
446
- /**
447
- * Get performance statistics
448
- */
449
- getStats() {
450
- const avgTime = this.stats.totalRequests > 0 ? this.stats.totalTime / this.stats.totalRequests : 0;
451
- const hitRate = this.stats.totalRequests > 0 ? this.stats.cacheHits / this.stats.totalRequests : 0;
452
- return {
453
- ...this.stats,
454
- averageTime: avgTime,
455
- cacheHitRate: hitRate,
456
- poolSize: this.processPool.length,
457
- busyWorkers: this.processPool.filter(w => w.busy).length,
458
- memoryUsage: process.memoryUsage(),
459
- workerStats: this.processPool.map(w => ({
460
- id: w.id,
461
- requestCount: w.requestCount,
462
- averageTime: w.stats.averageTime,
463
- errorCount: w.stats.errorCount,
464
- busy: w.busy,
465
- pendingRequests: w.core.getPendingCount(),
466
- })),
467
- };
468
- }
469
- /**
470
- * Cleanup idle processes
471
- */
472
- async cleanup() {
473
- const now = Date.now();
474
- const idleWorkers = this.processPool.filter(w => !w.busy &&
475
- now - w.lastUsed > this.options.maxIdleTime &&
476
- this.processPool.length > this.options.minProcesses);
477
- for (const worker of idleWorkers) {
478
- await this.terminateWorker(worker);
479
- }
480
- // Restart workers that have handled too many requests
481
- const overusedWorkers = this.processPool.filter(w => !w.busy && w.requestCount >= this.options.maxRequestsPerProcess);
482
- for (const worker of overusedWorkers) {
483
- await this.terminateWorker(worker);
484
- if (this.processPool.length < this.options.minProcesses) {
485
- await this.spawnProcess();
486
- }
487
- }
488
- }
489
- /**
490
- * Gracefully terminate a worker
491
- */
492
- async terminateWorker(worker, options = {}) {
493
- if (worker.busy && !options.force) {
494
- return;
495
- }
496
- const index = this.processPool.indexOf(worker);
497
- if (index >= 0) {
498
- this.processPool.splice(index, 1);
499
- this.stats.processDeaths++;
500
- }
501
- worker.core.handleProcessExit();
502
- worker.core.clear();
503
- // Graceful termination
504
- try {
505
- if (worker.process.exitCode === null) {
506
- worker.process.kill('SIGTERM');
507
- // Force kill if not terminated in 5 seconds
508
- setTimeout(() => {
509
- if (worker.process.exitCode === null) {
510
- worker.process.kill('SIGKILL');
511
- }
512
- }, 5000);
513
- }
514
- }
515
- catch (error) {
516
- log.warn('Error terminating worker', { workerId: worker.id, error: String(error) });
517
- }
518
- // Terminated worker ${worker.id}
519
- }
520
- /**
521
- * Start cleanup scheduler
522
- */
523
- startCleanupScheduler() {
524
- this.cleanupTimer = setInterval(async () => {
525
- try {
526
- await this.cleanup();
527
- }
528
- catch (error) {
529
- log.error('Cleanup error', { error: String(error) });
530
- }
531
- }, 60000); // Cleanup every minute
532
- }
533
- /**
534
- * Dispose all resources
535
- */
536
- async dispose() {
537
- if (this.disposed) {
538
- return;
539
- }
540
- this.disposed = true;
541
- if (this.cleanupTimer) {
542
- clearInterval(this.cleanupTimer);
543
- this.cleanupTimer = undefined;
544
- }
545
- // Terminate all workers
546
- const terminationPromises = this.processPool.map(worker => this.terminateWorker(worker, { force: true }));
547
- await Promise.all(terminationPromises);
548
- this.processPool.length = 0;
549
- this.emitter.removeAllListeners();
550
- // Disposed optimized Node.js bridge
551
- }
552
- }
21
+ export { NodeBridge as OptimizedNodeBridge } from './node.js';
553
22
  //# sourceMappingURL=optimized-node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"optimized-node.js","sourceRoot":"","sources":["../../src/runtime/optimized-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"optimized-node.js","sourceRoot":"","sources":["../../src/runtime/optimized-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,UAAU,IAAI,mBAAmB,EAAgD,MAAM,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tywrap",
3
- "version": "0.1.2",
4
- "description": "TypeScript wrapper for Python libraries with full type safety (EXPERIMENTAL - v0.1.2)",
3
+ "version": "0.2.0",
4
+ "description": "TypeScript wrapper for Python libraries with full type safety (EXPERIMENTAL - v0.2.0)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -75,7 +75,7 @@ export {
75
75
  } from './utils/codec.js';
76
76
 
77
77
  // Version info
78
- export const VERSION = '0.1.2';
78
+ export const VERSION = '0.2.0';
79
79
 
80
80
  /**
81
81
  * Quick setup function for getting started