| 
					
				 | 
			
			
				@@ -28,6 +28,9 @@ from models.model import Conversation, Message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class AssistantCotApplicationRunner(BaseAssistantApplicationRunner): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    _is_first_iteration = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    _ignore_observation_providers = ['wenxin'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def run(self, conversation: Conversation, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         message: Message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         query: str, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -42,10 +45,8 @@ class AssistantCotApplicationRunner(BaseAssistantApplicationRunner): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         agent_scratchpad: list[AgentScratchpadUnit] = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self._init_agent_scratchpad(agent_scratchpad, self.history_prompt_messages) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # check model mode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if self.app_orchestration_config.model_config.mode == "completion": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            # TODO: stop words 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if 'Observation' not in app_orchestration_config.model_config.stop: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if 'Observation' not in app_orchestration_config.model_config.stop: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if app_orchestration_config.model_config.provider not in self._ignore_observation_providers: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 app_orchestration_config.model_config.stop.append('Observation') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # override inputs 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -202,6 +203,7 @@ class AssistantCotApplicationRunner(BaseAssistantApplicationRunner): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            scratchpad.thought = scratchpad.thought.strip() or 'I am thinking about how to help you' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             agent_scratchpad.append(scratchpad) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             # get llm usage 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -255,9 +257,15 @@ class AssistantCotApplicationRunner(BaseAssistantApplicationRunner): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         # invoke tool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         error_response = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if isinstance(tool_call_args, str): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    tool_call_args = json.loads(tool_call_args) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                except json.JSONDecodeError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             tool_response = tool_instance.invoke( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 user_id=self.user_id,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                tool_parameters=tool_call_args if isinstance(tool_call_args, dict) else json.loads(tool_call_args) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                tool_parameters=tool_call_args 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             # transform tool response to llm friendly response 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             tool_response = self.transform_tool_invoke_messages(tool_response) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -466,7 +474,7 @@ class AssistantCotApplicationRunner(BaseAssistantApplicationRunner): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if isinstance(message, AssistantPromptMessage): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 current_scratchpad = AgentScratchpadUnit( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     agent_response=message.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    thought=message.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    thought=message.content or 'I am thinking about how to help you', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     action_str='', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     action=None, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     observation=None, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -546,7 +554,8 @@ class AssistantCotApplicationRunner(BaseAssistantApplicationRunner): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         result = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for scratchpad in agent_scratchpad: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            result += scratchpad.thought + next_iteration.replace("{{observation}}", scratchpad.observation or '') + "\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result += (scratchpad.thought or '') + (scratchpad.action_str or '') + \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                next_iteration.replace("{{observation}}", scratchpad.observation or 'It seems that no response is available') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -621,21 +630,24 @@ class AssistantCotApplicationRunner(BaseAssistantApplicationRunner): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 )) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             # add assistant message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if len(agent_scratchpad) > 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if len(agent_scratchpad) > 0 and not self._is_first_iteration: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 prompt_messages.append(AssistantPromptMessage( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    content=(agent_scratchpad[-1].thought or '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    content=(agent_scratchpad[-1].thought or '') + (agent_scratchpad[-1].action_str or ''), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 )) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             # add user message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if len(agent_scratchpad) > 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if len(agent_scratchpad) > 0 and not self._is_first_iteration: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 prompt_messages.append(UserPromptMessage( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    content=(agent_scratchpad[-1].observation or ''), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    content=(agent_scratchpad[-1].observation or 'It seems that no response is available'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 )) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self._is_first_iteration = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return prompt_messages 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         elif mode == "completion": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             # parse agent scratchpad 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             agent_scratchpad_str = self._convert_scratchpad_list_to_str(agent_scratchpad) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self._is_first_iteration = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             # parse prompt messages 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return [UserPromptMessage( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 content=first_prompt.replace("{{instruction}}", instruction) 
			 |