From ee69116761e96916ab6b6ebba72ef29ef6dcf459 Mon Sep 17 00:00:00 2001 From: Harrison Chase Date: Sat, 21 Oct 2023 10:26:02 -0700 Subject: [PATCH] move csv agent to langchain experimental (#12113) --- .../agents/agent_toolkits/csv/__init__.py | 1 + .../agents/agent_toolkits/csv/base.py | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 libs/experimental/langchain_experimental/agents/agent_toolkits/csv/__init__.py create mode 100644 libs/experimental/langchain_experimental/agents/agent_toolkits/csv/base.py diff --git a/libs/experimental/langchain_experimental/agents/agent_toolkits/csv/__init__.py b/libs/experimental/langchain_experimental/agents/agent_toolkits/csv/__init__.py new file mode 100644 index 0000000000..3e3a1e069d --- /dev/null +++ b/libs/experimental/langchain_experimental/agents/agent_toolkits/csv/__init__.py @@ -0,0 +1 @@ +"""CSV toolkit.""" diff --git a/libs/experimental/langchain_experimental/agents/agent_toolkits/csv/base.py b/libs/experimental/langchain_experimental/agents/agent_toolkits/csv/base.py new file mode 100644 index 0000000000..36cf453c38 --- /dev/null +++ b/libs/experimental/langchain_experimental/agents/agent_toolkits/csv/base.py @@ -0,0 +1,37 @@ +from io import IOBase +from typing import Any, List, Optional, Union + +from langchain.agents.agent import AgentExecutor +from langchain.schema.language_model import BaseLanguageModel + +from langchain_experimental.agents.agent_toolkits.pandas.base import ( + create_pandas_dataframe_agent, +) + + +def create_csv_agent( + llm: BaseLanguageModel, + path: Union[str, IOBase, List[Union[str, IOBase]]], + pandas_kwargs: Optional[dict] = None, + **kwargs: Any, +) -> AgentExecutor: + """Create csv agent by loading to a dataframe and using pandas agent.""" + try: + import pandas as pd + except ImportError: + raise ImportError( + "pandas package not found, please install with `pip install pandas`" + ) + + _kwargs = pandas_kwargs or {} + if isinstance(path, (str, IOBase)): + df = pd.read_csv(path, **_kwargs) + elif isinstance(path, list): + df = [] + for item in path: + if not isinstance(item, (str, IOBase)): + raise ValueError(f"Expected str or file-like object, got {type(path)}") + df.append(pd.read_csv(item, **_kwargs)) + else: + raise ValueError(f"Expected str, list, or file-like object, got {type(path)}") + return create_pandas_dataframe_agent(llm, df, **kwargs)