feat: implement requests wrapper

This commit is contained in:
Gabriel Almeida 2023-03-30 21:15:38 -03:00
commit fdb058978e
9 changed files with 48 additions and 3 deletions

View file

@ -6,6 +6,7 @@ chains:
agents:
- ZeroShotAgent
- JsonAgent
prompts:
- PromptTemplate
@ -24,4 +25,7 @@ tools:
- PythonFunction
- JsonSpec
wrappers:
- RequestsWrapper
dev: false

View file

@ -1,8 +1,10 @@
from langchain.agents import loading
from langflow.custom.customs import get_custom_nodes
from langflow.interface.base import LangChainTypeCreator
from langflow.utils.util import build_template_from_class
from langflow.settings import settings
from typing import Dict, List
from langflow.interface.agents.custom import JsonAgent
class AgentCreator(LangChainTypeCreator):
@ -12,10 +14,14 @@ class AgentCreator(LangChainTypeCreator):
def type_to_loader_dict(self) -> Dict:
if self.type_dict is None:
self.type_dict = loading.AGENT_TO_CLASS
# Add JsonAgent to the list of agents
self.type_dict["JsonAgent"] = JsonAgent
return self.type_dict
def get_signature(self, name: str) -> Dict | None:
try:
if name in get_custom_nodes(self.type_name).keys():
return get_custom_nodes(self.type_name)[name]
return build_template_from_class(
name, self.type_to_loader_dict, add_function=True
)

View file

@ -17,8 +17,8 @@ class PromptCreator(LangChainTypeCreator):
def get_signature(self, name: str) -> Dict | None:
try:
if name in get_custom_nodes("prompts").keys():
return get_custom_nodes("prompts")[name]
if name in get_custom_nodes(self.type_name).keys():
return get_custom_nodes(self.type_name)[name]
return build_template_from_function(name, self.type_to_loader_dict)
except ValueError as exc:
raise ValueError("Prompt not found") from exc

View file

@ -5,6 +5,7 @@ from langflow.interface.prompts.base import prompt_creator
from langflow.interface.chains.base import chain_creator
from langflow.interface.toolkits.base import toolkits_creator
from langflow.interface.tools.base import tool_creator
from langflow.interface.wrappers.base import wrapper_creator
def get_type_list():
@ -32,6 +33,7 @@ def build_langchain_types_dict():
memory_creator,
tool_creator,
toolkits_creator,
wrapper_creator,
]
all_types = {}

View 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()

View file

@ -12,6 +12,7 @@ class Settings(BaseSettings):
llms: List[str] = []
tools: List[str] = []
memories: List[str] = []
wrappers: List[str] = []
dev: bool = False
class Config:
@ -33,6 +34,7 @@ class Settings(BaseSettings):
self.llms = new_settings.llms or []
self.tools = new_settings.tools or []
self.memories = new_settings.memories or []
self.wrappers = new_settings.wrappers or []
self.dev = new_settings.dev or False

View file

@ -140,7 +140,7 @@ class JsonAgentNode(FrontendNode):
],
)
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):
return super().to_dict()

View file

@ -13,6 +13,7 @@ class Field(BaseModel):
suffixes: list[str] = []
file_types: list[str] = []
content: Union[str, None] = None
password: bool = False
# _name will be used to store the name of the field
# in the template
name: str = ""