| 334 | |
| 335 | // Function to execute JavaScript in a dynamically created Web Worker |
| 336 | function executeInDynamicWorker(javascriptCode: string) { |
| 337 | return new Promise((resolve, reject) => { |
| 338 | const workerCode = ` |
| 339 | onmessage = function(e) { |
| 340 | try { |
| 341 | const result = eval(e.data); |
| 342 | postMessage({ success: true, result }); |
| 343 | } catch (error) { |
| 344 | postMessage({ success: false, error: error.toString() }); |
| 345 | } |
| 346 | }; |
| 347 | `; |
| 348 | |
| 349 | const blob = new Blob([workerCode], { type: 'application/javascript' }); |
| 350 | const workerUrl = URL.createObjectURL(blob); |
| 351 | const worker = new Worker(workerUrl); |
| 352 | |
| 353 | worker.onmessage = function (e: MessageEvent<WorkerMessage>) { |
| 354 | URL.revokeObjectURL(workerUrl); // Clean up the object URL |
| 355 | if (e.data.success) { |
| 356 | resolve(e.data.result); |
| 357 | } else { |
| 358 | reject(new Error(e.data.error)); |
| 359 | } |
| 360 | }; |
| 361 | |
| 362 | worker.onerror = function (error) { |
| 363 | URL.revokeObjectURL(workerUrl); // Clean up the object URL |
| 364 | reject(new Error(`Worker error: ${error.message}`)); |
| 365 | }; |
| 366 | |
| 367 | worker.postMessage(javascriptCode); |
| 368 | }); |
| 369 | } |
| 370 | |
| 371 | function convertToToolCommandString(tool: Tool): string { |
| 372 | // convert a tool into a schema which is compatible ti toolCommandChat |