( toolUseMessages: ToolUseBlock[], assistantMessages: AssistantMessage[], canUseTool: CanUseToolFn, toolUseContext: ToolUseContext, )
| 150 | } |
| 151 | |
| 152 | async function* runToolsConcurrently( |
| 153 | toolUseMessages: ToolUseBlock[], |
| 154 | assistantMessages: AssistantMessage[], |
| 155 | canUseTool: CanUseToolFn, |
| 156 | toolUseContext: ToolUseContext, |
| 157 | ): AsyncGenerator<MessageUpdateLazy, void> { |
| 158 | yield* all( |
| 159 | toolUseMessages.map(async function* (toolUse) { |
| 160 | toolUseContext.setInProgressToolUseIDs(prev => |
| 161 | new Set(prev).add(toolUse.id), |
| 162 | ) |
| 163 | yield* runToolUse( |
| 164 | toolUse, |
| 165 | assistantMessages.find(_ => |
| 166 | _.message.content.some( |
| 167 | _ => _.type === 'tool_use' && _.id === toolUse.id, |
| 168 | ), |
| 169 | )!, |
| 170 | canUseTool, |
| 171 | toolUseContext, |
| 172 | ) |
| 173 | markToolUseAsComplete(toolUseContext, toolUse.id) |
| 174 | }), |
| 175 | getMaxToolUseConcurrency(), |
| 176 | ) |
| 177 | } |
| 178 | |
| 179 | function markToolUseAsComplete( |
| 180 | toolUseContext: ToolUseContext, |
no test coverage detected