Commit e11d456
feat: implement parallel tool execution (Gap 2) with backward compatibility
Addresses architectural gaps identified in Issue #1392, specifically Gap 2:
LLM Tool Calls Execute Sequentially - No Parallelism for Batched Tool Calls.
Changes:
- Add ToolCallExecutor protocol with sequential/parallel implementations
- Add Agent(parallel_tool_calls=True) flag with backward compatibility (default False)
- Update llm.py get_response() and get_response_stream() to use ToolCallExecutor
- Update Agent.chat() to pass parallel_tool_calls setting to LLM
- Add comprehensive tests demonstrating ~3x latency improvement for parallel execution
Benefits:
- When LLM returns multiple tool calls, they execute concurrently instead of sequentially
- Respects existing per-tool timeout infrastructure
- Thread-safe with bounded workers (default 5)
- Zero regression risk (opt-in feature, default preserves current behavior)
- Result ordering matches input order
Test results show 2.98x speedup for 3 concurrent tool calls vs sequential execution.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>1 parent 0876a25 commit e11d456
5 files changed
Lines changed: 469 additions & 26 deletions
File tree
- src/praisonai-agents
- praisonaiagents
- agent
- llm
- tools
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
545 | 545 | | |
546 | 546 | | |
547 | 547 | | |
| 548 | + | |
548 | 549 | | |
549 | 550 | | |
550 | 551 | | |
| |||
634 | 635 | | |
635 | 636 | | |
636 | 637 | | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
637 | 642 | | |
638 | 643 | | |
639 | 644 | | |
| |||
1440 | 1445 | | |
1441 | 1446 | | |
1442 | 1447 | | |
| 1448 | + | |
| 1449 | + | |
1443 | 1450 | | |
1444 | 1451 | | |
1445 | 1452 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1250 | 1250 | | |
1251 | 1251 | | |
1252 | 1252 | | |
| 1253 | + | |
1253 | 1254 | | |
1254 | 1255 | | |
1255 | 1256 | | |
| |||
2248 | 2249 | | |
2249 | 2250 | | |
2250 | 2251 | | |
2251 | | - | |
| 2252 | + | |
| 2253 | + | |
2252 | 2254 | | |
2253 | 2255 | | |
2254 | 2256 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
| 19 | + | |
18 | 20 | | |
19 | 21 | | |
20 | 22 | | |
| |||
1649 | 1651 | | |
1650 | 1652 | | |
1651 | 1653 | | |
| 1654 | + | |
1652 | 1655 | | |
1653 | 1656 | | |
1654 | 1657 | | |
| |||
1893 | 1896 | | |
1894 | 1897 | | |
1895 | 1898 | | |
1896 | | - | |
| 1899 | + | |
| 1900 | + | |
| 1901 | + | |
| 1902 | + | |
| 1903 | + | |
1897 | 1904 | | |
1898 | 1905 | | |
1899 | | - | |
1900 | | - | |
1901 | | - | |
| 1906 | + | |
| 1907 | + | |
| 1908 | + | |
| 1909 | + | |
| 1910 | + | |
| 1911 | + | |
| 1912 | + | |
| 1913 | + | |
| 1914 | + | |
| 1915 | + | |
| 1916 | + | |
| 1917 | + | |
| 1918 | + | |
| 1919 | + | |
| 1920 | + | |
| 1921 | + | |
1902 | 1922 | | |
1903 | 1923 | | |
1904 | 1924 | | |
| 1925 | + | |
| 1926 | + | |
1905 | 1927 | | |
1906 | | - | |
| 1928 | + | |
1907 | 1929 | | |
1908 | 1930 | | |
1909 | 1931 | | |
1910 | 1932 | | |
1911 | 1933 | | |
1912 | 1934 | | |
1913 | | - | |
1914 | | - | |
1915 | | - | |
| 1935 | + | |
| 1936 | + | |
| 1937 | + | |
1916 | 1938 | | |
1917 | 1939 | | |
1918 | 1940 | | |
| |||
3142 | 3164 | | |
3143 | 3165 | | |
3144 | 3166 | | |
| 3167 | + | |
3145 | 3168 | | |
3146 | 3169 | | |
3147 | 3170 | | |
| |||
3167 | 3190 | | |
3168 | 3191 | | |
3169 | 3192 | | |
| 3193 | + | |
3170 | 3194 | | |
3171 | 3195 | | |
3172 | 3196 | | |
| |||
3301 | 3325 | | |
3302 | 3326 | | |
3303 | 3327 | | |
3304 | | - | |
| 3328 | + | |
| 3329 | + | |
| 3330 | + | |
| 3331 | + | |
| 3332 | + | |
3305 | 3333 | | |
3306 | | - | |
3307 | 3334 | | |
3308 | | - | |
3309 | | - | |
3310 | | - | |
3311 | | - | |
3312 | | - | |
3313 | | - | |
3314 | | - | |
3315 | | - | |
3316 | | - | |
3317 | | - | |
3318 | | - | |
3319 | | - | |
3320 | | - | |
3321 | | - | |
| 3335 | + | |
| 3336 | + | |
| 3337 | + | |
| 3338 | + | |
| 3339 | + | |
| 3340 | + | |
| 3341 | + | |
| 3342 | + | |
| 3343 | + | |
| 3344 | + | |
| 3345 | + | |
| 3346 | + | |
| 3347 | + | |
| 3348 | + | |
| 3349 | + | |
| 3350 | + | |
| 3351 | + | |
| 3352 | + | |
| 3353 | + | |
| 3354 | + | |
| 3355 | + | |
| 3356 | + | |
| 3357 | + | |
| 3358 | + | |
| 3359 | + | |
| 3360 | + | |
| 3361 | + | |
| 3362 | + | |
| 3363 | + | |
3322 | 3364 | | |
3323 | | - | |
| 3365 | + | |
3324 | 3366 | | |
3325 | 3367 | | |
3326 | 3368 | | |
| |||
Lines changed: 195 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
0 commit comments