@@ -78,7 +78,10 @@ public function processOutput(Output $output): void
7878 {
7979 if ($ output ->getResult () instanceof GenericStreamResponse) {
8080 $ output ->setResult (
81- new ToolboxStreamResponse ($ output ->getResult ()->getContent (), $ this ->handleToolCallsCallback ($ output ))
81+ new ToolboxStreamResponse (
82+ $ output ->getResult ()->getContent (),
83+ fn (ToolCallResult $ result , ?AssistantMessage $ streamedAssistantResponse = null ) => $ this ->handleToolCallsCallback ($ output , $ result , $ streamedAssistantResponse )
84+ )
8285 );
8386
8487 return ;
@@ -88,7 +91,7 @@ public function processOutput(Output $output): void
8891 return ;
8992 }
9093
91- $ output ->setResult ($ this ->handleToolCallsCallback ($ output)( $ output ->getResult ()));
94+ $ output ->setResult ($ this ->handleToolCallsCallback ($ output, $ output ->getResult ()));
9295 }
9396
9497 /**
@@ -99,40 +102,39 @@ private function isFlatStringArray(array $tools): bool
99102 return array_reduce ($ tools , fn (bool $ carry , mixed $ item ) => $ carry && \is_string ($ item ), true );
100103 }
101104
102- private function handleToolCallsCallback (Output $ output ): \ Closure
105+ private function handleToolCallsCallback (Output $ output, ToolCallResult $ result , ? AssistantMessage $ streamedAssistantResponse = null ): ResultInterface
103106 {
104- return function (ToolCallResult $ result , ?AssistantMessage $ streamedAssistantResponse = null ) use ($ output ): ResultInterface {
105- ++$ this ->nestingLevel ;
106- $ messages = $ this ->keepToolMessages ? $ output ->getMessageBag () : clone $ output ->getMessageBag ();
107+ ++$ this ->nestingLevel ;
108+ $ messages = $ this ->keepToolMessages ? $ output ->getMessageBag () : clone $ output ->getMessageBag ();
107109
108- if (null !== $ streamedAssistantResponse && '' !== $ streamedAssistantResponse ->getContent ()) {
109- $ messages ->add ($ streamedAssistantResponse );
110- }
110+ if (null !== $ streamedAssistantResponse && '' !== $ streamedAssistantResponse ->getContent ()) {
111+ $ messages ->add ($ streamedAssistantResponse );
112+ }
111113
112- do {
113- $ toolCalls = $ result ->getContent ();
114- $ messages ->add (Message::ofAssistant (toolCalls: $ toolCalls ));
114+ do {
115+ $ toolCalls = $ result ->getContent ();
116+ $ messages ->add (Message::ofAssistant (toolCalls: $ toolCalls ));
115117
116- $ results = [];
117- foreach ($ toolCalls as $ toolCall ) {
118- $ results [] = $ toolResult = $ this ->toolbox ->execute ($ toolCall );
119- $ messages ->add (Message::ofToolCall ($ toolCall , $ this ->resultConverter ->convert ($ toolResult )));
120- array_push ($ this ->sources , ...$ toolResult ->getSources ());
121- }
118+ $ results = [];
119+ foreach ($ toolCalls as $ toolCall ) {
120+ $ results [] = $ toolResult = $ this ->toolbox ->execute ($ toolCall );
121+ // dd($toolResult);
122+ $ messages ->add (Message::ofToolCall ($ toolCall , $ this ->resultConverter ->convert ($ toolResult )));
123+ array_push ($ this ->sources , ...$ toolResult ->getSources ());
124+ }
122125
123- $ event = new ToolCallsExecuted (...$ results );
124- $ this ->eventDispatcher ?->dispatch($ event );
126+ $ event = new ToolCallsExecuted (...$ results );
127+ $ this ->eventDispatcher ?->dispatch($ event );
125128
126- $ result = $ event ->hasResult () ? $ event ->getResult () : $ this ->agent ->call ($ messages , $ output ->getOptions ());
127- } while ($ result instanceof ToolCallResult);
129+ $ result = $ event ->hasResult () ? $ event ->getResult () : $ this ->agent ->call ($ messages , $ output ->getOptions ());
130+ } while ($ result instanceof ToolCallResult);
128131
129- --$ this ->nestingLevel ;
130- if ($ this ->includeSources && 0 === $ this ->nestingLevel ) {
131- $ result ->getMetadata ()->add ('sources ' , $ this ->sources );
132- $ this ->sources = [];
133- }
132+ --$ this ->nestingLevel ;
133+ if ($ this ->includeSources && 0 === $ this ->nestingLevel ) {
134+ $ result ->getMetadata ()->add ('sources ' , $ this ->sources );
135+ $ this ->sources = [];
136+ }
134137
135- return $ result ;
136- };
138+ return $ result ;
137139 }
138140}
0 commit comments