chore: remove Langchain tools import (#3407)

This commit is contained in:
Jyong
2024-04-12 16:26:09 +08:00
committed by GitHub
parent c227f3d985
commit 0737e930cb
9 changed files with 98 additions and 73 deletions

View File

@@ -0,0 +1,25 @@
from __future__ import annotations
from dataclasses import dataclass
from typing import NamedTuple, Union
@dataclass
class ReactAction:
"""A full description of an action for an ReactAction to execute."""
tool: str
"""The name of the Tool to execute."""
tool_input: Union[str, dict]
"""The input to pass in to the Tool."""
log: str
"""Additional information to log about the action."""
class ReactFinish(NamedTuple):
"""The final return value of an ReactFinish."""
return_values: dict
"""Dictionary of return values."""
log: str
"""Additional information to log about the return value"""

View File

@@ -2,28 +2,24 @@ import json
import re
from typing import Union
from langchain.agents.structured_chat.output_parser import StructuredChatOutputParser as LCStructuredChatOutputParser
from langchain.agents.structured_chat.output_parser import logger
from langchain.schema import AgentAction, AgentFinish, OutputParserException
from core.rag.retrieval.output_parser.react_output import ReactAction, ReactFinish
class StructuredChatOutputParser(LCStructuredChatOutputParser):
def parse(self, text: str) -> Union[AgentAction, AgentFinish]:
class StructuredChatOutputParser:
def parse(self, text: str) -> Union[ReactAction, ReactFinish]:
try:
action_match = re.search(r"```(\w*)\n?({.*?)```", text, re.DOTALL)
if action_match is not None:
response = json.loads(action_match.group(2).strip(), strict=False)
if isinstance(response, list):
# gpt turbo frequently ignores the directive to emit a single action
logger.warning("Got multiple action responses: %s", response)
response = response[0]
if response["action"] == "Final Answer":
return AgentFinish({"output": response["action_input"]}, text)
return ReactFinish({"output": response["action_input"]}, text)
else:
return AgentAction(
return ReactAction(
response["action"], response.get("action_input", {}), text
)
else:
return AgentFinish({"output": text}, text)
return ReactFinish({"output": text}, text)
except Exception as e:
raise OutputParserException(f"Could not parse LLM output: {text}")
raise ValueError(f"Could not parse LLM output: {text}")