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:
|
||||
- ZeroShotAgent
|
||||
- JsonAgent
|
||||
|
||||
prompts:
|
||||
- PromptTemplate
|
||||
|
|
@ -24,4 +25,7 @@ tools:
|
|||
- PythonFunction
|
||||
- JsonSpec
|
||||
|
||||
wrappers:
|
||||
- RequestsWrapper
|
||||
|
||||
dev: false
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = {}
|
||||
|
|
|
|||
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] = []
|
||||
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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 = ""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue