theekshana's picture
created qa_agent
87b6d59
raw
history blame
1.15 kB
from typing import Union
import re
from langchain.agents import AgentOutputParser
from langchain.schema import AgentAction, AgentFinish
class CustomOutputParser(AgentOutputParser):
"""
This is the output parser for the multi-tool agent. It parses the output from the LLM model.
"""
def parse(self, llm_output: str) -> Union[AgentAction, AgentFinish]:
"""
This function is used to parse the output from the LLM model. It checks if the output is the final answer or an action.
"""
if "Final Answer:" in llm_output:
return AgentFinish(
return_values={"output": llm_output.split("Final Answer:")[-1].strip()},
log=llm_output,
)
regex = r"Action: (.*?)[\n]*Action Input:[\s]*(.*)"
match = re.search(regex, llm_output, re.DOTALL)
if not match:
raise ValueError(f"Could not parse LLM output: `{llm_output}`")
action = match.group(1).strip()
action_input = match.group(2)
return AgentAction(
tool=action, tool_input=action_input.strip(" ").strip('"'), log=llm_output
)