Spaces:
Runtime error
Runtime error
| from typing import Any, List, Tuple, Union | |
| from langchain_core.agents import AgentAction, AgentFinish | |
| from langchain_core.prompts.chat import AIMessagePromptTemplate, ChatPromptTemplate | |
| from langchain.agents.agent import BaseSingleActionAgent | |
| from langchain.agents.output_parsers.xml import XMLAgentOutputParser | |
| from langchain.agents.xml.prompt import agent_instructions | |
| from langchain.callbacks.base import Callbacks | |
| from langchain.chains.llm import LLMChain | |
| from langchain.tools.base import BaseTool | |
| class XMLAgent(BaseSingleActionAgent): | |
| """Agent that uses XML tags. | |
| Args: | |
| tools: list of tools the agent can choose from | |
| llm_chain: The LLMChain to call to predict the next action | |
| Examples: | |
| .. code-block:: python | |
| from langchain.agents import XMLAgent | |
| from langchain | |
| tools = ... | |
| model = | |
| """ | |
| tools: List[BaseTool] | |
| """List of tools this agent has access to.""" | |
| llm_chain: LLMChain | |
| """Chain to use to predict action.""" | |
| def input_keys(self) -> List[str]: | |
| return ["input"] | |
| def get_default_prompt() -> ChatPromptTemplate: | |
| return ChatPromptTemplate.from_template( | |
| agent_instructions | |
| ) + AIMessagePromptTemplate.from_template("{intermediate_steps}") | |
| def get_default_output_parser() -> XMLAgentOutputParser: | |
| return XMLAgentOutputParser() | |
| def plan( | |
| self, | |
| intermediate_steps: List[Tuple[AgentAction, str]], | |
| callbacks: Callbacks = None, | |
| **kwargs: Any, | |
| ) -> Union[AgentAction, AgentFinish]: | |
| log = "" | |
| for action, observation in intermediate_steps: | |
| log += ( | |
| f"<tool>{action.tool}</tool><tool_input>{action.tool_input}" | |
| f"</tool_input><observation>{observation}</observation>" | |
| ) | |
| tools = "" | |
| for tool in self.tools: | |
| tools += f"{tool.name}: {tool.description}\n" | |
| inputs = { | |
| "intermediate_steps": log, | |
| "tools": tools, | |
| "question": kwargs["input"], | |
| "stop": ["</tool_input>", "</final_answer>"], | |
| } | |
| response = self.llm_chain(inputs, callbacks=callbacks) | |
| return response[self.llm_chain.output_key] | |
| async def aplan( | |
| self, | |
| intermediate_steps: List[Tuple[AgentAction, str]], | |
| callbacks: Callbacks = None, | |
| **kwargs: Any, | |
| ) -> Union[AgentAction, AgentFinish]: | |
| log = "" | |
| for action, observation in intermediate_steps: | |
| log += ( | |
| f"<tool>{action.tool}</tool><tool_input>{action.tool_input}" | |
| f"</tool_input><observation>{observation}</observation>" | |
| ) | |
| tools = "" | |
| for tool in self.tools: | |
| tools += f"{tool.name}: {tool.description}\n" | |
| inputs = { | |
| "intermediate_steps": log, | |
| "tools": tools, | |
| "question": kwargs["input"], | |
| "stop": ["</tool_input>", "</final_answer>"], | |
| } | |
| response = await self.llm_chain.acall(inputs, callbacks=callbacks) | |
| return response[self.llm_chain.output_key] | |