From cfbd22d2b085f6438315b692ca8f5d69cb2309a3 Mon Sep 17 00:00:00 2001 From: Gabriel Almeida Date: Thu, 30 Mar 2023 16:35:08 -0300 Subject: [PATCH] fix: set up creators --- src/backend/langflow/graph/base.py | 5 ++--- src/backend/langflow/interface/agents/base.py | 3 +++ src/backend/langflow/interface/base.py | 12 ++++++----- src/backend/langflow/interface/chains/base.py | 5 +++-- .../langflow/interface/custom_types.py | 10 +++++++-- src/backend/langflow/interface/llms/base.py | 3 +++ .../langflow/interface/memories/base.py | 3 +++ .../langflow/interface/prompts/base.py | 3 +++ src/backend/langflow/interface/tools/base.py | 7 +++++-- src/backend/langflow/interface/types.py | 21 ++++++------------- 10 files changed, 43 insertions(+), 29 deletions(-) diff --git a/src/backend/langflow/graph/base.py b/src/backend/langflow/graph/base.py index 65e81f934..1b1fb7459 100644 --- a/src/backend/langflow/graph/base.py +++ b/src/backend/langflow/graph/base.py @@ -5,9 +5,8 @@ from copy import deepcopy import types -from typing import Any, Dict, List, Optional, Union -from langflow.utils import payload -from langflow.interface.listing import ALL_TYPES_DICT, ALL_TOOLS_NAMES, TOOLS_DICT +from typing import Any, Dict, List +from langflow.interface.listing import ALL_TYPES_DICT, TOOLS_DICT from langflow.interface import loading diff --git a/src/backend/langflow/interface/agents/base.py b/src/backend/langflow/interface/agents/base.py index b271e46b1..c1d08b551 100644 --- a/src/backend/langflow/interface/agents/base.py +++ b/src/backend/langflow/interface/agents/base.py @@ -26,3 +26,6 @@ class AgentCreator(LangChainTypeCreator): for agent in self.type_to_loader_dict.values() if agent.__name__ in settings.agents or settings.dev ] + + +agent_creator = AgentCreator() diff --git a/src/backend/langflow/interface/base.py b/src/backend/langflow/interface/base.py index 3ae5e7c08..4e1bd1fce 100644 --- a/src/backend/langflow/interface/base.py +++ b/src/backend/langflow/interface/base.py @@ -1,4 +1,4 @@ -from typing import Dict, List +from typing import Any, Dict, List, Optional from pydantic import BaseModel from abc import ABC, abstractmethod from langflow.template.template import Template, Field, FrontendNode @@ -16,23 +16,25 @@ class LangChainTypeCreator(BaseModel, ABC): pass @abstractmethod - def get_signature(self, name: str) -> Dict: + def get_signature(self, name: str) -> Optional[Dict[Any, Any]]: pass @abstractmethod def to_list(self) -> List[str]: pass - def to_dict(self): - result = {self.type_name: {}} # type: Dict + def to_dict(self) -> Dict: + result: Dict = {self.type_name: {}} for name in self.to_list(): - result[self.type_name][name] = self.get_signature(name) + result[self.type_name][name] = self.frontend_node(name).to_dict() return result def frontend_node(self, name) -> FrontendNode: signature = self.get_signature(name) + if signature is None: + raise ValueError(f"{name} not found") fields = [ Field( name=key, diff --git a/src/backend/langflow/interface/chains/base.py b/src/backend/langflow/interface/chains/base.py index 4fb323330..1e0d4fd57 100644 --- a/src/backend/langflow/interface/chains/base.py +++ b/src/backend/langflow/interface/chains/base.py @@ -1,7 +1,5 @@ from typing import Dict, List from langflow.interface.base import LangChainTypeCreator -from langflow.interface.signature import get_chain_signature -from langflow.template.template import Field, FrontendNode, Template from langflow.utils.util import build_template_from_function from langflow.settings import settings from langchain.chains import loading as chains_loading @@ -33,3 +31,6 @@ class ChainCreator(LangChainTypeCreator): or settings.dev ) ] + + +chain_creator = ChainCreator() diff --git a/src/backend/langflow/interface/custom_types.py b/src/backend/langflow/interface/custom_types.py index 7943f99f0..52d05b218 100644 --- a/src/backend/langflow/interface/custom_types.py +++ b/src/backend/langflow/interface/custom_types.py @@ -1,5 +1,5 @@ from typing import Callable, Optional -from langchain import LLMChain, PromptTemplate +from langchain import LLMChain from langchain.agents import AgentExecutor, ZeroShotAgent from langflow.utils import validate from pydantic import BaseModel, validator @@ -64,6 +64,12 @@ class JsonAgent(BaseModel): prompt=prompt, ) agent = ZeroShotAgent(llm_chain=llm_chain, allowed_tools=tool_names) - return AgentExecutor.from_agent_and_tools( + self.agent_executor = AgentExecutor.from_agent_and_tools( agent=agent, tools=tools, verbose=True ) + + def __call__(self, *args, **kwargs): + return self.agent_executor(*args, **kwargs) + + def run(self, *args, **kwargs): + return self.agent_executor.run(*args, **kwargs) diff --git a/src/backend/langflow/interface/llms/base.py b/src/backend/langflow/interface/llms/base.py index 60dbdb313..02ca8457c 100644 --- a/src/backend/langflow/interface/llms/base.py +++ b/src/backend/langflow/interface/llms/base.py @@ -25,3 +25,6 @@ class LLMCreator(LangChainTypeCreator): for llm in self.type_to_loader_dict.values() if llm.__name__ in settings.llms or settings.dev ] + + +llm_creator = LLMCreator() diff --git a/src/backend/langflow/interface/memories/base.py b/src/backend/langflow/interface/memories/base.py index f14da7e70..f3dc7279d 100644 --- a/src/backend/langflow/interface/memories/base.py +++ b/src/backend/langflow/interface/memories/base.py @@ -25,3 +25,6 @@ class MemoryCreator(LangChainTypeCreator): for memory in self.type_to_loader_dict.values() if memory.__name__ in settings.memories or settings.dev ] + + +memory_creator = MemoryCreator() diff --git a/src/backend/langflow/interface/prompts/base.py b/src/backend/langflow/interface/prompts/base.py index 0b32b6313..b3f96f69e 100644 --- a/src/backend/langflow/interface/prompts/base.py +++ b/src/backend/langflow/interface/prompts/base.py @@ -30,3 +30,6 @@ class PromptCreator(LangChainTypeCreator): or settings.dev ] return library_prompts + list(custom_prompts.keys()) + + +prompt_creator = PromptCreator() diff --git a/src/backend/langflow/interface/tools/base.py b/src/backend/langflow/interface/tools/base.py index c0a68c691..9b9a072c1 100644 --- a/src/backend/langflow/interface/tools/base.py +++ b/src/backend/langflow/interface/tools/base.py @@ -18,7 +18,7 @@ class ToolCreator(LangChainTypeCreator): @property def type_to_loader_dict(self) -> Dict: - return ALL_TOOLS_NAMES + return util.get_tools_dict() def get_signature(self, name: str) -> Dict | None: """Get the signature of a tool.""" @@ -26,7 +26,7 @@ class ToolCreator(LangChainTypeCreator): NODE_INPUTS = ["llm", "func"] base_classes = ["Tool"] all_tools = {} - for tool in ALL_TOOLS_NAMES: + for tool in self.type_to_loader_dict.keys(): if tool_params := util.get_tool_params(util.get_tool_by_name(tool)): tool_name = tool_params.get("name") or str(tool) all_tools[tool_name] = {"type": tool, "params": tool_params} @@ -126,3 +126,6 @@ class ToolCreator(LangChainTypeCreator): # Add Tool custom_tools = customs.get_custom_nodes("tools") return tools + list(custom_tools.keys()) + + +tool_creator = ToolCreator() diff --git a/src/backend/langflow/interface/types.py b/src/backend/langflow/interface/types.py index 633f31dfc..f90ebe5a6 100644 --- a/src/backend/langflow/interface/types.py +++ b/src/backend/langflow/interface/types.py @@ -1,12 +1,9 @@ -from langflow.interface.agents import AgentCreator -from langflow.interface.listing import list_type -from langflow.interface.llms import LLMCreator -from langflow.interface.memories.base import MemoryCreator -from langflow.interface.prompts import PromptCreator -from langflow.interface.signature import get_signature -from langchain import chains -from langflow.interface.chains import ChainCreator -from langflow.interface.tools import ToolCreator +from langflow.interface.agents.base import agent_creator +from langflow.interface.llms.base import llm_creator +from langflow.interface.memories.base import memory_creator +from langflow.interface.prompts.base import prompt_creator +from langflow.interface.chains.base import chain_creator +from langflow.interface.tools.base import tool_creator def get_type_list(): @@ -23,12 +20,6 @@ def get_type_list(): def build_langchain_types_dict(): """Build a dictionary of all langchain types""" - chain_creator = ChainCreator() - agent_creator = AgentCreator() - prompt_creator = PromptCreator() - tool_creator = ToolCreator() - llm_creator = LLMCreator() - memory_creator = MemoryCreator() all_types = {}