Merge remote-tracking branch 'origin/dev' into cz/mergeAll

This commit is contained in:
ogabrielluiz 2024-06-11 12:49:47 -03:00
commit 2b2812f4df
5 changed files with 37 additions and 34 deletions

View file

@ -1,10 +1,11 @@
from typing import Any, Dict, List, Callable
import ast
from typing import Any, Dict, List, Optional
from langchain.agents import Tool
from langchain.tools import StructuredTool
from langflow.interface.custom.custom_component import CustomComponent
from langflow.custom import CustomComponent
from langflow.schema.dotdict import dotdict
from langchain.pydantic_v1 import BaseModel, Field
class PythonCodeStructuredTool(CustomComponent):
@ -12,8 +13,7 @@ class PythonCodeStructuredTool(CustomComponent):
description = "structuredtool dataclass code to tool"
documentation = "https://python.langchain.com/docs/modules/tools/custom_tools/#structuredtool-dataclass"
icon = "🐍"
field_order = ["name", "description", "tool_code",
"return_direct", "tool_function", "tool_class"]
field_order = ["name", "description", "tool_code", "return_direct", "tool_function", "tool_class"]
def build_config(self) -> Dict[str, Any]:
return {
@ -23,6 +23,7 @@ class PythonCodeStructuredTool(CustomComponent):
"placeholder": "def my_function(args):\n pass",
"multiline": True,
"refresh_button": True,
"field_type": "code",
},
"name": {
"display_name": "Tool Name",
@ -53,10 +54,8 @@ class PythonCodeStructuredTool(CustomComponent):
def parse_source_name(self, code: str) -> Dict:
parsed_code = ast.parse(code)
class_names = [
node.name for node in parsed_code.body if isinstance(node, ast.ClassDef)]
function_names = [
node.name for node in parsed_code.body if isinstance(node, ast.FunctionDef)]
class_names = [node.name for node in parsed_code.body if isinstance(node, ast.ClassDef)]
function_names = [node.name for node in parsed_code.body if isinstance(node, ast.FunctionDef)]
return {"class": class_names, "function": function_names}
def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:
@ -71,8 +70,16 @@ class PythonCodeStructuredTool(CustomComponent):
build_config.tool_function.options = []
return build_config
async def build(self, tool_code: Code, name: str, description: str, tool_function: List[str], return_direct: bool, tool_class: List[str] = None) -> Tool:
local_namespace = {}
async def build(
self,
tool_code: str,
name: str,
description: str,
tool_function: List[str],
return_direct: bool,
tool_class: Optional[List[str]] = None,
) -> Tool:
local_namespace = {} # type: ignore
exec(tool_code, globals(), local_namespace)
func = local_namespace[tool_function]
@ -82,10 +89,6 @@ class PythonCodeStructuredTool(CustomComponent):
_class = local_namespace[tool_class]
tool = StructuredTool.from_function(
func=func,
args_schema=_class,
name=name,
description=description,
return_direct=return_direct
func=func, args_schema=_class, name=name, description=description, return_direct=return_direct
)
return tool

View file

@ -2193,13 +2193,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
[[package]]
name = "pydantic-settings"
version = "2.3.1"
version = "2.3.2"
description = "Settings management using Pydantic"
optional = false
python-versions = ">=3.8"
files = [
{file = "pydantic_settings-2.3.1-py3-none-any.whl", hash = "sha256:acb2c213140dfff9669f4fe9f8180d43914f51626db28ab2db7308a576cce51a"},
{file = "pydantic_settings-2.3.1.tar.gz", hash = "sha256:e34bbd649803a6bb3e2f0f58fb0edff1f0c7f556849fda106cc21bcce12c30ab"},
{file = "pydantic_settings-2.3.2-py3-none-any.whl", hash = "sha256:ae06e44349e4c7bff8d57aff415dfd397ae75c217a098d54e9e6990ad7594ac7"},
{file = "pydantic_settings-2.3.2.tar.gz", hash = "sha256:05d33003c74c2cd585de97b59eb17b6ed67181bc8a3ce594d74b5d24e4df7323"},
]
[package.dependencies]

View file

@ -1,6 +1,6 @@
[tool.poetry]
name = "langflow-base"
version = "0.0.61"
version = "0.0.62"
description = "A Python package with a built-in web application"
authors = ["Langflow <contact@langflow.org>"]
maintainers = [