Team Ai
Apppublic

Underground-Digital/Workflow-Engine

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
cot_chat_agent_runner.py95 linesDownload Raw Back to agent
1import json2 3from core.agent.cot_agent_runner import CotAgentRunner4from core.file import file_manager5from core.model_runtime.entities import (6    AssistantPromptMessage,7    PromptMessage,8    PromptMessageContent,9    SystemPromptMessage,10    TextPromptMessageContent,11    UserPromptMessage,12)13from core.model_runtime.utils.encoders import jsonable_encoder14 15 16class CotChatAgentRunner(CotAgentRunner):17    def _organize_system_prompt(self) -> SystemPromptMessage:18        """19        Organize system prompt20        """21        prompt_entity = self.app_config.agent.prompt22        first_prompt = prompt_entity.first_prompt23 24        system_prompt = (25            first_prompt.replace("{{instruction}}", self._instruction)26            .replace("{{tools}}", json.dumps(jsonable_encoder(self._prompt_messages_tools)))27            .replace("{{tool_names}}", ", ".join([tool.name for tool in self._prompt_messages_tools]))28        )29 30        return SystemPromptMessage(content=system_prompt)31 32    def _organize_user_query(self, query, prompt_messages: list[PromptMessage]) -> list[PromptMessage]:33        """34        Organize user query35        """36        if self.files:37            prompt_message_contents: list[PromptMessageContent] = []38            prompt_message_contents.append(TextPromptMessageContent(data=query))39            for file_obj in self.files:40                prompt_message_contents.append(file_manager.to_prompt_message_content(file_obj))41 42            prompt_messages.append(UserPromptMessage(content=prompt_message_contents))43        else:44            prompt_messages.append(UserPromptMessage(content=query))45 46        return prompt_messages47 48    def _organize_prompt_messages(self) -> list[PromptMessage]:49        """50        Organize51        """52        # organize system prompt53        system_message = self._organize_system_prompt()54 55        # organize current assistant messages56        agent_scratchpad = self._agent_scratchpad57        if not agent_scratchpad:58            assistant_messages = []59        else:60            assistant_message = AssistantPromptMessage(content="")61            for unit in agent_scratchpad:62                if unit.is_final():63                    assistant_message.content += f"Final Answer: {unit.agent_response}"64                else:65                    assistant_message.content += f"Thought: {unit.thought}\n\n"66                    if unit.action_str:67                        assistant_message.content += f"Action: {unit.action_str}\n\n"68                    if unit.observation:69                        assistant_message.content += f"Observation: {unit.observation}\n\n"70 71            assistant_messages = [assistant_message]72 73        # query messages74        query_messages = self._organize_user_query(self._query, [])75 76        if assistant_messages:77            # organize historic prompt messages78            historic_messages = self._organize_historic_prompt_messages(79                [system_message, *query_messages, *assistant_messages, UserPromptMessage(content="continue")]80            )81            messages = [82                system_message,83                *historic_messages,84                *query_messages,85                *assistant_messages,86                UserPromptMessage(content="continue"),87            ]88        else:89            # organize historic prompt messages90            historic_messages = self._organize_historic_prompt_messages([system_message, *query_messages])91            messages = [system_message, *historic_messages, *query_messages]92 93        # join all messages94        return messages95