@@ -80,7 +80,10 @@ public function processOutput(Output $output): void
8080
8181 if ($ result instanceof GenericStreamResponse) {
8282 $ output ->setResult (
83- new ToolboxStreamResponse ($ result ->getContent (), $ this ->handleToolCallsCallback ($ output ))
83+ new ToolboxStreamResponse (
84+ $ result ->getContent (),
85+ fn (ToolCallResult $ result , ?AssistantMessage $ streamedAssistantResponse = null ) => $ this ->handleToolCallsCallback ($ output , $ result , $ streamedAssistantResponse )
86+ )
8487 );
8588
8689 return ;
@@ -90,7 +93,7 @@ public function processOutput(Output $output): void
9093 return ;
9194 }
9295
93- $ output ->setResult ($ this ->handleToolCallsCallback ($ output)( $ result ));
96+ $ output ->setResult ($ this ->handleToolCallsCallback ($ output, $ result ));
9497 }
9598
9699 /**
@@ -101,40 +104,38 @@ private function isFlatStringArray(array $tools): bool
101104 return array_reduce ($ tools , fn (bool $ carry , mixed $ item ) => $ carry && \is_string ($ item ), true );
102105 }
103106
104- private function handleToolCallsCallback (Output $ output ): \ Closure
107+ private function handleToolCallsCallback (Output $ output, ToolCallResult $ result , ? AssistantMessage $ streamedAssistantResponse = null ): ResultInterface
105108 {
106- return function (ToolCallResult $ result , ?AssistantMessage $ streamedAssistantResponse = null ) use ($ output ): ResultInterface {
107- ++$ this ->nestingLevel ;
108- $ messages = $ this ->keepToolMessages ? $ output ->getMessageBag () : clone $ output ->getMessageBag ();
109+ ++$ this ->nestingLevel ;
110+ $ messages = $ this ->keepToolMessages ? $ output ->getMessageBag () : clone $ output ->getMessageBag ();
109111
110- if (null !== $ streamedAssistantResponse && '' !== $ streamedAssistantResponse ->getContent ()) {
111- $ messages ->add ($ streamedAssistantResponse );
112- }
112+ if (null !== $ streamedAssistantResponse && '' !== $ streamedAssistantResponse ->getContent ()) {
113+ $ messages ->add ($ streamedAssistantResponse );
114+ }
113115
114- do {
115- $ toolCalls = $ result ->getContent ();
116- $ messages ->add (Message::ofAssistant (toolCalls: $ toolCalls ));
116+ do {
117+ $ toolCalls = $ result ->getContent ();
118+ $ messages ->add (Message::ofAssistant (toolCalls: $ toolCalls ));
117119
118- $ results = [];
119- foreach ($ toolCalls as $ toolCall ) {
120- $ results [] = $ toolResult = $ this ->toolbox ->execute ($ toolCall );
121- $ messages ->add (Message::ofToolCall ($ toolCall , $ this ->resultConverter ->convert ($ toolResult )));
122- array_push ($ this ->sources , ...$ toolResult ->getSources ());
123- }
120+ $ results = [];
121+ foreach ($ toolCalls as $ toolCall ) {
122+ $ results [] = $ toolResult = $ this ->toolbox ->execute ($ toolCall );
123+ $ messages ->add (Message::ofToolCall ($ toolCall , $ this ->resultConverter ->convert ($ toolResult )));
124+ array_push ($ this ->sources , ...$ toolResult ->getSources ());
125+ }
124126
125- $ event = new ToolCallsExecuted (...$ results );
126- $ this ->eventDispatcher ?->dispatch($ event );
127+ $ event = new ToolCallsExecuted (...$ results );
128+ $ this ->eventDispatcher ?->dispatch($ event );
127129
128- $ result = $ event ->hasResult () ? $ event ->getResult () : $ this ->agent ->call ($ messages , $ output ->getOptions ());
129- } while ($ result instanceof ToolCallResult);
130+ $ result = $ event ->hasResult () ? $ event ->getResult () : $ this ->agent ->call ($ messages , $ output ->getOptions ());
131+ } while ($ result instanceof ToolCallResult);
130132
131- --$ this ->nestingLevel ;
132- if ($ this ->includeSources && 0 === $ this ->nestingLevel ) {
133- $ result ->getMetadata ()->add ('sources ' , $ this ->sources );
134- $ this ->sources = [];
135- }
133+ --$ this ->nestingLevel ;
134+ if ($ this ->includeSources && 0 === $ this ->nestingLevel ) {
135+ $ result ->getMetadata ()->add ('sources ' , $ this ->sources );
136+ $ this ->sources = [];
137+ }
136138
137- return $ result ;
138- };
139+ return $ result ;
139140 }
140141}
0 commit comments