| | import json |
| | from typing import List, Sequence, Tuple |
| |
|
| | from langchain_core.agents import AgentAction, AgentActionMessageLog |
| | from langchain_core.messages import AIMessage, BaseMessage, FunctionMessage |
| |
|
| | def _convert_agent_action_to_messages( |
| | agent_action: AgentAction, observation: str |
| | ) -> List[BaseMessage]: |
| | """Convert an agent action to a message. |
| | This code is used to reconstruct the original AI message from the agent action. |
| | Args: |
| | agent_action: Agent action to convert. |
| | Returns: |
| | AIMessage that corresponds to the original tool invocation. |
| | """ |
| |
|
| | if isinstance(agent_action, AgentActionMessageLog): |
| | return list(agent_action.message_log) + [f"<tool_response>\n{_create_function_message(agent_action, observation)}\n</tool_response>"] |
| | else: |
| | return [AIMessage(content=agent_action.log)] |
| |
|
| | def _create_function_message( |
| | agent_action: AgentAction, observation: str |
| | ) -> str: |
| | """Convert agent action and observation into a function message. |
| | Args: |
| | agent_action: the tool invocation request from the agent |
| | observation: the result of the tool invocation |
| | Returns: |
| | FunctionMessage that corresponds to the original tool invocation |
| | """ |
| |
|
| | if not isinstance(observation, str): |
| | try: |
| | content = json.dumps(observation, ensure_ascii=False) |
| | except Exception: |
| | content = str(observation) |
| | else: |
| | content = observation |
| | tool_response = { |
| | "name": agent_action.tool, |
| | "content": content, |
| | } |
| | return json.dumps(tool_response) |
| |
|
| | def format_to_function_messages( |
| | intermediate_steps: Sequence[Tuple[AgentAction, str]], |
| | ) -> List[BaseMessage]: |
| | """Convert (AgentAction, tool output) tuples into FunctionMessages. |
| | Args: |
| | intermediate_steps: Steps the LLM has taken to date, along with observations |
| | Returns: |
| | list of messages to send to the LLM for the next prediction |
| | """ |
| |
|
| | messages = [] |
| | for agent_action, observation in intermediate_steps: |
| | messages.extend(_convert_agent_action_to_messages(agent_action, observation)) |
| | return messages |
| |
|
| | |
| | format_to_functions = format_to_function_messages |
| |
|