agentic-flow 2.1.2 โ 2.1.3
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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/agents/claudeAgentDirect.js +4 -4
- package/dist/agents/claudeAgentDirect.js.map +1 -1
- package/dist/billing/cli.js +0 -0
- package/dist/cli-proxy.js +67 -3
- package/dist/cli-proxy.js.map +1 -1
- package/dist/config/claudeFlow.d.ts +1 -1
- package/dist/optimizations/configuration-tuning.d.ts +1 -1
- package/dist/router/providers/onnx-local-optimized.d.ts +10 -1
- package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
- package/dist/router/providers/onnx-local-optimized.js +12 -10
- package/dist/router/providers/onnx-local-optimized.js.map +1 -1
- package/dist/router/providers/onnx-local.d.ts +9 -0
- package/dist/router/providers/onnx-local.d.ts.map +1 -1
- package/dist/router/providers/onnx-local.js +24 -9
- package/dist/router/providers/onnx-local.js.map +1 -1
- package/dist/router/providers/onnx-phi4.d.ts.map +1 -1
- package/dist/router/providers/onnx-phi4.js +2 -1
- package/dist/router/providers/onnx-phi4.js.map +1 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +2 -1
- package/dist/router/router.js.map +1 -1
- package/dist/router/test-onnx-benchmark.js +2 -1
- package/dist/router/test-onnx-benchmark.js.map +1 -1
- package/dist/router/test-onnx-local.js +2 -1
- package/dist/router/test-onnx-local.js.map +1 -1
- package/dist/utils/model-downloader.d.ts +14 -0
- package/dist/utils/model-downloader.d.ts.map +1 -1
- package/dist/utils/model-downloader.js +19 -3
- package/dist/utils/model-downloader.js.map +1 -1
- package/package.json +1 -1
- package/wasm/reasoningbank/reasoningbank_wasm_bg.js +32 -32
- package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
- package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm.d.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-onnx-benchmark.js","sourceRoot":"","sources":["../../src/router/test-onnx-benchmark.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAS9D,KAAK,UAAU,YAAY;IACzB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;QACrC,SAAS,EAAE,4EAA4E;QACvF,kBAAkB,EAAE,CAAC,KAAK,CAAC;QAC3B,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,GAAG;KACjB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;SAC1C;QACD,SAAS,EAAE,EAAE;KACd,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAC7C,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAE3E,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;QAC1C,OAAO,EAAE,YAAY;QACrB,eAAe,EAAE,QAAQ;KAC1B,CAAC,CAAC;IAEH,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,8CAA8C,EAAE;SAC1E;QACD,SAAS,EAAE,EAAE;KACd,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAC7C,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAE3E,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;QAC1C,OAAO,EAAE,YAAY;QACrB,eAAe,EAAE,QAAQ;KAC1B,CAAC,CAAC;IAEH,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,+BAA+B,EAAE;SAC3D;QACD,SAAS,EAAE,EAAE;KACd,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAC7C,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAE3E,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;QAC1C,OAAO,EAAE,YAAY;QACrB,eAAe,EAAE,QAAQ;KAC1B,CAAC,CAAC;IAEH,kCAAkC;IAClC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;YACnC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,kCAAkC,EAAE;YAClE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qCAAqC,EAAE;SACjE;QACD,SAAS,EAAE,EAAE;KACd,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAC7C,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAE3E,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;QAC1C,OAAO,EAAE,YAAY;QACrB,eAAe,EAAE,QAAQ;KAC1B,CAAC,CAAC;IAEH,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACvF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACnF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAElE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,cAAc,EAAE,CAAC,CAAC,OAAO;QACzB,YAAY,EAAE,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;KAC3C,CAAC,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,SAAS,GAAG,EAAE,CAAC;IAErB,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC;IACvF,CAAC;SAAM,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC,SAAS,IAAI,CAAC,CAAC;IAC9F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n/**\n * Comprehensive benchmark for ONNX local inference\n * Tests CPU performance against targets\n */\n\nimport { ONNXLocalProvider } from './providers/onnx-local.js';\n\ninterface BenchmarkResult {\n test: string;\n tokens: number;\n latency: number;\n tokensPerSecond: number;\n}\n\nasync function runBenchmark() {\n console.log('๐ ONNX Local Inference Benchmark (Phi-4 CPU)\\n');\n console.log('Target: 15-25 tokens/sec on CPU');\n console.log('================================================\\n');\n\n const provider = new ONNXLocalProvider({\n modelPath: './models/phi-4/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx',\n executionProviders: ['cpu'],\n maxTokens: 50,\n temperature: 0.7\n });\n\n const results: BenchmarkResult[] = [];\n\n // Test 1: Short response\n console.log('Test 1: Short Response (Math)');\n console.log('==============================');\n\n const test1Start = Date.now();\n const response1 = await provider.chat({\n model: 'phi-4',\n messages: [\n { role: 'user', content: 'What is 2+2?' }\n ],\n maxTokens: 20\n });\n const test1Latency = Date.now() - test1Start;\n const test1TPS = (response1.usage?.outputTokens || 0) / (test1Latency / 1000);\n\n console.log(`โ
Response: ${response1.content[0].type === 'text' ? response1.content[0].text : ''}`);\n console.log(`โฑ๏ธ ${test1Latency}ms | ${test1TPS.toFixed(1)} tokens/sec\\n`);\n\n results.push({\n test: 'Short Math',\n tokens: response1.usage?.outputTokens || 0,\n latency: test1Latency,\n tokensPerSecond: test1TPS\n });\n\n // Test 2: Medium response\n console.log('Test 2: Medium Response (Reasoning)');\n console.log('=====================================');\n\n const test2Start = Date.now();\n const response2 = await provider.chat({\n model: 'phi-4',\n messages: [\n { role: 'user', content: 'Explain why the sky is blue in one sentence.' }\n ],\n maxTokens: 30\n });\n const test2Latency = Date.now() - test2Start;\n const test2TPS = (response2.usage?.outputTokens || 0) / (test2Latency / 1000);\n\n console.log(`โ
Response: ${response2.content[0].type === 'text' ? response2.content[0].text : ''}`);\n console.log(`โฑ๏ธ ${test2Latency}ms | ${test2TPS.toFixed(1)} tokens/sec\\n`);\n\n results.push({\n test: 'Medium Reasoning',\n tokens: response2.usage?.outputTokens || 0,\n latency: test2Latency,\n tokensPerSecond: test2TPS\n });\n\n // Test 3: Longer response\n console.log('Test 3: Longer Response (Creative)');\n console.log('====================================');\n\n const test3Start = Date.now();\n const response3 = await provider.chat({\n model: 'phi-4',\n messages: [\n { role: 'user', content: 'List 5 programming languages.' }\n ],\n maxTokens: 50\n });\n const test3Latency = Date.now() - test3Start;\n const test3TPS = (response3.usage?.outputTokens || 0) / (test3Latency / 1000);\n\n console.log(`โ
Response: ${response3.content[0].type === 'text' ? response3.content[0].text : ''}`);\n console.log(`โฑ๏ธ ${test3Latency}ms | ${test3TPS.toFixed(1)} tokens/sec\\n`);\n\n results.push({\n test: 'Longer Creative',\n tokens: response3.usage?.outputTokens || 0,\n latency: test3Latency,\n tokensPerSecond: test3TPS\n });\n\n // Test 4: Multi-turn conversation\n console.log('Test 4: Multi-Turn Conversation');\n console.log('================================');\n\n const test4Start = Date.now();\n const response4 = await provider.chat({\n model: 'phi-4',\n messages: [\n { role: 'user', content: 'Hello!' },\n { role: 'assistant', content: 'Hello! How can I help you today?' },\n { role: 'user', content: 'Tell me a fun fact about computers.' }\n ],\n maxTokens: 40\n });\n const test4Latency = Date.now() - test4Start;\n const test4TPS = (response4.usage?.outputTokens || 0) / (test4Latency / 1000);\n\n console.log(`โ
Response: ${response4.content[0].type === 'text' ? response4.content[0].text : ''}`);\n console.log(`โฑ๏ธ ${test4Latency}ms | ${test4TPS.toFixed(1)} tokens/sec\\n`);\n\n results.push({\n test: 'Multi-Turn',\n tokens: response4.usage?.outputTokens || 0,\n latency: test4Latency,\n tokensPerSecond: test4TPS\n });\n\n // Summary\n console.log('\\n๐ Benchmark Summary');\n console.log('====================\\n');\n\n const avgTPS = results.reduce((sum, r) => sum + r.tokensPerSecond, 0) / results.length;\n const avgLatency = results.reduce((sum, r) => sum + r.latency, 0) / results.length;\n const totalTokens = results.reduce((sum, r) => sum + r.tokens, 0);\n\n console.table(results.map(r => ({\n Test: r.test,\n Tokens: r.tokens,\n 'Latency (ms)': r.latency,\n 'Tokens/Sec': r.tokensPerSecond.toFixed(1)\n })));\n\n console.log(`\\n๐ Performance Metrics:`);\n console.log(` Average Tokens/Sec: ${avgTPS.toFixed(1)}`);\n console.log(` Average Latency: ${avgLatency.toFixed(0)}ms`);\n console.log(` Total Tokens Generated: ${totalTokens}`);\n\n console.log(`\\n๐ฏ Target Validation:`);\n const targetMin = 15;\n const targetMax = 25;\n\n if (avgTPS >= targetMin && avgTPS <= targetMax * 1.5) {\n console.log(` โ
PASS: ${avgTPS.toFixed(1)} tokens/sec is within acceptable range`);\n } else if (avgTPS < targetMin) {\n console.log(` โ ๏ธ SLOW: ${avgTPS.toFixed(1)} tokens/sec is below target (${targetMin}+)`);\n } else {\n console.log(` ๐ FAST: ${avgTPS.toFixed(1)} tokens/sec exceeds target!`);\n }\n\n console.log(`\\n๐ฐ Cost Savings:`);\n console.log(` Local Inference: $0.00`);\n console.log(` Anthropic Equivalent: ~$${(totalTokens * 0.00003).toFixed(4)}`);\n console.log(` Savings: 100%`);\n\n console.log(`\\n๐ Privacy:`);\n console.log(` โ
All processing local`);\n console.log(` โ
No data sent to cloud`);\n console.log(` โ
GDPR/HIPAA compliant`);\n\n await provider.dispose();\n}\n\nrunBenchmark().catch(error => {\n console.error('โ Benchmark failed:', error);\n process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"file":"test-onnx-benchmark.js","sourceRoot":"","sources":["../../src/router/test-onnx-benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * Comprehensive benchmark for ONNX local inference\n * Tests CPU performance against targets\n */\n\nimport { ONNXLocalProvider } from './providers/onnx-local.js';\nimport { PHI4_MODEL_PATH } from '../utils/model-downloader.js';\n\ninterface BenchmarkResult {\n test: string;\n tokens: number;\n latency: number;\n tokensPerSecond: number;\n}\n\nasync function runBenchmark() {\n console.log('๐ ONNX Local Inference Benchmark (Phi-4 CPU)\\n');\n console.log('Target: 15-25 tokens/sec on CPU');\n console.log('================================================\\n');\n\n const provider = new ONNXLocalProvider({\n modelPath: PHI4_MODEL_PATH,\n executionProviders: ['cpu'],\n maxTokens: 50,\n temperature: 0.7\n });\n\n const results: BenchmarkResult[] = [];\n\n // Test 1: Short response\n console.log('Test 1: Short Response (Math)');\n console.log('==============================');\n\n const test1Start = Date.now();\n const response1 = await provider.chat({\n model: 'phi-4',\n messages: [\n { role: 'user', content: 'What is 2+2?' }\n ],\n maxTokens: 20\n });\n const test1Latency = Date.now() - test1Start;\n const test1TPS = (response1.usage?.outputTokens || 0) / (test1Latency / 1000);\n\n console.log(`โ
Response: ${response1.content[0].type === 'text' ? response1.content[0].text : ''}`);\n console.log(`โฑ๏ธ ${test1Latency}ms | ${test1TPS.toFixed(1)} tokens/sec\\n`);\n\n results.push({\n test: 'Short Math',\n tokens: response1.usage?.outputTokens || 0,\n latency: test1Latency,\n tokensPerSecond: test1TPS\n });\n\n // Test 2: Medium response\n console.log('Test 2: Medium Response (Reasoning)');\n console.log('=====================================');\n\n const test2Start = Date.now();\n const response2 = await provider.chat({\n model: 'phi-4',\n messages: [\n { role: 'user', content: 'Explain why the sky is blue in one sentence.' }\n ],\n maxTokens: 30\n });\n const test2Latency = Date.now() - test2Start;\n const test2TPS = (response2.usage?.outputTokens || 0) / (test2Latency / 1000);\n\n console.log(`โ
Response: ${response2.content[0].type === 'text' ? response2.content[0].text : ''}`);\n console.log(`โฑ๏ธ ${test2Latency}ms | ${test2TPS.toFixed(1)} tokens/sec\\n`);\n\n results.push({\n test: 'Medium Reasoning',\n tokens: response2.usage?.outputTokens || 0,\n latency: test2Latency,\n tokensPerSecond: test2TPS\n });\n\n // Test 3: Longer response\n console.log('Test 3: Longer Response (Creative)');\n console.log('====================================');\n\n const test3Start = Date.now();\n const response3 = await provider.chat({\n model: 'phi-4',\n messages: [\n { role: 'user', content: 'List 5 programming languages.' }\n ],\n maxTokens: 50\n });\n const test3Latency = Date.now() - test3Start;\n const test3TPS = (response3.usage?.outputTokens || 0) / (test3Latency / 1000);\n\n console.log(`โ
Response: ${response3.content[0].type === 'text' ? response3.content[0].text : ''}`);\n console.log(`โฑ๏ธ ${test3Latency}ms | ${test3TPS.toFixed(1)} tokens/sec\\n`);\n\n results.push({\n test: 'Longer Creative',\n tokens: response3.usage?.outputTokens || 0,\n latency: test3Latency,\n tokensPerSecond: test3TPS\n });\n\n // Test 4: Multi-turn conversation\n console.log('Test 4: Multi-Turn Conversation');\n console.log('================================');\n\n const test4Start = Date.now();\n const response4 = await provider.chat({\n model: 'phi-4',\n messages: [\n { role: 'user', content: 'Hello!' },\n { role: 'assistant', content: 'Hello! How can I help you today?' },\n { role: 'user', content: 'Tell me a fun fact about computers.' }\n ],\n maxTokens: 40\n });\n const test4Latency = Date.now() - test4Start;\n const test4TPS = (response4.usage?.outputTokens || 0) / (test4Latency / 1000);\n\n console.log(`โ
Response: ${response4.content[0].type === 'text' ? response4.content[0].text : ''}`);\n console.log(`โฑ๏ธ ${test4Latency}ms | ${test4TPS.toFixed(1)} tokens/sec\\n`);\n\n results.push({\n test: 'Multi-Turn',\n tokens: response4.usage?.outputTokens || 0,\n latency: test4Latency,\n tokensPerSecond: test4TPS\n });\n\n // Summary\n console.log('\\n๐ Benchmark Summary');\n console.log('====================\\n');\n\n const avgTPS = results.reduce((sum, r) => sum + r.tokensPerSecond, 0) / results.length;\n const avgLatency = results.reduce((sum, r) => sum + r.latency, 0) / results.length;\n const totalTokens = results.reduce((sum, r) => sum + r.tokens, 0);\n\n console.table(results.map(r => ({\n Test: r.test,\n Tokens: r.tokens,\n 'Latency (ms)': r.latency,\n 'Tokens/Sec': r.tokensPerSecond.toFixed(1)\n })));\n\n console.log(`\\n๐ Performance Metrics:`);\n console.log(` Average Tokens/Sec: ${avgTPS.toFixed(1)}`);\n console.log(` Average Latency: ${avgLatency.toFixed(0)}ms`);\n console.log(` Total Tokens Generated: ${totalTokens}`);\n\n console.log(`\\n๐ฏ Target Validation:`);\n const targetMin = 15;\n const targetMax = 25;\n\n if (avgTPS >= targetMin && avgTPS <= targetMax * 1.5) {\n console.log(` โ
PASS: ${avgTPS.toFixed(1)} tokens/sec is within acceptable range`);\n } else if (avgTPS < targetMin) {\n console.log(` โ ๏ธ SLOW: ${avgTPS.toFixed(1)} tokens/sec is below target (${targetMin}+)`);\n } else {\n console.log(` ๐ FAST: ${avgTPS.toFixed(1)} tokens/sec exceeds target!`);\n }\n\n console.log(`\\n๐ฐ Cost Savings:`);\n console.log(` Local Inference: $0.00`);\n console.log(` Anthropic Equivalent: ~$${(totalTokens * 0.00003).toFixed(4)}`);\n console.log(` Savings: 100%`);\n\n console.log(`\\n๐ Privacy:`);\n console.log(` โ
All processing local`);\n console.log(` โ
No data sent to cloud`);\n console.log(` โ
GDPR/HIPAA compliant`);\n\n await provider.dispose();\n}\n\nrunBenchmark().catch(error => {\n console.error('โ Benchmark failed:', error);\n process.exit(1);\n});\n"]}
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
* Test ONNX local inference with Phi-4 model
|
|
4
4
|
*/
|
|
5
5
|
import { ONNXLocalProvider } from './providers/onnx-local.js';
|
|
6
|
+
import { PHI4_MODEL_PATH } from '../utils/model-downloader.js';
|
|
6
7
|
async function testONNXLocal() {
|
|
7
8
|
console.log('๐งช Testing ONNX Local Inference (Phi-4 CPU)\n');
|
|
8
9
|
try {
|
|
9
10
|
const provider = new ONNXLocalProvider({
|
|
10
|
-
modelPath:
|
|
11
|
+
modelPath: PHI4_MODEL_PATH,
|
|
11
12
|
executionProviders: ['cpu'],
|
|
12
13
|
maxTokens: 50
|
|
13
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-onnx-local.js","sourceRoot":"","sources":["../../src/router/test-onnx-local.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"test-onnx-local.js","sourceRoot":"","sources":["../../src/router/test-onnx-local.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,KAAK,UAAU,aAAa;IAC1B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;YACrC,SAAS,EAAE,eAAe;YAC1B,kBAAkB,EAAE,CAAC,KAAK,CAAC;YAC3B,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;YACnC,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;aAC1C;YACD,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,KAAK,EAAE,WAAW,SAAS,QAAQ,CAAC,KAAK,EAAE,YAAY,MAAM,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEjF,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAEhC,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAE3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,aAAa,EAAE,CAAC","sourcesContent":["#!/usr/bin/env node\n/**\n * Test ONNX local inference with Phi-4 model\n */\n\nimport { ONNXLocalProvider } from './providers/onnx-local.js';\nimport { PHI4_MODEL_PATH } from '../utils/model-downloader.js';\n\nasync function testONNXLocal() {\n console.log('๐งช Testing ONNX Local Inference (Phi-4 CPU)\\n');\n\n try {\n const provider = new ONNXLocalProvider({\n modelPath: PHI4_MODEL_PATH,\n executionProviders: ['cpu'],\n maxTokens: 50\n });\n\n console.log('Test: Simple Inference');\n console.log('======================');\n\n const response = await provider.chat({\n model: 'phi-4',\n messages: [\n { role: 'user', content: 'What is 2+2?' }\n ],\n maxTokens: 20\n });\n\n console.log('\\n๐ฅ Response:');\n console.log(` Text: ${response.content[0].type === 'text' ? response.content[0].text : ''}`);\n console.log(` Latency: ${response.metadata?.latency}ms`);\n console.log(` Tokens: ${response.usage?.inputTokens} in / ${response.usage?.outputTokens} out`);\n console.log(` Cost: $${response.metadata?.cost}`);\n console.log(` Providers: ${response.metadata?.executionProviders?.join(', ')}`);\n\n console.log('\\nโ
Test passed!');\n\n await provider.dispose();\n\n } catch (error) {\n console.error('\\nโ Test failed:', error);\n process.exit(1);\n }\n}\n\ntestONNXLocal();\n"]}
|
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Downloads Phi-4 ONNX model from HuggingFace on first use
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Where ONNX models live on disk.
|
|
8
|
+
*
|
|
9
|
+
* These paths were previously relative ('./models/...'), so they resolved
|
|
10
|
+
* against process.cwd() and a ~4.6GB download landed in whatever directory the
|
|
11
|
+
* command happened to run from โ re-downloaded once per working directory, and
|
|
12
|
+
* left untracked inside any repository it was invoked in.
|
|
13
|
+
*
|
|
14
|
+
* Exported so the reader (router/providers/onnx-local.ts) can resolve the same
|
|
15
|
+
* path the writer uses; the two previously disagreed (phi-4 vs phi-4-mini).
|
|
16
|
+
*/
|
|
17
|
+
export declare const MODEL_ROOT: string;
|
|
18
|
+
export declare const PHI4_MODEL_PATH: string;
|
|
19
|
+
export declare const PHI4_MODEL_DATA_PATH: string;
|
|
6
20
|
export interface DownloadProgress {
|
|
7
21
|
downloaded: number;
|
|
8
22
|
total: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-downloader.d.ts","sourceRoot":"","sources":["../../src/utils/model-downloader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"model-downloader.d.ts","sourceRoot":"","sources":["../../src/utils/model-downloader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,QACwB,CAAC;AAEhD,eAAO,MAAM,eAAe,QAE3B,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAA4B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAA4B;IAE3C;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAIf;IAEF,OAAO,CAAC,aAAa,CAInB;IAEF;;OAEG;IACH,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAK9C;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACG,aAAa,CACjB,SAAS,CAAC,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAChD,OAAO,CAAC,MAAM,CAAC;IAkFlB;;OAEG;IACG,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BzF;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB/E;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM;CAI1D;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,iBAAwB,CAAC;AAErD;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAChD,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
|
@@ -4,9 +4,25 @@
|
|
|
4
4
|
* Downloads Phi-4 ONNX model from HuggingFace on first use
|
|
5
5
|
*/
|
|
6
6
|
import { createWriteStream, existsSync, mkdirSync } from 'fs';
|
|
7
|
-
import { dirname } from 'path';
|
|
7
|
+
import { dirname, join } from 'path';
|
|
8
8
|
import { createHash } from 'crypto';
|
|
9
9
|
import { readFileSync } from 'fs';
|
|
10
|
+
import { homedir } from 'os';
|
|
11
|
+
/**
|
|
12
|
+
* Where ONNX models live on disk.
|
|
13
|
+
*
|
|
14
|
+
* These paths were previously relative ('./models/...'), so they resolved
|
|
15
|
+
* against process.cwd() and a ~4.6GB download landed in whatever directory the
|
|
16
|
+
* command happened to run from โ re-downloaded once per working directory, and
|
|
17
|
+
* left untracked inside any repository it was invoked in.
|
|
18
|
+
*
|
|
19
|
+
* Exported so the reader (router/providers/onnx-local.ts) can resolve the same
|
|
20
|
+
* path the writer uses; the two previously disagreed (phi-4 vs phi-4-mini).
|
|
21
|
+
*/
|
|
22
|
+
export const MODEL_ROOT = process.env.AGENTIC_FLOW_MODEL_DIR
|
|
23
|
+
|| join(homedir(), '.agentic-flow', 'models');
|
|
24
|
+
export const PHI4_MODEL_PATH = join(MODEL_ROOT, 'phi-4-mini', 'cpu_and_mobile', 'cpu-int4-rtn-block-32-acc-level-4', 'model.onnx');
|
|
25
|
+
export const PHI4_MODEL_DATA_PATH = `${PHI4_MODEL_PATH}.data`;
|
|
10
26
|
export class ModelDownloader {
|
|
11
27
|
baseUrl = 'https://huggingface.co';
|
|
12
28
|
/**
|
|
@@ -17,12 +33,12 @@ export class ModelDownloader {
|
|
|
17
33
|
phi4Model = {
|
|
18
34
|
repo: 'microsoft/Phi-4-mini-instruct-onnx',
|
|
19
35
|
filename: 'cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx',
|
|
20
|
-
localPath:
|
|
36
|
+
localPath: PHI4_MODEL_PATH
|
|
21
37
|
};
|
|
22
38
|
phi4ModelData = {
|
|
23
39
|
repo: 'microsoft/Phi-4-mini-instruct-onnx',
|
|
24
40
|
filename: 'cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx.data',
|
|
25
|
-
localPath:
|
|
41
|
+
localPath: PHI4_MODEL_DATA_PATH
|
|
26
42
|
};
|
|
27
43
|
/**
|
|
28
44
|
* Check if model exists locally
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-downloader.js","sourceRoot":"","sources":["../../src/utils/model-downloader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Automatic Model Downloader for ONNX Phi-4\n *\n * Downloads Phi-4 ONNX model from HuggingFace on first use\n */\n\nimport { createWriteStream, existsSync, mkdirSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { pipeline } from 'stream/promises';\nimport { createHash } from 'crypto';\nimport { readFileSync } from 'fs';\n\nexport interface DownloadProgress {\n downloaded: number;\n total: number;\n percentage: number;\n}\n\nexport interface ModelInfo {\n repo: string;\n filename: string;\n localPath: string;\n sha256?: string;\n}\n\nexport class ModelDownloader {\n private baseUrl = 'https://huggingface.co';\n\n /**\n * Phi-4 Mini ONNX INT4 quantized model (CPU optimized)\n * Size: ~52MB model + ~4.86GB data = ~4.9GB total\n * Note: Requires TWO files - model.onnx and model.onnx.data\n */\n private phi4Model: ModelInfo = {\n repo: 'microsoft/Phi-4-mini-instruct-onnx',\n filename: 'cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx',\n localPath: './models/phi-4-mini/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx'\n };\n\n private phi4ModelData: ModelInfo = {\n repo: 'microsoft/Phi-4-mini-instruct-onnx',\n filename: 'cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx.data',\n localPath: './models/phi-4-mini/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx.data'\n };\n\n /**\n * Check if model exists locally\n */\n isModelDownloaded(modelPath?: string): boolean {\n const path = modelPath || this.phi4Model.localPath;\n return existsSync(path);\n }\n\n /**\n * Get model download URL\n */\n private getDownloadUrl(model: ModelInfo): string {\n return `${this.baseUrl}/${model.repo}/resolve/main/${model.filename}`;\n }\n\n /**\n * Download model with progress tracking\n */\n async downloadModel(\n modelInfo?: ModelInfo,\n onProgress?: (progress: DownloadProgress) => void\n ): Promise<string> {\n const model = modelInfo || this.phi4Model;\n\n // Check if already downloaded\n if (this.isModelDownloaded(model.localPath)) {\n console.log(`โ
Model already exists at ${model.localPath}`);\n return model.localPath;\n }\n\n // Create directory\n const dir = dirname(model.localPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const url = this.getDownloadUrl(model);\n console.log(`๐ฆ Downloading Phi-4 ONNX model from HuggingFace...`);\n console.log(` URL: ${url}`);\n console.log(` Destination: ${model.localPath}`);\n\n try {\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Download failed: ${response.statusText}`);\n }\n\n const totalSize = parseInt(response.headers.get('content-length') || '0', 10);\n let downloadedSize = 0;\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n const fileStream = createWriteStream(model.localPath);\n\n // Track progress\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n if (value) {\n chunks.push(value);\n downloadedSize += value.length;\n\n if (onProgress && totalSize > 0) {\n onProgress({\n downloaded: downloadedSize,\n total: totalSize,\n percentage: (downloadedSize / totalSize) * 100\n });\n }\n\n // Write chunk\n fileStream.write(value);\n }\n }\n\n fileStream.end();\n\n // Wait for file stream to finish\n await new Promise<void>((resolve, reject) => {\n fileStream.on('finish', () => resolve());\n fileStream.on('error', reject);\n });\n\n console.log(`โ
Model downloaded successfully`);\n console.log(` Size: ${(downloadedSize / (1024 * 1024)).toFixed(2)} MB`);\n console.log(` Path: ${model.localPath}`);\n\n return model.localPath;\n\n } catch (error) {\n console.error(`โ Model download failed:`, error);\n throw new Error(`Failed to download model: ${error}`);\n }\n }\n\n /**\n * Download Phi-4 ONNX model if needed (downloads BOTH .onnx and .onnx.data files)\n */\n async ensurePhi4Model(onProgress?: (progress: DownloadProgress) => void): Promise<string> {\n const mainFileExists = this.isModelDownloaded(this.phi4Model.localPath);\n const dataFileExists = this.isModelDownloaded(this.phi4ModelData.localPath);\n\n if (mainFileExists && dataFileExists) {\n return this.phi4Model.localPath;\n }\n\n console.log(`๐ Phi-4-mini ONNX model not found locally`);\n console.log(`๐ฅ Starting automatic download...`);\n console.log(` This is a one-time download (~4.9GB total)`);\n console.log(` Model: microsoft/Phi-4-mini-instruct-onnx (INT4 quantized)`);\n console.log(` Files: model.onnx (~52MB) + model.onnx.data (~4.86GB)`);\n console.log(``);\n\n // Download main model file if missing\n if (!mainFileExists) {\n console.log(`๐ฆ Downloading model.onnx...`);\n await this.downloadModel(this.phi4Model, onProgress);\n console.log(``);\n }\n\n // Download data file if missing\n if (!dataFileExists) {\n console.log(`๐ฆ Downloading model.onnx.data (this is the large 4.86GB file)...`);\n await this.downloadModel(this.phi4ModelData, onProgress);\n }\n\n return this.phi4Model.localPath;\n }\n\n /**\n * Verify model file integrity (optional)\n */\n async verifyModel(modelPath: string, expectedSha256?: string): Promise<boolean> {\n if (!expectedSha256) {\n return true; // Skip verification if no hash provided\n }\n\n try {\n const fileBuffer = readFileSync(modelPath);\n const hash = createHash('sha256').update(fileBuffer).digest('hex');\n\n if (hash !== expectedSha256) {\n console.error(`โ Model verification failed`);\n console.error(` Expected: ${expectedSha256}`);\n console.error(` Got: ${hash}`);\n return false;\n }\n\n console.log(`โ
Model verification passed`);\n return true;\n\n } catch (error) {\n console.error(`โ Model verification error:`, error);\n return false;\n }\n }\n\n /**\n * Get model info\n */\n getModelInfo(): ModelInfo {\n return this.phi4Model;\n }\n\n /**\n * Format download progress for display\n */\n static formatProgress(progress: DownloadProgress): string {\n const mb = (bytes: number) => (bytes / (1024 * 1024)).toFixed(2);\n return `${progress.percentage.toFixed(1)}% (${mb(progress.downloaded)}/${mb(progress.total)} MB)`;\n }\n}\n\n/**\n * Global singleton instance\n */\nexport const modelDownloader = new ModelDownloader();\n\n/**\n * Convenience function for downloading Phi-4 model\n */\nexport async function ensurePhi4Model(\n onProgress?: (progress: DownloadProgress) => void\n): Promise<string> {\n return modelDownloader.ensurePhi4Model(onProgress);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"model-downloader.js","sourceRoot":"","sources":["../../src/utils/model-downloader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Automatic Model Downloader for ONNX Phi-4\n *\n * Downloads Phi-4 ONNX model from HuggingFace on first use\n */\n\nimport { createWriteStream, existsSync, mkdirSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { pipeline } from 'stream/promises';\nimport { createHash } from 'crypto';\nimport { readFileSync } from 'fs';\nimport { homedir } from 'os';\n\n/**\n * Where ONNX models live on disk.\n *\n * These paths were previously relative ('./models/...'), so they resolved\n * against process.cwd() and a ~4.6GB download landed in whatever directory the\n * command happened to run from โ re-downloaded once per working directory, and\n * left untracked inside any repository it was invoked in.\n *\n * Exported so the reader (router/providers/onnx-local.ts) can resolve the same\n * path the writer uses; the two previously disagreed (phi-4 vs phi-4-mini).\n */\nexport const MODEL_ROOT = process.env.AGENTIC_FLOW_MODEL_DIR\n || join(homedir(), '.agentic-flow', 'models');\n\nexport const PHI4_MODEL_PATH = join(\n MODEL_ROOT, 'phi-4-mini', 'cpu_and_mobile', 'cpu-int4-rtn-block-32-acc-level-4', 'model.onnx'\n);\n\nexport const PHI4_MODEL_DATA_PATH = `${PHI4_MODEL_PATH}.data`;\n\nexport interface DownloadProgress {\n downloaded: number;\n total: number;\n percentage: number;\n}\n\nexport interface ModelInfo {\n repo: string;\n filename: string;\n localPath: string;\n sha256?: string;\n}\n\nexport class ModelDownloader {\n private baseUrl = 'https://huggingface.co';\n\n /**\n * Phi-4 Mini ONNX INT4 quantized model (CPU optimized)\n * Size: ~52MB model + ~4.86GB data = ~4.9GB total\n * Note: Requires TWO files - model.onnx and model.onnx.data\n */\n private phi4Model: ModelInfo = {\n repo: 'microsoft/Phi-4-mini-instruct-onnx',\n filename: 'cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx',\n localPath: PHI4_MODEL_PATH\n };\n\n private phi4ModelData: ModelInfo = {\n repo: 'microsoft/Phi-4-mini-instruct-onnx',\n filename: 'cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx.data',\n localPath: PHI4_MODEL_DATA_PATH\n };\n\n /**\n * Check if model exists locally\n */\n isModelDownloaded(modelPath?: string): boolean {\n const path = modelPath || this.phi4Model.localPath;\n return existsSync(path);\n }\n\n /**\n * Get model download URL\n */\n private getDownloadUrl(model: ModelInfo): string {\n return `${this.baseUrl}/${model.repo}/resolve/main/${model.filename}`;\n }\n\n /**\n * Download model with progress tracking\n */\n async downloadModel(\n modelInfo?: ModelInfo,\n onProgress?: (progress: DownloadProgress) => void\n ): Promise<string> {\n const model = modelInfo || this.phi4Model;\n\n // Check if already downloaded\n if (this.isModelDownloaded(model.localPath)) {\n console.log(`โ
Model already exists at ${model.localPath}`);\n return model.localPath;\n }\n\n // Create directory\n const dir = dirname(model.localPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const url = this.getDownloadUrl(model);\n console.log(`๐ฆ Downloading Phi-4 ONNX model from HuggingFace...`);\n console.log(` URL: ${url}`);\n console.log(` Destination: ${model.localPath}`);\n\n try {\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Download failed: ${response.statusText}`);\n }\n\n const totalSize = parseInt(response.headers.get('content-length') || '0', 10);\n let downloadedSize = 0;\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n const fileStream = createWriteStream(model.localPath);\n\n // Track progress\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n if (value) {\n chunks.push(value);\n downloadedSize += value.length;\n\n if (onProgress && totalSize > 0) {\n onProgress({\n downloaded: downloadedSize,\n total: totalSize,\n percentage: (downloadedSize / totalSize) * 100\n });\n }\n\n // Write chunk\n fileStream.write(value);\n }\n }\n\n fileStream.end();\n\n // Wait for file stream to finish\n await new Promise<void>((resolve, reject) => {\n fileStream.on('finish', () => resolve());\n fileStream.on('error', reject);\n });\n\n console.log(`โ
Model downloaded successfully`);\n console.log(` Size: ${(downloadedSize / (1024 * 1024)).toFixed(2)} MB`);\n console.log(` Path: ${model.localPath}`);\n\n return model.localPath;\n\n } catch (error) {\n console.error(`โ Model download failed:`, error);\n throw new Error(`Failed to download model: ${error}`);\n }\n }\n\n /**\n * Download Phi-4 ONNX model if needed (downloads BOTH .onnx and .onnx.data files)\n */\n async ensurePhi4Model(onProgress?: (progress: DownloadProgress) => void): Promise<string> {\n const mainFileExists = this.isModelDownloaded(this.phi4Model.localPath);\n const dataFileExists = this.isModelDownloaded(this.phi4ModelData.localPath);\n\n if (mainFileExists && dataFileExists) {\n return this.phi4Model.localPath;\n }\n\n console.log(`๐ Phi-4-mini ONNX model not found locally`);\n console.log(`๐ฅ Starting automatic download...`);\n console.log(` This is a one-time download (~4.9GB total)`);\n console.log(` Model: microsoft/Phi-4-mini-instruct-onnx (INT4 quantized)`);\n console.log(` Files: model.onnx (~52MB) + model.onnx.data (~4.86GB)`);\n console.log(``);\n\n // Download main model file if missing\n if (!mainFileExists) {\n console.log(`๐ฆ Downloading model.onnx...`);\n await this.downloadModel(this.phi4Model, onProgress);\n console.log(``);\n }\n\n // Download data file if missing\n if (!dataFileExists) {\n console.log(`๐ฆ Downloading model.onnx.data (this is the large 4.86GB file)...`);\n await this.downloadModel(this.phi4ModelData, onProgress);\n }\n\n return this.phi4Model.localPath;\n }\n\n /**\n * Verify model file integrity (optional)\n */\n async verifyModel(modelPath: string, expectedSha256?: string): Promise<boolean> {\n if (!expectedSha256) {\n return true; // Skip verification if no hash provided\n }\n\n try {\n const fileBuffer = readFileSync(modelPath);\n const hash = createHash('sha256').update(fileBuffer).digest('hex');\n\n if (hash !== expectedSha256) {\n console.error(`โ Model verification failed`);\n console.error(` Expected: ${expectedSha256}`);\n console.error(` Got: ${hash}`);\n return false;\n }\n\n console.log(`โ
Model verification passed`);\n return true;\n\n } catch (error) {\n console.error(`โ Model verification error:`, error);\n return false;\n }\n }\n\n /**\n * Get model info\n */\n getModelInfo(): ModelInfo {\n return this.phi4Model;\n }\n\n /**\n * Format download progress for display\n */\n static formatProgress(progress: DownloadProgress): string {\n const mb = (bytes: number) => (bytes / (1024 * 1024)).toFixed(2);\n return `${progress.percentage.toFixed(1)}% (${mb(progress.downloaded)}/${mb(progress.total)} MB)`;\n }\n}\n\n/**\n * Global singleton instance\n */\nexport const modelDownloader = new ModelDownloader();\n\n/**\n * Convenience function for downloading Phi-4 model\n */\nexport async function ensurePhi4Model(\n onProgress?: (progress: DownloadProgress) => void\n): Promise<string> {\n return modelDownloader.ensurePhi4Model(onProgress);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-flow",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.3",
|
|
4
4
|
"description": "The agentic meta-harness โ freeze the model, evolve the harness. An open runtime that routes each query to the cost-optimal model, evolves its own harness (planner/context/reviewer/retry/tool/memory/score policy) and autonomously repairs code, then orchestrates 66 specialized agents, 213 MCP tools, ReasoningBank memory, and multi-agent swarms on top. Built by @ruvnet on the Claude Agent SDK.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -104,32 +104,32 @@ export function log(message) {
|
|
|
104
104
|
const len0 = WASM_VECTOR_LEN;
|
|
105
105
|
wasm.log(ptr0, len0);
|
|
106
106
|
}
|
|
107
|
-
export function
|
|
107
|
+
export function __wbg___wbindgen_debug_string_0e68cf47c9cbd9b0(arg0, arg1) {
|
|
108
108
|
const ret = debugString(getObject(arg1));
|
|
109
109
|
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
110
110
|
const len1 = WASM_VECTOR_LEN;
|
|
111
111
|
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
112
112
|
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
113
113
|
}
|
|
114
|
-
export function
|
|
114
|
+
export function __wbg___wbindgen_is_function_fcda5e3902d732fe(arg0) {
|
|
115
115
|
const ret = typeof(getObject(arg0)) === 'function';
|
|
116
116
|
return ret;
|
|
117
117
|
}
|
|
118
|
-
export function
|
|
118
|
+
export function __wbg___wbindgen_is_undefined_8c687d0b90d5b524(arg0) {
|
|
119
119
|
const ret = getObject(arg0) === undefined;
|
|
120
120
|
return ret;
|
|
121
121
|
}
|
|
122
|
-
export function
|
|
122
|
+
export function __wbg___wbindgen_throw_5d9e815e6fdf150f(arg0, arg1) {
|
|
123
123
|
throw new Error(getStringFromWasm0(arg0, arg1));
|
|
124
124
|
}
|
|
125
|
-
export function
|
|
125
|
+
export function __wbg__wbg_cb_unref_997e73d32238e655(arg0) {
|
|
126
126
|
getObject(arg0)._wbg_cb_unref();
|
|
127
127
|
}
|
|
128
|
-
export function
|
|
128
|
+
export function __wbg_call_6bcf8d3e20937e46() { return handleError(function (arg0, arg1, arg2) {
|
|
129
129
|
const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
|
|
130
130
|
return addHeapObject(ret);
|
|
131
131
|
}, arguments); }
|
|
132
|
-
export function
|
|
132
|
+
export function __wbg_error_757e9472f8410341(arg0, arg1) {
|
|
133
133
|
let deferred0_0;
|
|
134
134
|
let deferred0_1;
|
|
135
135
|
try {
|
|
@@ -140,18 +140,18 @@ export function __wbg_error_a6fa202b58aa1cd3(arg0, arg1) {
|
|
|
140
140
|
wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1);
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
|
-
export function
|
|
143
|
+
export function __wbg_getRandomValues_a678b7300e8ed57f() { return handleError(function (arg0, arg1) {
|
|
144
144
|
globalThis.crypto.getRandomValues(getArrayU8FromWasm0(arg0, arg1));
|
|
145
145
|
}, arguments); }
|
|
146
|
-
export function
|
|
146
|
+
export function __wbg_get_989d0a1309644f2b() { return handleError(function (arg0, arg1) {
|
|
147
147
|
const ret = Reflect.get(getObject(arg0), getObject(arg1));
|
|
148
148
|
return addHeapObject(ret);
|
|
149
149
|
}, arguments); }
|
|
150
|
-
export function
|
|
150
|
+
export function __wbg_indexedDB_2d959d90beb14c29() { return handleError(function (arg0) {
|
|
151
151
|
const ret = getObject(arg0).indexedDB;
|
|
152
152
|
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
|
153
153
|
}, arguments); }
|
|
154
|
-
export function
|
|
154
|
+
export function __wbg_instanceof_Window_a3b8566f0a9c5d1a(arg0) {
|
|
155
155
|
let result;
|
|
156
156
|
try {
|
|
157
157
|
result = getObject(arg0) instanceof Window;
|
|
@@ -161,21 +161,21 @@ export function __wbg_instanceof_Window_05ba1ee4f6781663(arg0) {
|
|
|
161
161
|
const ret = result;
|
|
162
162
|
return ret;
|
|
163
163
|
}
|
|
164
|
-
export function
|
|
164
|
+
export function __wbg_log_363d83b9114c8831(arg0) {
|
|
165
165
|
console.log(getObject(arg0));
|
|
166
166
|
}
|
|
167
167
|
export function __wbg_new_227d7c05414eb861() {
|
|
168
168
|
const ret = new Error();
|
|
169
169
|
return addHeapObject(ret);
|
|
170
170
|
}
|
|
171
|
-
export function
|
|
171
|
+
export function __wbg_new_typed_6f8b0d724fe26c07(arg0, arg1) {
|
|
172
172
|
try {
|
|
173
173
|
var state0 = {a: arg0, b: arg1};
|
|
174
174
|
var cb0 = (arg0, arg1) => {
|
|
175
175
|
const a = state0.a;
|
|
176
176
|
state0.a = 0;
|
|
177
177
|
try {
|
|
178
|
-
return
|
|
178
|
+
return __wasm_bindgen_func_elem_355(a, state0.b, arg0, arg1);
|
|
179
179
|
} finally {
|
|
180
180
|
state0.a = a;
|
|
181
181
|
}
|
|
@@ -186,22 +186,22 @@ export function __wbg_new_typed_1824d93f294193e5(arg0, arg1) {
|
|
|
186
186
|
state0.a = 0;
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
|
-
export function
|
|
189
|
+
export function __wbg_open_56eb9bc2b4228b89() { return handleError(function (arg0, arg1, arg2, arg3) {
|
|
190
190
|
const ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2), arg3 >>> 0);
|
|
191
191
|
return addHeapObject(ret);
|
|
192
192
|
}, arguments); }
|
|
193
|
-
export function
|
|
193
|
+
export function __wbg_queueMicrotask_85c90f6987555d65(arg0) {
|
|
194
194
|
const ret = getObject(arg0).queueMicrotask;
|
|
195
195
|
return addHeapObject(ret);
|
|
196
196
|
}
|
|
197
|
-
export function
|
|
197
|
+
export function __wbg_queueMicrotask_f6a1fa10b81d1fc0(arg0) {
|
|
198
198
|
queueMicrotask(getObject(arg0));
|
|
199
199
|
}
|
|
200
200
|
export function __wbg_reasoningbankwasm_new(arg0) {
|
|
201
201
|
const ret = ReasoningBankWasm.__wrap(arg0);
|
|
202
202
|
return addHeapObject(ret);
|
|
203
203
|
}
|
|
204
|
-
export function
|
|
204
|
+
export function __wbg_resolve_35ec7e0c6af4c82c(arg0) {
|
|
205
205
|
const ret = Promise.resolve(getObject(arg0));
|
|
206
206
|
return addHeapObject(ret);
|
|
207
207
|
}
|
|
@@ -212,32 +212,32 @@ export function __wbg_stack_3b0d974bbf31e44f(arg0, arg1) {
|
|
|
212
212
|
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
213
213
|
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
214
214
|
}
|
|
215
|
-
export function
|
|
215
|
+
export function __wbg_static_accessor_GLOBAL_8eb4cd83130a11a0() {
|
|
216
216
|
const ret = typeof global === 'undefined' ? null : global;
|
|
217
217
|
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
|
218
218
|
}
|
|
219
|
-
export function
|
|
219
|
+
export function __wbg_static_accessor_GLOBAL_THIS_1e7044f654e934db() {
|
|
220
220
|
const ret = typeof globalThis === 'undefined' ? null : globalThis;
|
|
221
221
|
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
|
222
222
|
}
|
|
223
|
-
export function
|
|
223
|
+
export function __wbg_static_accessor_SELF_d8b50611246a6d92() {
|
|
224
224
|
const ret = typeof self === 'undefined' ? null : self;
|
|
225
225
|
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
|
226
226
|
}
|
|
227
|
-
export function
|
|
227
|
+
export function __wbg_static_accessor_WINDOW_fd0bc376bf0f8b42() {
|
|
228
228
|
const ret = typeof window === 'undefined' ? null : window;
|
|
229
229
|
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
|
230
230
|
}
|
|
231
|
-
export function
|
|
231
|
+
export function __wbg_then_b830475380919203(arg0, arg1) {
|
|
232
232
|
const ret = getObject(arg0).then(getObject(arg1));
|
|
233
233
|
return addHeapObject(ret);
|
|
234
234
|
}
|
|
235
|
-
export function
|
|
235
|
+
export function __wbindgen_generic_0000000000000001(arg0, arg1) {
|
|
236
236
|
// Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 95, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.
|
|
237
|
-
const ret = makeMutClosure(arg0, arg1,
|
|
237
|
+
const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_342);
|
|
238
238
|
return addHeapObject(ret);
|
|
239
239
|
}
|
|
240
|
-
export function
|
|
240
|
+
export function __wbindgen_generic_0000000000000002(arg0, arg1) {
|
|
241
241
|
// Cast intrinsic for `Ref(String) -> Externref`.
|
|
242
242
|
const ret = getStringFromWasm0(arg0, arg1);
|
|
243
243
|
return addHeapObject(ret);
|
|
@@ -249,10 +249,14 @@ export function __wbindgen_object_clone_ref(arg0) {
|
|
|
249
249
|
export function __wbindgen_object_drop_ref(arg0) {
|
|
250
250
|
takeObject(arg0);
|
|
251
251
|
}
|
|
252
|
-
function
|
|
252
|
+
function __wasm_bindgen_func_elem_355(arg0, arg1, arg2, arg3) {
|
|
253
|
+
wasm.__wasm_bindgen_func_elem_355(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function __wasm_bindgen_func_elem_342(arg0, arg1, arg2) {
|
|
253
257
|
try {
|
|
254
258
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
255
|
-
wasm.
|
|
259
|
+
wasm.__wasm_bindgen_func_elem_342(retptr, arg0, arg1, addHeapObject(arg2));
|
|
256
260
|
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
257
261
|
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
258
262
|
if (r1) {
|
|
@@ -263,10 +267,6 @@ function __wasm_bindgen_func_elem_338(arg0, arg1, arg2) {
|
|
|
263
267
|
}
|
|
264
268
|
}
|
|
265
269
|
|
|
266
|
-
function __wasm_bindgen_func_elem_353(arg0, arg1, arg2, arg3) {
|
|
267
|
-
wasm.__wasm_bindgen_func_elem_353(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
|
|
268
|
-
}
|
|
269
|
-
|
|
270
270
|
const ReasoningBankWasmFinalization = (typeof FinalizationRegistry === 'undefined')
|
|
271
271
|
? { register: () => {}, unregister: () => {} }
|
|
272
272
|
: new FinalizationRegistry(ptr => wasm.__wbg_reasoningbankwasm_free(ptr, 1));
|
|
Binary file
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/* eslint-disable */
|
|
3
3
|
export const memory: WebAssembly.Memory;
|
|
4
4
|
export const __wbg_reasoningbankwasm_free: (a: number, b: number) => void;
|
|
5
|
+
export const init: () => void;
|
|
5
6
|
export const log: (a: number, b: number) => void;
|
|
6
7
|
export const reasoningbankwasm_findSimilar: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
7
8
|
export const reasoningbankwasm_getPattern: (a: number, b: number, c: number) => number;
|
|
@@ -9,9 +10,8 @@ export const reasoningbankwasm_getStats: (a: number) => number;
|
|
|
9
10
|
export const reasoningbankwasm_new: (a: number, b: number) => number;
|
|
10
11
|
export const reasoningbankwasm_searchByCategory: (a: number, b: number, c: number, d: number) => number;
|
|
11
12
|
export const reasoningbankwasm_storePattern: (a: number, b: number, c: number) => number;
|
|
12
|
-
export const
|
|
13
|
-
export const
|
|
14
|
-
export const __wasm_bindgen_func_elem_353: (a: number, b: number, c: number, d: number) => void;
|
|
13
|
+
export const __wasm_bindgen_func_elem_342: (a: number, b: number, c: number, d: number) => void;
|
|
14
|
+
export const __wasm_bindgen_func_elem_355: (a: number, b: number, c: number, d: number) => void;
|
|
15
15
|
export const __wbindgen_export: (a: number, b: number) => number;
|
|
16
16
|
export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
|
|
17
17
|
export const __wbindgen_export3: (a: number) => void;
|