Skip to content

Commit cadfce2

Browse files
eyurtsevbaskaryan
andauthored
Deprecate PythonRepl tools and Pandas/Xorbits/Spark DataFrame/Python/CSV agents (#12427)
See discussion here: https://github.com/langchain-ai/langchain/discussions/11680 The code is available for usage from langchain_experimental. The reason for the deprecation is that the agents are relying on a Python REPL. The code can only be run safely with appropriate sandboxing. --------- Co-authored-by: Bagatur <baskaryan@gmail.com>
1 parent 68e12d3 commit cadfce2

File tree

31 files changed

+267
-1400
lines changed

31 files changed

+267
-1400
lines changed

libs/langchain/langchain/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,6 @@ def __getattr__(name: str) -> Any:
370370

371371
__all__ = [
372372
"LLMChain",
373-
"LLMBashChain",
374373
"LLMCheckerChain",
375374
"LLMMathChain",
376375
"ArxivAPIWrapper",
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import os
2+
from pathlib import Path
3+
from typing import Optional, Union
4+
5+
HERE = Path(__file__).parent
6+
7+
# Get directory of langchain package
8+
PACKAGE_DIR = HERE.parent
9+
SEPARATOR = os.sep
10+
11+
12+
def get_relative_path(
13+
file: Union[Path, str], *, relative_to: Path = PACKAGE_DIR
14+
) -> str:
15+
"""Get the path of the file as a relative path to the package directory."""
16+
if isinstance(file, str):
17+
file = Path(file)
18+
return str(file.relative_to(relative_to))
19+
20+
21+
def as_import_path(
22+
file: Union[Path, str],
23+
*,
24+
suffix: Optional[str] = None,
25+
relative_to: Path = PACKAGE_DIR
26+
) -> str:
27+
"""Path of the file as a LangChain import exclude langchain top namespace."""
28+
if isinstance(file, str):
29+
file = Path(file)
30+
path = get_relative_path(file, relative_to=relative_to)
31+
if file.is_file():
32+
path = path[: -len(file.suffix)]
33+
import_path = path.replace(SEPARATOR, ".")
34+
if suffix:
35+
import_path += "." + suffix
36+
return import_path

libs/langchain/langchain/agents/__init__.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@
2828
AgentAction, AgentFinish
2929
3030
""" # noqa: E501
31+
from pathlib import Path
32+
from typing import Any
33+
34+
from langchain._api.path import as_import_path
3135
from langchain.agents.agent import (
3236
Agent,
3337
AgentExecutor,
@@ -38,18 +42,14 @@
3842
)
3943
from langchain.agents.agent_iterator import AgentExecutorIterator
4044
from langchain.agents.agent_toolkits import (
41-
create_csv_agent,
4245
create_json_agent,
4346
create_openapi_agent,
44-
create_pandas_dataframe_agent,
4547
create_pbi_agent,
4648
create_pbi_chat_agent,
47-
create_spark_dataframe_agent,
4849
create_spark_sql_agent,
4950
create_sql_agent,
5051
create_vectorstore_agent,
5152
create_vectorstore_router_agent,
52-
create_xorbits_agent,
5353
)
5454
from langchain.agents.agent_types import AgentType
5555
from langchain.agents.conversational.base import ConversationalAgent
@@ -70,6 +70,29 @@
7070
from langchain.agents.tools import Tool, tool
7171
from langchain.agents.xml.base import XMLAgent
7272

73+
DEPRECATED_CODE = [
74+
"create_csv_agent",
75+
"create_pandas_dataframe_agent",
76+
"create_spark_dataframe_agent",
77+
"create_xorbits_agent",
78+
]
79+
80+
81+
def __getattr__(name: str) -> Any:
82+
"""Get attr name."""
83+
if name in DEPRECATED_CODE:
84+
relative_path = as_import_path(Path(__file__).parent, suffix=name)
85+
old_path = "langchain." + relative_path
86+
new_path = "langchain_experimental." + relative_path
87+
raise ImportError(
88+
f"{name} has been moved to langchain experimental. "
89+
"See https://github.com/langchain-ai/langchain/discussions/11680"
90+
"for more information.\n"
91+
f"Please update your import statement from: `{old_path}` to `{new_path}`."
92+
)
93+
raise ImportError(f"{name} does not exist")
94+
95+
7396
__all__ = [
7497
"Agent",
7598
"AgentExecutor",
@@ -90,13 +113,10 @@
90113
"StructuredChatAgent",
91114
"Tool",
92115
"ZeroShotAgent",
93-
"create_csv_agent",
94116
"create_json_agent",
95117
"create_openapi_agent",
96-
"create_pandas_dataframe_agent",
97118
"create_pbi_agent",
98119
"create_pbi_chat_agent",
99-
"create_spark_dataframe_agent",
100120
"create_spark_sql_agent",
101121
"create_sql_agent",
102122
"create_vectorstore_agent",
@@ -107,6 +127,5 @@
107127
"load_huggingface_tool",
108128
"load_tools",
109129
"tool",
110-
"create_xorbits_agent",
111130
"XMLAgent",
112131
]

libs/langchain/langchain/agents/agent_toolkits/__init__.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
1414
See [Security](https://python.langchain.com/docs/security) for more information.
1515
"""
16+
from pathlib import Path
17+
from typing import Any
18+
19+
from langchain._api.path import as_import_path
1620
from langchain.agents.agent_toolkits.ainetwork.toolkit import AINetworkToolkit
1721
from langchain.agents.agent_toolkits.amadeus.toolkit import AmadeusToolkit
1822
from langchain.agents.agent_toolkits.azure_cognitive_services import (
@@ -21,7 +25,6 @@
2125
from langchain.agents.agent_toolkits.conversational_retrieval.openai_functions import (
2226
create_conversational_retrieval_agent,
2327
)
24-
from langchain.agents.agent_toolkits.csv.base import create_csv_agent
2528
from langchain.agents.agent_toolkits.file_management.toolkit import (
2629
FileManagementToolkit,
2730
)
@@ -34,13 +37,10 @@
3437
from langchain.agents.agent_toolkits.office365.toolkit import O365Toolkit
3538
from langchain.agents.agent_toolkits.openapi.base import create_openapi_agent
3639
from langchain.agents.agent_toolkits.openapi.toolkit import OpenAPIToolkit
37-
from langchain.agents.agent_toolkits.pandas.base import create_pandas_dataframe_agent
3840
from langchain.agents.agent_toolkits.playwright.toolkit import PlayWrightBrowserToolkit
3941
from langchain.agents.agent_toolkits.powerbi.base import create_pbi_agent
4042
from langchain.agents.agent_toolkits.powerbi.chat_base import create_pbi_chat_agent
4143
from langchain.agents.agent_toolkits.powerbi.toolkit import PowerBIToolkit
42-
from langchain.agents.agent_toolkits.python.base import create_python_agent
43-
from langchain.agents.agent_toolkits.spark.base import create_spark_dataframe_agent
4444
from langchain.agents.agent_toolkits.spark_sql.base import create_spark_sql_agent
4545
from langchain.agents.agent_toolkits.spark_sql.toolkit import SparkSQLToolkit
4646
from langchain.agents.agent_toolkits.sql.base import create_sql_agent
@@ -54,10 +54,33 @@
5454
VectorStoreRouterToolkit,
5555
VectorStoreToolkit,
5656
)
57-
from langchain.agents.agent_toolkits.xorbits.base import create_xorbits_agent
5857
from langchain.agents.agent_toolkits.zapier.toolkit import ZapierToolkit
5958
from langchain.tools.retriever import create_retriever_tool
6059

60+
DEPRECATED_AGENTS = [
61+
"create_csv_agent",
62+
"create_pandas_dataframe_agent",
63+
"create_xorbits_agent",
64+
"create_python_agent",
65+
"create_spark_dataframe_agent",
66+
]
67+
68+
69+
def __getattr__(name: str) -> Any:
70+
"""Get attr name."""
71+
if name in DEPRECATED_AGENTS:
72+
relative_path = as_import_path(Path(__file__).parent, suffix=name)
73+
old_path = "langchain." + relative_path
74+
new_path = "langchain_experimental." + relative_path
75+
raise ImportError(
76+
f"{name} has been moved to langchain experimental. "
77+
"See https://github.com/langchain-ai/langchain/discussions/11680"
78+
"for more information.\n"
79+
f"Please update your import statement from: `{old_path}` to `{new_path}`."
80+
)
81+
raise ImportError(f"{name} does not exist")
82+
83+
6184
__all__ = [
6285
"AINetworkToolkit",
6386
"AmadeusToolkit",
@@ -78,19 +101,14 @@
78101
"VectorStoreRouterToolkit",
79102
"VectorStoreToolkit",
80103
"ZapierToolkit",
81-
"create_csv_agent",
82104
"create_json_agent",
83105
"create_openapi_agent",
84-
"create_pandas_dataframe_agent",
85106
"create_pbi_agent",
86107
"create_pbi_chat_agent",
87-
"create_python_agent",
88-
"create_spark_dataframe_agent",
89108
"create_spark_sql_agent",
90109
"create_sql_agent",
91110
"create_vectorstore_agent",
92111
"create_vectorstore_router_agent",
93-
"create_xorbits_agent",
94112
"create_conversational_retrieval_agent",
95113
"create_retriever_tool",
96114
]
Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,22 @@
1-
"""CSV toolkit."""
1+
from pathlib import Path
2+
from typing import Any
3+
4+
from langchain._api.path import as_import_path
5+
6+
7+
def __getattr__(name: str) -> Any:
8+
"""Get attr name."""
9+
10+
here = as_import_path(Path(__file__).parent)
11+
12+
old_path = "langchain." + here + "." + name
13+
new_path = "langchain_experimental." + here + "." + name
14+
raise ImportError(
15+
"This agent has been moved to langchain experiment. "
16+
"This agent relies on python REPL tool under the hood, so to use it "
17+
"safely please sandbox the python REPL. "
18+
"Read https://github.com/langchain-ai/langchain/blob/master/SECURITY.md "
19+
"and https://github.com/langchain-ai/langchain/discussions/11680"
20+
"To keep using this code as is, install langchain experimental and "
21+
f"update your import statement from:\n `{old_path}` to `{new_path}`."
22+
)

libs/langchain/langchain/agents/agent_toolkits/csv/base.py

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,22 @@
1-
"""Pandas toolkit."""
1+
from pathlib import Path
2+
from typing import Any
3+
4+
from langchain._api.path import as_import_path
5+
6+
7+
def __getattr__(name: str) -> Any:
8+
"""Get attr name."""
9+
10+
here = as_import_path(Path(__file__).parent)
11+
12+
old_path = "langchain." + here + "." + name
13+
new_path = "langchain_experimental." + here + "." + name
14+
raise ImportError(
15+
"This agent has been moved to langchain experiment. "
16+
"This agent relies on python REPL tool under the hood, so to use it "
17+
"safely please sandbox the python REPL. "
18+
"Read https://github.com/langchain-ai/langchain/blob/master/SECURITY.md "
19+
"and https://github.com/langchain-ai/langchain/discussions/11680"
20+
"To keep using this code as is, install langchain experimental and "
21+
f"update your import statement from:\n `{old_path}` to `{new_path}`."
22+
)

0 commit comments

Comments
 (0)