fix: set up creators
This commit is contained in:
parent
064cf8120f
commit
cfbd22d2b0
10 changed files with 43 additions and 29 deletions
|
|
@ -5,9 +5,8 @@
|
||||||
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
import types
|
import types
|
||||||
from typing import Any, Dict, List, Optional, Union
|
from typing import Any, Dict, List
|
||||||
from langflow.utils import payload
|
from langflow.interface.listing import ALL_TYPES_DICT, TOOLS_DICT
|
||||||
from langflow.interface.listing import ALL_TYPES_DICT, ALL_TOOLS_NAMES, TOOLS_DICT
|
|
||||||
from langflow.interface import loading
|
from langflow.interface import loading
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,3 +26,6 @@ class AgentCreator(LangChainTypeCreator):
|
||||||
for agent in self.type_to_loader_dict.values()
|
for agent in self.type_to_loader_dict.values()
|
||||||
if agent.__name__ in settings.agents or settings.dev
|
if agent.__name__ in settings.agents or settings.dev
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
agent_creator = AgentCreator()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from typing import Dict, List
|
from typing import Any, Dict, List, Optional
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from langflow.template.template import Template, Field, FrontendNode
|
from langflow.template.template import Template, Field, FrontendNode
|
||||||
|
|
@ -16,23 +16,25 @@ class LangChainTypeCreator(BaseModel, ABC):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_signature(self, name: str) -> Dict:
|
def get_signature(self, name: str) -> Optional[Dict[Any, Any]]:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def to_list(self) -> List[str]:
|
def to_list(self) -> List[str]:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self) -> Dict:
|
||||||
result = {self.type_name: {}} # type: Dict
|
result: Dict = {self.type_name: {}}
|
||||||
|
|
||||||
for name in self.to_list():
|
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
|
return result
|
||||||
|
|
||||||
def frontend_node(self, name) -> FrontendNode:
|
def frontend_node(self, name) -> FrontendNode:
|
||||||
signature = self.get_signature(name)
|
signature = self.get_signature(name)
|
||||||
|
if signature is None:
|
||||||
|
raise ValueError(f"{name} not found")
|
||||||
fields = [
|
fields = [
|
||||||
Field(
|
Field(
|
||||||
name=key,
|
name=key,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
from typing import Dict, List
|
from typing import Dict, List
|
||||||
from langflow.interface.base import LangChainTypeCreator
|
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.utils.util import build_template_from_function
|
||||||
from langflow.settings import settings
|
from langflow.settings import settings
|
||||||
from langchain.chains import loading as chains_loading
|
from langchain.chains import loading as chains_loading
|
||||||
|
|
@ -33,3 +31,6 @@ class ChainCreator(LangChainTypeCreator):
|
||||||
or settings.dev
|
or settings.dev
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
chain_creator = ChainCreator()
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from typing import Callable, Optional
|
from typing import Callable, Optional
|
||||||
from langchain import LLMChain, PromptTemplate
|
from langchain import LLMChain
|
||||||
from langchain.agents import AgentExecutor, ZeroShotAgent
|
from langchain.agents import AgentExecutor, ZeroShotAgent
|
||||||
from langflow.utils import validate
|
from langflow.utils import validate
|
||||||
from pydantic import BaseModel, validator
|
from pydantic import BaseModel, validator
|
||||||
|
|
@ -64,6 +64,12 @@ class JsonAgent(BaseModel):
|
||||||
prompt=prompt,
|
prompt=prompt,
|
||||||
)
|
)
|
||||||
agent = ZeroShotAgent(llm_chain=llm_chain, allowed_tools=tool_names)
|
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
|
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)
|
||||||
|
|
|
||||||
|
|
@ -25,3 +25,6 @@ class LLMCreator(LangChainTypeCreator):
|
||||||
for llm in self.type_to_loader_dict.values()
|
for llm in self.type_to_loader_dict.values()
|
||||||
if llm.__name__ in settings.llms or settings.dev
|
if llm.__name__ in settings.llms or settings.dev
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
llm_creator = LLMCreator()
|
||||||
|
|
|
||||||
|
|
@ -25,3 +25,6 @@ class MemoryCreator(LangChainTypeCreator):
|
||||||
for memory in self.type_to_loader_dict.values()
|
for memory in self.type_to_loader_dict.values()
|
||||||
if memory.__name__ in settings.memories or settings.dev
|
if memory.__name__ in settings.memories or settings.dev
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
memory_creator = MemoryCreator()
|
||||||
|
|
|
||||||
|
|
@ -30,3 +30,6 @@ class PromptCreator(LangChainTypeCreator):
|
||||||
or settings.dev
|
or settings.dev
|
||||||
]
|
]
|
||||||
return library_prompts + list(custom_prompts.keys())
|
return library_prompts + list(custom_prompts.keys())
|
||||||
|
|
||||||
|
|
||||||
|
prompt_creator = PromptCreator()
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ class ToolCreator(LangChainTypeCreator):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def type_to_loader_dict(self) -> Dict:
|
def type_to_loader_dict(self) -> Dict:
|
||||||
return ALL_TOOLS_NAMES
|
return util.get_tools_dict()
|
||||||
|
|
||||||
def get_signature(self, name: str) -> Dict | None:
|
def get_signature(self, name: str) -> Dict | None:
|
||||||
"""Get the signature of a tool."""
|
"""Get the signature of a tool."""
|
||||||
|
|
@ -26,7 +26,7 @@ class ToolCreator(LangChainTypeCreator):
|
||||||
NODE_INPUTS = ["llm", "func"]
|
NODE_INPUTS = ["llm", "func"]
|
||||||
base_classes = ["Tool"]
|
base_classes = ["Tool"]
|
||||||
all_tools = {}
|
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)):
|
if tool_params := util.get_tool_params(util.get_tool_by_name(tool)):
|
||||||
tool_name = tool_params.get("name") or str(tool)
|
tool_name = tool_params.get("name") or str(tool)
|
||||||
all_tools[tool_name] = {"type": tool, "params": tool_params}
|
all_tools[tool_name] = {"type": tool, "params": tool_params}
|
||||||
|
|
@ -126,3 +126,6 @@ class ToolCreator(LangChainTypeCreator):
|
||||||
# Add Tool
|
# Add Tool
|
||||||
custom_tools = customs.get_custom_nodes("tools")
|
custom_tools = customs.get_custom_nodes("tools")
|
||||||
return tools + list(custom_tools.keys())
|
return tools + list(custom_tools.keys())
|
||||||
|
|
||||||
|
|
||||||
|
tool_creator = ToolCreator()
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
from langflow.interface.agents import AgentCreator
|
from langflow.interface.agents.base import agent_creator
|
||||||
from langflow.interface.listing import list_type
|
from langflow.interface.llms.base import llm_creator
|
||||||
from langflow.interface.llms import LLMCreator
|
from langflow.interface.memories.base import memory_creator
|
||||||
from langflow.interface.memories.base import MemoryCreator
|
from langflow.interface.prompts.base import prompt_creator
|
||||||
from langflow.interface.prompts import PromptCreator
|
from langflow.interface.chains.base import chain_creator
|
||||||
from langflow.interface.signature import get_signature
|
from langflow.interface.tools.base import tool_creator
|
||||||
from langchain import chains
|
|
||||||
from langflow.interface.chains import ChainCreator
|
|
||||||
from langflow.interface.tools import ToolCreator
|
|
||||||
|
|
||||||
|
|
||||||
def get_type_list():
|
def get_type_list():
|
||||||
|
|
@ -23,12 +20,6 @@ def get_type_list():
|
||||||
|
|
||||||
def build_langchain_types_dict():
|
def build_langchain_types_dict():
|
||||||
"""Build a dictionary of all langchain types"""
|
"""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 = {}
|
all_types = {}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue