mirror of
https://github.com/hwchase17/langchain.git
synced 2025-09-17 07:26:16 +00:00
community[major], core[patch], langchain[patch], experimental[patch]: Create langchain-community (#14463)
Moved the following modules to new package langchain-community in a backwards compatible fashion: ``` mv langchain/langchain/adapters community/langchain_community mv langchain/langchain/callbacks community/langchain_community/callbacks mv langchain/langchain/chat_loaders community/langchain_community mv langchain/langchain/chat_models community/langchain_community mv langchain/langchain/document_loaders community/langchain_community mv langchain/langchain/docstore community/langchain_community mv langchain/langchain/document_transformers community/langchain_community mv langchain/langchain/embeddings community/langchain_community mv langchain/langchain/graphs community/langchain_community mv langchain/langchain/llms community/langchain_community mv langchain/langchain/memory/chat_message_histories community/langchain_community mv langchain/langchain/retrievers community/langchain_community mv langchain/langchain/storage community/langchain_community mv langchain/langchain/tools community/langchain_community mv langchain/langchain/utilities community/langchain_community mv langchain/langchain/vectorstores community/langchain_community mv langchain/langchain/agents/agent_toolkits community/langchain_community mv langchain/langchain/cache.py community/langchain_community mv langchain/langchain/adapters community/langchain_community mv langchain/langchain/callbacks community/langchain_community/callbacks mv langchain/langchain/chat_loaders community/langchain_community mv langchain/langchain/chat_models community/langchain_community mv langchain/langchain/document_loaders community/langchain_community mv langchain/langchain/docstore community/langchain_community mv langchain/langchain/document_transformers community/langchain_community mv langchain/langchain/embeddings community/langchain_community mv langchain/langchain/graphs community/langchain_community mv langchain/langchain/llms community/langchain_community mv langchain/langchain/memory/chat_message_histories community/langchain_community mv langchain/langchain/retrievers community/langchain_community mv langchain/langchain/storage community/langchain_community mv langchain/langchain/tools community/langchain_community mv langchain/langchain/utilities community/langchain_community mv langchain/langchain/vectorstores community/langchain_community mv langchain/langchain/agents/agent_toolkits community/langchain_community mv langchain/langchain/cache.py community/langchain_community ``` Moved the following to core ``` mv langchain/langchain/utils/json_schema.py core/langchain_core/utils mv langchain/langchain/utils/html.py core/langchain_core/utils mv langchain/langchain/utils/strings.py core/langchain_core/utils cat langchain/langchain/utils/env.py >> core/langchain_core/utils/env.py rm langchain/langchain/utils/env.py ``` See .scripts/community_split/script_integrations.sh for all changes
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
"""Shell tool."""
|
||||
|
||||
from langchain_community.tools.shell.tool import ShellTool
|
||||
|
||||
__all__ = ["ShellTool"]
|
89
libs/community/langchain_community/tools/shell/tool.py
Normal file
89
libs/community/langchain_community/tools/shell/tool.py
Normal file
@@ -0,0 +1,89 @@
|
||||
import asyncio
|
||||
import platform
|
||||
import warnings
|
||||
from typing import Any, List, Optional, Type, Union
|
||||
|
||||
from langchain_core.callbacks import (
|
||||
AsyncCallbackManagerForToolRun,
|
||||
CallbackManagerForToolRun,
|
||||
)
|
||||
from langchain_core.pydantic_v1 import BaseModel, Field, root_validator
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
|
||||
class ShellInput(BaseModel):
|
||||
"""Commands for the Bash Shell tool."""
|
||||
|
||||
commands: Union[str, List[str]] = Field(
|
||||
...,
|
||||
description="List of shell commands to run. Deserialized using json.loads",
|
||||
)
|
||||
"""List of shell commands to run."""
|
||||
|
||||
@root_validator
|
||||
def _validate_commands(cls, values: dict) -> dict:
|
||||
"""Validate commands."""
|
||||
# TODO: Add real validators
|
||||
commands = values.get("commands")
|
||||
if not isinstance(commands, list):
|
||||
values["commands"] = [commands]
|
||||
# Warn that the bash tool is not safe
|
||||
warnings.warn(
|
||||
"The shell tool has no safeguards by default. Use at your own risk."
|
||||
)
|
||||
return values
|
||||
|
||||
|
||||
def _get_default_bash_process() -> Any:
|
||||
"""Get default bash process."""
|
||||
try:
|
||||
from langchain_experimental.llm_bash.bash import BashProcess
|
||||
except ImportError:
|
||||
raise ImportError(
|
||||
"BashProcess has been moved to langchain experimental."
|
||||
"To use this tool, install langchain-experimental "
|
||||
"with `pip install langchain-experimental`."
|
||||
)
|
||||
return BashProcess(return_err_output=True)
|
||||
|
||||
|
||||
def _get_platform() -> str:
|
||||
"""Get platform."""
|
||||
system = platform.system()
|
||||
if system == "Darwin":
|
||||
return "MacOS"
|
||||
return system
|
||||
|
||||
|
||||
class ShellTool(BaseTool):
|
||||
"""Tool to run shell commands."""
|
||||
|
||||
process: Any = Field(default_factory=_get_default_bash_process)
|
||||
"""Bash process to run commands."""
|
||||
|
||||
name: str = "terminal"
|
||||
"""Name of tool."""
|
||||
|
||||
description: str = f"Run shell commands on this {_get_platform()} machine."
|
||||
"""Description of tool."""
|
||||
|
||||
args_schema: Type[BaseModel] = ShellInput
|
||||
"""Schema for input arguments."""
|
||||
|
||||
def _run(
|
||||
self,
|
||||
commands: Union[str, List[str]],
|
||||
run_manager: Optional[CallbackManagerForToolRun] = None,
|
||||
) -> str:
|
||||
"""Run commands and return final output."""
|
||||
return self.process.run(commands)
|
||||
|
||||
async def _arun(
|
||||
self,
|
||||
commands: Union[str, List[str]],
|
||||
run_manager: Optional[AsyncCallbackManagerForToolRun] = None,
|
||||
) -> str:
|
||||
"""Run commands asynchronously and return final output."""
|
||||
return await asyncio.get_event_loop().run_in_executor(
|
||||
None, self.process.run, commands
|
||||
)
|
Reference in New Issue
Block a user