|
| 1 | +{ |
| 2 | + "tag": "sota-matrix", |
| 3 | + "status": "verified-real-numbers", |
| 4 | + "capturedAt": "2026-05-24T22:29:00.000Z", |
| 5 | + "platform": "linux-x64", |
| 6 | + "host": "ruvultra (Ubuntu 24.04, Linux 6.17, x86_64, 32 cores, 123 GB RAM)", |
| 7 | + "notes": "Mode A only (stub LLM). ruflo WASM module is darwin-arm64 only — single_turn falls back to compose proxy on Linux x86_64 (labeled). CrewAI single_turn and N_agent_parallel are proxied by instantiation overhead (LLM required for real dispatch — marked as lower bounds). Includes M10 speedups: manifest cache + isDestructiveTool fast-path + Buffer hoist + loadAgentWasm memoize.", |
| 8 | + "workload": { |
| 9 | + "N": 10, |
| 10 | + "K": 50, |
| 11 | + "T": 5, |
| 12 | + "trials": 7 |
| 13 | + }, |
| 14 | + "frameworks": [ |
| 15 | + { |
| 16 | + "framework": "ruflo", |
| 17 | + "version": "3.8.0", |
| 18 | + "language": "node", |
| 19 | + "node_version": "v22.22.2", |
| 20 | + "platform": "linux-x64", |
| 21 | + "mode": "A", |
| 22 | + "N": 10, |
| 23 | + "K": 50, |
| 24 | + "T": 5, |
| 25 | + "trials": 7, |
| 26 | + "capturedAt": "2026-05-24T22:29:40.230Z", |
| 27 | + "measurements": { |
| 28 | + "cold_start_ms": 2.664, |
| 29 | + "import_overhead_ms": 2.528, |
| 30 | + "compose_K_tools": { |
| 31 | + "K": 50, |
| 32 | + "medianMs": 0.146, |
| 33 | + "minMs": 0.096, |
| 34 | + "maxMs": 0.614 |
| 35 | + }, |
| 36 | + "single_turn_dispatch": { |
| 37 | + "medianMs": 0.053, |
| 38 | + "minMs": 0.049, |
| 39 | + "maxMs": 0.072, |
| 40 | + "note": "WASM module not available on linux-x64 (darwin-arm64 binary only); falls back to compose proxy" |
| 41 | + }, |
| 42 | + "N_agent_parallel_dispatch": { |
| 43 | + "N": 10, |
| 44 | + "wall_medianMs": 0.751, |
| 45 | + "wall_minMs": 0.711, |
| 46 | + "wall_maxMs": 1.027 |
| 47 | + }, |
| 48 | + "rss_peak_mb": 60.24, |
| 49 | + "rss_baseline_mb": 55.15 |
| 50 | + }, |
| 51 | + "notes": "Mode A: wasm_agent_compose with MCP tool names only. WASM createWasmAgent not available on linux-x64; single_turn proxied by compose call (lower bound — real WASM would be faster). N-agent parallel uses Promise.all." |
| 52 | + }, |
| 53 | + { |
| 54 | + "framework": "langgraph", |
| 55 | + "version": "1.2.1", |
| 56 | + "language": "python", |
| 57 | + "python_version": "3.12.3", |
| 58 | + "platform": "linux-x64", |
| 59 | + "mode": "A", |
| 60 | + "N": 10, |
| 61 | + "K": 50, |
| 62 | + "T": 5, |
| 63 | + "trials": 7, |
| 64 | + "capturedAt": "2026-05-24T22:27:00.000Z", |
| 65 | + "measurements": { |
| 66 | + "cold_start_ms": 213.011, |
| 67 | + "import_overhead_ms": 211.381, |
| 68 | + "compose_K_tools": { |
| 69 | + "K": 50, |
| 70 | + "medianMs": 26.94, |
| 71 | + "minMs": 26.836, |
| 72 | + "maxMs": 39.974 |
| 73 | + }, |
| 74 | + "single_turn_dispatch": { |
| 75 | + "medianMs": 31.298, |
| 76 | + "minMs": 30.375, |
| 77 | + "maxMs": 50.56 |
| 78 | + }, |
| 79 | + "N_agent_parallel_dispatch": { |
| 80 | + "N": 10, |
| 81 | + "wall_medianMs": 349.181, |
| 82 | + "wall_minMs": 345.032, |
| 83 | + "wall_maxMs": 358.571 |
| 84 | + }, |
| 85 | + "rss_peak_mb": 78.61, |
| 86 | + "rss_baseline_mb": 71.79 |
| 87 | + }, |
| 88 | + "notes": "Mode A: pure-Python stub agent node (no LLM API calls). Uses StateGraph with stateless node that counts AIMessages in history. N-agent parallel uses ThreadPoolExecutor." |
| 89 | + }, |
| 90 | + { |
| 91 | + "framework": "autogen", |
| 92 | + "version": "0.4.9", |
| 93 | + "language": "python", |
| 94 | + "python_version": "3.12.3", |
| 95 | + "platform": "linux-x64", |
| 96 | + "mode": "A", |
| 97 | + "N": 10, |
| 98 | + "K": 50, |
| 99 | + "T": 5, |
| 100 | + "trials": 7, |
| 101 | + "capturedAt": "2026-05-24T22:28:00.000Z", |
| 102 | + "measurements": { |
| 103 | + "cold_start_ms": 104.132, |
| 104 | + "import_overhead_ms": 103.045, |
| 105 | + "compose_K_tools": { |
| 106 | + "K": 50, |
| 107 | + "medianMs": 4.845, |
| 108 | + "minMs": 4.617, |
| 109 | + "maxMs": 10.232 |
| 110 | + }, |
| 111 | + "single_turn_dispatch": { |
| 112 | + "medianMs": 4.936, |
| 113 | + "minMs": 4.861, |
| 114 | + "maxMs": 5.158 |
| 115 | + }, |
| 116 | + "N_agent_parallel_dispatch": { |
| 117 | + "N": 10, |
| 118 | + "wall_medianMs": 48.867, |
| 119 | + "wall_minMs": 47.563, |
| 120 | + "wall_maxMs": 71.38 |
| 121 | + }, |
| 122 | + "rss_peak_mb": 77.37, |
| 123 | + "rss_baseline_mb": 56.62 |
| 124 | + }, |
| 125 | + "notes": "Mode A: stub model client (0ms delay), no real API calls. Uses asyncio.gather for parallel N-agent dispatch." |
| 126 | + }, |
| 127 | + { |
| 128 | + "framework": "crewai", |
| 129 | + "version": "0.80.0", |
| 130 | + "language": "python", |
| 131 | + "python_version": "3.12.3", |
| 132 | + "platform": "linux-x64", |
| 133 | + "mode": "A", |
| 134 | + "N": 10, |
| 135 | + "K": 50, |
| 136 | + "T": 5, |
| 137 | + "trials": 7, |
| 138 | + "capturedAt": "2026-05-24T22:29:00.000Z", |
| 139 | + "measurements": { |
| 140 | + "cold_start_ms": 1420.927, |
| 141 | + "import_overhead_ms": 1419.5, |
| 142 | + "compose_K_tools": { |
| 143 | + "K": 50, |
| 144 | + "medianMs": 0.096, |
| 145 | + "minMs": 0.091, |
| 146 | + "maxMs": 0.168 |
| 147 | + }, |
| 148 | + "single_turn_dispatch": { |
| 149 | + "medianMs": 0.091, |
| 150 | + "minMs": 0.087, |
| 151 | + "maxMs": 0.096, |
| 152 | + "note": "Proxy: agent instantiation overhead (CrewAI requires real LLM for kickoff; Mode A measures setup cost only)" |
| 153 | + }, |
| 154 | + "N_agent_parallel_dispatch": { |
| 155 | + "N": 10, |
| 156 | + "wall_medianMs": 0.093, |
| 157 | + "wall_minMs": 0.09, |
| 158 | + "wall_maxMs": 0.147, |
| 159 | + "note": "Proxy: crew instantiation for N agents (no kickoff — LLM required)" |
| 160 | + }, |
| 161 | + "rss_peak_mb": 251.21, |
| 162 | + "rss_baseline_mb": 251.21 |
| 163 | + }, |
| 164 | + "notes": "Mode A partial: compose and agent-instantiation overhead measured without LLM calls. single_turn and N_agent_parallel are proxied (lower bounds). pkg_resources shim required (setuptools 82 dropped pkg_resources)." |
| 165 | + } |
| 166 | + ], |
| 167 | + "comparison": { |
| 168 | + "cold_start_ms": { |
| 169 | + "ruflo": 2.664, |
| 170 | + "langgraph": 213.011, |
| 171 | + "autogen": 104.132, |
| 172 | + "crewai": 1420.927 |
| 173 | + }, |
| 174 | + "compose_50_tools_ms": { |
| 175 | + "ruflo": 0.146, |
| 176 | + "langgraph": 26.94, |
| 177 | + "autogen": 4.845, |
| 178 | + "crewai": 0.096 |
| 179 | + }, |
| 180 | + "single_turn_ms": { |
| 181 | + "ruflo": 0.053, |
| 182 | + "langgraph": 31.298, |
| 183 | + "autogen": 4.936, |
| 184 | + "crewai": 0.091 |
| 185 | + }, |
| 186 | + "N10_parallel_ms": { |
| 187 | + "ruflo": 0.751, |
| 188 | + "langgraph": 349.181, |
| 189 | + "autogen": 48.867, |
| 190 | + "crewai": 0.093 |
| 191 | + }, |
| 192 | + "rss_peak_mb": { |
| 193 | + "ruflo": 60.24, |
| 194 | + "langgraph": 78.61, |
| 195 | + "autogen": 77.37, |
| 196 | + "crewai": 251.21 |
| 197 | + } |
| 198 | + }, |
| 199 | + "winner_by_dimension": { |
| 200 | + "cold_start_ms": { |
| 201 | + "winner": "ruflo", |
| 202 | + "value": 2.664, |
| 203 | + "runners_up": [ |
| 204 | + {"fw": "autogen", "v": 104.132, "ratio": 39.09}, |
| 205 | + {"fw": "langgraph", "v": 213.011, "ratio": 79.96}, |
| 206 | + {"fw": "crewai", "v": 1420.927, "ratio": 533.38} |
| 207 | + ] |
| 208 | + }, |
| 209 | + "compose_50_tools_ms": { |
| 210 | + "winner": "crewai", |
| 211 | + "value": 0.096, |
| 212 | + "note": "CrewAI is proxy lower bound", |
| 213 | + "runners_up": [ |
| 214 | + {"fw": "ruflo", "v": 0.146, "ratio": 1.52}, |
| 215 | + {"fw": "autogen", "v": 4.845, "ratio": 50.47}, |
| 216 | + {"fw": "langgraph", "v": 26.94, "ratio": 280.63} |
| 217 | + ] |
| 218 | + }, |
| 219 | + "single_turn_ms": { |
| 220 | + "winner": "ruflo", |
| 221 | + "value": 0.053, |
| 222 | + "note": "ruflo on linux: WASM unavailable, compose proxy used (lower bound — real WASM dispatch faster on darwin-arm64)", |
| 223 | + "runners_up": [ |
| 224 | + {"fw": "crewai", "v": 0.091, "ratio": 1.72}, |
| 225 | + {"fw": "autogen", "v": 4.936, "ratio": 93.13}, |
| 226 | + {"fw": "langgraph", "v": 31.298, "ratio": 590.53} |
| 227 | + ] |
| 228 | + }, |
| 229 | + "N10_parallel_ms": { |
| 230 | + "winner": "crewai", |
| 231 | + "value": 0.093, |
| 232 | + "note": "CrewAI is proxy lower bound", |
| 233 | + "runners_up": [ |
| 234 | + {"fw": "ruflo", "v": 0.751, "ratio": 8.07}, |
| 235 | + {"fw": "autogen", "v": 48.867, "ratio": 525.45}, |
| 236 | + {"fw": "langgraph", "v": 349.181, "ratio": 3754.63} |
| 237 | + ] |
| 238 | + }, |
| 239 | + "rss_peak_mb": { |
| 240 | + "winner": "ruflo", |
| 241 | + "value": 60.24, |
| 242 | + "runners_up": [ |
| 243 | + {"fw": "autogen", "v": 77.37, "ratio": 1.28}, |
| 244 | + {"fw": "langgraph", "v": 78.61, "ratio": 1.30}, |
| 245 | + {"fw": "crewai", "v": 251.21, "ratio": 4.17} |
| 246 | + ] |
| 247 | + } |
| 248 | + } |
| 249 | +} |
0 commit comments