Tai Truong
fix readme
d202ada
from langchain_experimental.agents.agent_toolkits.csv.base import create_csv_agent
from langflow.base.agents.agent import LCAgentComponent
from langflow.field_typing import AgentExecutor
from langflow.inputs import DropdownInput, FileInput, HandleInput
from langflow.inputs.inputs import MessageTextInput
from langflow.schema.message import Message
from langflow.template.field.base import Output
class CSVAgentComponent(LCAgentComponent):
display_name = "CSVAgent"
description = "Construct a CSV agent from a CSV and tools."
documentation = "https://python.langchain.com/docs/modules/agents/toolkits/csv"
name = "CSVAgent"
icon = "LangChain"
inputs = [
*LCAgentComponent._base_inputs,
HandleInput(
name="llm",
display_name="Language Model",
input_types=["LanguageModel"],
required=True,
info="An LLM Model Object (It can be found in any LLM Component).",
),
FileInput(
name="path",
display_name="File Path",
file_types=["csv"],
input_types=["str", "Message"],
required=True,
info="A CSV File or File Path.",
),
DropdownInput(
name="agent_type",
display_name="Agent Type",
advanced=True,
options=["zero-shot-react-description", "openai-functions", "openai-tools"],
value="openai-tools",
),
MessageTextInput(
name="input_value",
display_name="Text",
info="Text to be passed as input and extract info from the CSV File.",
),
]
outputs = [
Output(display_name="Response", name="response", method="build_agent_response"),
Output(display_name="Agent", name="agent", method="build_agent"),
]
def _path(self) -> str:
if isinstance(self.path, Message) and isinstance(self.path.text, str):
return self.path.text
return self.path
def build_agent_response(self) -> Message:
agent_kwargs = {
"verbose": self.verbose,
"allow_dangerous_code": True,
}
agent_csv = create_csv_agent(
llm=self.llm,
path=self._path(),
agent_type=self.agent_type,
handle_parsing_errors=self.handle_parsing_errors,
**agent_kwargs,
)
result = agent_csv.invoke({"input": self.input_value})
return Message(text=str(result["output"]))
def build_agent(self) -> AgentExecutor:
agent_kwargs = {
"verbose": self.verbose,
"allow_dangerous_code": True,
}
agent_csv = create_csv_agent(
llm=self.llm,
path=self._path(),
agent_type=self.agent_type,
handle_parsing_errors=self.handle_parsing_errors,
**agent_kwargs,
)
self.status = Message(text=str(agent_csv))
return agent_csv