feat: implement requests wrapper
This commit is contained in:
parent
8cf139c116
commit
fdb058978e
9 changed files with 48 additions and 3 deletions
|
|
@ -6,6 +6,7 @@ chains:
|
||||||
|
|
||||||
agents:
|
agents:
|
||||||
- ZeroShotAgent
|
- ZeroShotAgent
|
||||||
|
- JsonAgent
|
||||||
|
|
||||||
prompts:
|
prompts:
|
||||||
- PromptTemplate
|
- PromptTemplate
|
||||||
|
|
@ -24,4 +25,7 @@ tools:
|
||||||
- PythonFunction
|
- PythonFunction
|
||||||
- JsonSpec
|
- JsonSpec
|
||||||
|
|
||||||
|
wrappers:
|
||||||
|
- RequestsWrapper
|
||||||
|
|
||||||
dev: false
|
dev: false
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
from langchain.agents import loading
|
from langchain.agents import loading
|
||||||
|
from langflow.custom.customs import get_custom_nodes
|
||||||
from langflow.interface.base import LangChainTypeCreator
|
from langflow.interface.base import LangChainTypeCreator
|
||||||
from langflow.utils.util import build_template_from_class
|
from langflow.utils.util import build_template_from_class
|
||||||
from langflow.settings import settings
|
from langflow.settings import settings
|
||||||
from typing import Dict, List
|
from typing import Dict, List
|
||||||
|
from langflow.interface.agents.custom import JsonAgent
|
||||||
|
|
||||||
|
|
||||||
class AgentCreator(LangChainTypeCreator):
|
class AgentCreator(LangChainTypeCreator):
|
||||||
|
|
@ -12,10 +14,14 @@ class AgentCreator(LangChainTypeCreator):
|
||||||
def type_to_loader_dict(self) -> Dict:
|
def type_to_loader_dict(self) -> Dict:
|
||||||
if self.type_dict is None:
|
if self.type_dict is None:
|
||||||
self.type_dict = loading.AGENT_TO_CLASS
|
self.type_dict = loading.AGENT_TO_CLASS
|
||||||
|
# Add JsonAgent to the list of agents
|
||||||
|
self.type_dict["JsonAgent"] = JsonAgent
|
||||||
return self.type_dict
|
return self.type_dict
|
||||||
|
|
||||||
def get_signature(self, name: str) -> Dict | None:
|
def get_signature(self, name: str) -> Dict | None:
|
||||||
try:
|
try:
|
||||||
|
if name in get_custom_nodes(self.type_name).keys():
|
||||||
|
return get_custom_nodes(self.type_name)[name]
|
||||||
return build_template_from_class(
|
return build_template_from_class(
|
||||||
name, self.type_to_loader_dict, add_function=True
|
name, self.type_to_loader_dict, add_function=True
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@ class PromptCreator(LangChainTypeCreator):
|
||||||
|
|
||||||
def get_signature(self, name: str) -> Dict | None:
|
def get_signature(self, name: str) -> Dict | None:
|
||||||
try:
|
try:
|
||||||
if name in get_custom_nodes("prompts").keys():
|
if name in get_custom_nodes(self.type_name).keys():
|
||||||
return get_custom_nodes("prompts")[name]
|
return get_custom_nodes(self.type_name)[name]
|
||||||
return build_template_from_function(name, self.type_to_loader_dict)
|
return build_template_from_function(name, self.type_to_loader_dict)
|
||||||
except ValueError as exc:
|
except ValueError as exc:
|
||||||
raise ValueError("Prompt not found") from exc
|
raise ValueError("Prompt not found") from exc
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ from langflow.interface.prompts.base import prompt_creator
|
||||||
from langflow.interface.chains.base import chain_creator
|
from langflow.interface.chains.base import chain_creator
|
||||||
from langflow.interface.toolkits.base import toolkits_creator
|
from langflow.interface.toolkits.base import toolkits_creator
|
||||||
from langflow.interface.tools.base import tool_creator
|
from langflow.interface.tools.base import tool_creator
|
||||||
|
from langflow.interface.wrappers.base import wrapper_creator
|
||||||
|
|
||||||
|
|
||||||
def get_type_list():
|
def get_type_list():
|
||||||
|
|
@ -32,6 +33,7 @@ def build_langchain_types_dict():
|
||||||
memory_creator,
|
memory_creator,
|
||||||
tool_creator,
|
tool_creator,
|
||||||
toolkits_creator,
|
toolkits_creator,
|
||||||
|
wrapper_creator,
|
||||||
]
|
]
|
||||||
|
|
||||||
all_types = {}
|
all_types = {}
|
||||||
|
|
|
||||||
0
src/backend/langflow/interface/wrappers/__init__.py
Normal file
0
src/backend/langflow/interface/wrappers/__init__.py
Normal file
30
src/backend/langflow/interface/wrappers/base.py
Normal file
30
src/backend/langflow/interface/wrappers/base.py
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
from langchain import requests
|
||||||
|
from langflow.interface.base import LangChainTypeCreator
|
||||||
|
from langflow.utils.util import build_template_from_class
|
||||||
|
from langflow.settings import settings
|
||||||
|
from langflow.custom.customs import get_custom_nodes
|
||||||
|
from typing import Dict, List
|
||||||
|
|
||||||
|
|
||||||
|
class WrapperCreator(LangChainTypeCreator):
|
||||||
|
type_name: str = "wrappers"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def type_to_loader_dict(self) -> Dict:
|
||||||
|
if self.type_dict is None:
|
||||||
|
self.type_dict = {
|
||||||
|
wrapper.__name__: wrapper for wrapper in [requests.RequestsWrapper]
|
||||||
|
}
|
||||||
|
return self.type_dict
|
||||||
|
|
||||||
|
def get_signature(self, name: str) -> Dict | None:
|
||||||
|
try:
|
||||||
|
return build_template_from_class(name, self.type_to_loader_dict)
|
||||||
|
except ValueError as exc:
|
||||||
|
raise ValueError("Wrapper not found") from exc
|
||||||
|
|
||||||
|
def to_list(self) -> List[str]:
|
||||||
|
return list(self.type_to_loader_dict.keys())
|
||||||
|
|
||||||
|
|
||||||
|
wrapper_creator = WrapperCreator()
|
||||||
|
|
@ -12,6 +12,7 @@ class Settings(BaseSettings):
|
||||||
llms: List[str] = []
|
llms: List[str] = []
|
||||||
tools: List[str] = []
|
tools: List[str] = []
|
||||||
memories: List[str] = []
|
memories: List[str] = []
|
||||||
|
wrappers: List[str] = []
|
||||||
dev: bool = False
|
dev: bool = False
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
|
|
@ -33,6 +34,7 @@ class Settings(BaseSettings):
|
||||||
self.llms = new_settings.llms or []
|
self.llms = new_settings.llms or []
|
||||||
self.tools = new_settings.tools or []
|
self.tools = new_settings.tools or []
|
||||||
self.memories = new_settings.memories or []
|
self.memories = new_settings.memories or []
|
||||||
|
self.wrappers = new_settings.wrappers or []
|
||||||
self.dev = new_settings.dev or False
|
self.dev = new_settings.dev or False
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ class JsonAgentNode(FrontendNode):
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
description: str = """Construct a json agent from an LLM and tools."""
|
description: str = """Construct a json agent from an LLM and tools."""
|
||||||
base_classes: list[str] = ["BaseAgent"]
|
base_classes: list[str] = ["AgentExecutor"]
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
return super().to_dict()
|
return super().to_dict()
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ class Field(BaseModel):
|
||||||
suffixes: list[str] = []
|
suffixes: list[str] = []
|
||||||
file_types: list[str] = []
|
file_types: list[str] = []
|
||||||
content: Union[str, None] = None
|
content: Union[str, None] = None
|
||||||
|
password: bool = False
|
||||||
# _name will be used to store the name of the field
|
# _name will be used to store the name of the field
|
||||||
# in the template
|
# in the template
|
||||||
name: str = ""
|
name: str = ""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue