From 81d231c632755e19302f9a6bcc0d85c02640cdee Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 7 Jun 2023 21:36:40 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(vertex/base.py):=20fix=20ver?= =?UTF-8?q?tex=5Ftype=20assignment=20to=20handle=20uppercase=20template=20?= =?UTF-8?q?types=20=F0=9F=90=9B=20fix(interface/loading.py):=20fix=20custo?= =?UTF-8?q?m=5Fnode=20instantiation=20to=20handle=20classes=20without=20in?= =?UTF-8?q?itialize=20method=20=E2=9C=A8=20feat(template/frontend=5Fnode/p?= =?UTF-8?q?rompts.py):=20change=20type=5Fname=20to=20match=20class=20name?= =?UTF-8?q?=20=E2=9C=A8=20feat(template/frontend=5Fnode/tools.py):=20chang?= =?UTF-8?q?e=20type=5Fname=20to=20match=20class=20name=20=F0=9F=94=A5=20ch?= =?UTF-8?q?ore(test=5Fagents=5Ftemplate.py):=20remove=20test=5Fagents=5Fse?= =?UTF-8?q?ttings=20and=20update=20initialize=5Fagent=20test=20The=20verte?= =?UTF-8?q?x=5Ftype=20assignment=20in=20the=20Vertex=20class=20was=20not?= =?UTF-8?q?=20handling=20uppercase=20template=20types=20correctly.=20This?= =?UTF-8?q?=20has=20been=20fixed=20to=20handle=20both=20uppercase=20and=20?= =?UTF-8?q?lowercase=20types.=20The=20custom=5Fnode=20instantiation=20in?= =?UTF-8?q?=20the=20instantiate=5Fclass=20function=20was=20not=20handling?= =?UTF-8?q?=20classes=20without=20an=20initialize=20method=20correctly.=20?= =?UTF-8?q?This=20has=20been=20fixed=20to=20instantiate=20the=20class=20di?= =?UTF-8?q?rectly=20if=20the=20initialize=20method=20is=20not=20present.?= =?UTF-8?q?=20The=20type=5Fname=20in=20the=20ZeroShotPromptNode=20and=20Py?= =?UTF-8?q?thonFunctionToolNode=20classes=20have=20been=20changed=20to=20m?= =?UTF-8?q?atch=20the=20class=20name.=20The=20test=5Fagents=5Fsettings=20t?= =?UTF-8?q?est=20has=20been=20removed=20as=20it=20is=20no=20longer=20neces?= =?UTF-8?q?sary=20and=20the=20initialize=5Fagent=20test=20has=20been=20upd?= =?UTF-8?q?ated=20to=20match=20the=20new=20AgentInitializer=20class=20name?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/graph/vertex/base.py | 10 ++++++---- src/backend/langflow/interface/loading.py | 6 ++++-- .../langflow/template/frontend_node/prompts.py | 2 +- .../langflow/template/frontend_node/tools.py | 2 +- tests/test_agents_template.py | 13 +------------ 5 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/backend/langflow/graph/vertex/base.py b/src/backend/langflow/graph/vertex/base.py index 0ea2e0779..31cc11968 100644 --- a/src/backend/langflow/graph/vertex/base.py +++ b/src/backend/langflow/graph/vertex/base.py @@ -48,10 +48,12 @@ class Vertex: ] template_dict = self.data["node"]["template"] - # self.vertex_type = ( - # self.data["type"] if "Tool" not in self.output else template_dict["_type"] - # ) - self.vertex_type = template_dict["_type"] + self.vertex_type = ( + self.data["type"] + if "Tool" not in self.output or template_dict["_type"].islower() + else template_dict["_type"] + ) + # self.vertex_type = template_dict["_type"] if self.base_type is None: for base_type, value in ALL_TYPES_DICT.items(): if self.vertex_type in value: diff --git a/src/backend/langflow/interface/loading.py b/src/backend/langflow/interface/loading.py index 80f451f03..a765d3b9b 100644 --- a/src/backend/langflow/interface/loading.py +++ b/src/backend/langflow/interface/loading.py @@ -33,8 +33,10 @@ def instantiate_class(node_type: str, base_type: str, params: Dict) -> Any: params = convert_params_to_sets(params) params = convert_kwargs(params) if node_type in CUSTOM_NODES: - if custom_agent := CUSTOM_NODES.get(node_type): - return custom_agent.initialize(**params) + if custom_node := CUSTOM_NODES.get(node_type): + if hasattr(custom_node, "initialize"): + return custom_node.initialize(**params) + return custom_node(**params) class_object = import_by_type(_type=base_type, name=node_type) return instantiate_based_on_type(class_object, base_type, node_type, params) diff --git a/src/backend/langflow/template/frontend_node/prompts.py b/src/backend/langflow/template/frontend_node/prompts.py index 8738f1795..da5d2a300 100644 --- a/src/backend/langflow/template/frontend_node/prompts.py +++ b/src/backend/langflow/template/frontend_node/prompts.py @@ -74,7 +74,7 @@ class BasePromptFrontendNode(FrontendNode): class ZeroShotPromptNode(BasePromptFrontendNode): name: str = "ZeroShotPrompt" template: Template = Template( - type_name="zero_shot", + type_name="ZeroShotPrompt", fields=[ TemplateField( field_type="str", diff --git a/src/backend/langflow/template/frontend_node/tools.py b/src/backend/langflow/template/frontend_node/tools.py index 3094f3568..dd312f906 100644 --- a/src/backend/langflow/template/frontend_node/tools.py +++ b/src/backend/langflow/template/frontend_node/tools.py @@ -108,7 +108,7 @@ class PythonFunctionToolNode(FrontendNode): class PythonFunctionNode(FrontendNode): name: str = "PythonFunction" template: Template = Template( - type_name="python_function", + type_name="PythonFunction", fields=[ TemplateField( field_type="code", diff --git a/tests/test_agents_template.py b/tests/test_agents_template.py index 8e181711f..e58007238 100644 --- a/tests/test_agents_template.py +++ b/tests/test_agents_template.py @@ -1,15 +1,4 @@ from fastapi.testclient import TestClient -from langflow.settings import settings - - -# check that all agents are in settings.agents -# are in json_response["agents"] -def test_agents_settings(client: TestClient): - response = client.get("api/v1/all") - assert response.status_code == 200 - json_response = response.json() - agents = json_response["agents"] - assert set(agents.keys()) == set(settings.agents) def test_zero_shot_agent(client: TestClient): @@ -131,7 +120,7 @@ def test_initialize_agent(client: TestClient): json_response = response.json() agents = json_response["agents"] - initialize_agent = agents["initialize_agent"] + initialize_agent = agents["AgentInitializer"] assert initialize_agent["base_classes"] == ["AgentExecutor", "function"] template = initialize_agent["template"]