| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | 
							- import json
 
- from core.agent.cot_agent_runner import CotAgentRunner
 
- from core.file import file_manager
 
- from core.model_runtime.entities import (
 
-     AssistantPromptMessage,
 
-     PromptMessage,
 
-     PromptMessageContent,
 
-     SystemPromptMessage,
 
-     TextPromptMessageContent,
 
-     UserPromptMessage,
 
- )
 
- from core.model_runtime.utils.encoders import jsonable_encoder
 
- class CotChatAgentRunner(CotAgentRunner):
 
-     def _organize_system_prompt(self) -> SystemPromptMessage:
 
-         """
 
-         Organize system prompt
 
-         """
 
-         prompt_entity = self.app_config.agent.prompt
 
-         first_prompt = prompt_entity.first_prompt
 
-         system_prompt = (
 
-             first_prompt.replace("{{instruction}}", self._instruction)
 
-             .replace("{{tools}}", json.dumps(jsonable_encoder(self._prompt_messages_tools)))
 
-             .replace("{{tool_names}}", ", ".join([tool.name for tool in self._prompt_messages_tools]))
 
-         )
 
-         return SystemPromptMessage(content=system_prompt)
 
-     def _organize_user_query(self, query, prompt_messages: list[PromptMessage]) -> list[PromptMessage]:
 
-         """
 
-         Organize user query
 
-         """
 
-         if self.files:
 
-             prompt_message_contents: list[PromptMessageContent] = []
 
-             prompt_message_contents.append(TextPromptMessageContent(data=query))
 
-             for file_obj in self.files:
 
-                 prompt_message_contents.append(file_manager.to_prompt_message_content(file_obj))
 
-             prompt_messages.append(UserPromptMessage(content=prompt_message_contents))
 
-         else:
 
-             prompt_messages.append(UserPromptMessage(content=query))
 
-         return prompt_messages
 
-     def _organize_prompt_messages(self) -> list[PromptMessage]:
 
-         """
 
-         Organize
 
-         """
 
-         # organize system prompt
 
-         system_message = self._organize_system_prompt()
 
-         # organize current assistant messages
 
-         agent_scratchpad = self._agent_scratchpad
 
-         if not agent_scratchpad:
 
-             assistant_messages = []
 
-         else:
 
-             assistant_message = AssistantPromptMessage(content="")
 
-             for unit in agent_scratchpad:
 
-                 if unit.is_final():
 
-                     assistant_message.content += f"Final Answer: {unit.agent_response}"
 
-                 else:
 
-                     assistant_message.content += f"Thought: {unit.thought}\n\n"
 
-                     if unit.action_str:
 
-                         assistant_message.content += f"Action: {unit.action_str}\n\n"
 
-                     if unit.observation:
 
-                         assistant_message.content += f"Observation: {unit.observation}\n\n"
 
-             assistant_messages = [assistant_message]
 
-         # query messages
 
-         query_messages = self._organize_user_query(self._query, [])
 
-         if assistant_messages:
 
-             # organize historic prompt messages
 
-             historic_messages = self._organize_historic_prompt_messages(
 
-                 [system_message, *query_messages, *assistant_messages, UserPromptMessage(content="continue")]
 
-             )
 
-             messages = [
 
-                 system_message,
 
-                 *historic_messages,
 
-                 *query_messages,
 
-                 *assistant_messages,
 
-                 UserPromptMessage(content="continue"),
 
-             ]
 
-         else:
 
-             # organize historic prompt messages
 
-             historic_messages = self._organize_historic_prompt_messages([system_message, *query_messages])
 
-             messages = [system_message, *historic_messages, *query_messages]
 
-         # join all messages
 
-         return messages
 
 
  |