From ce8cbcea94e58c50dbcd723f95f4d5b345f83f84 Mon Sep 17 00:00:00 2001 From: Jason Schleifer Date: Mon, 20 May 2024 07:14:27 +1200 Subject: [PATCH] Modified a few nodes, and updated tools (#7) * Update README.md ** Updated Install instructions ** Added new example * Fix no input connected error for display Text node * Created Merge Text node * Combined tools into a single input for Create Agent. You can now use one or more tools. --- TODO | 3 +-- __init__.py | 8 +++---- nodes/agent.py | 5 ----- nodes/base_tool.py | 4 ++-- nodes/combine_nodes.py | 49 ++++++++++++++++++++++++++---------------- nodes/tools.py | 8 +++---- 6 files changed, 41 insertions(+), 36 deletions(-) diff --git a/TODO b/TODO index be27ea2..4346873 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,5 @@ * Create a gtUIRulesetsList node which is a list of rulesets -* Combine the tool & tools in Create Agent + * Get everything to output Artifacts * Create an Artifact Viewer * Show logs @@ -9,5 +9,4 @@ * give it webscraping tools * knowledgebase access * Could it have access to current workspace? -* Change display: String to Display: Text * Create a Griptape Menu that hovers on the page somewhere diff --git a/__init__.py b/__init__.py index 3823f6d..fe1da42 100644 --- a/__init__.py +++ b/__init__.py @@ -12,7 +12,7 @@ from dotenv import load_dotenv # Load the griptape_config.json data from .nodes.agent import CreateAgent, ExpandAgent -from .nodes.combine_nodes import MergeStrings, ToolList +from .nodes.combine_nodes import MergeTexts, ToolList from .nodes.config import ( gtUIAmazonBedrockStructureConfig, gtUIAnthropicStructureConfig, @@ -94,7 +94,7 @@ NODE_CLASS_MAPPINGS = { "WebScraper": gtUIWebScraper, "gtUIFileManager": gtUIFileManager, "ToolList": ToolList, - "MergeStrings": MergeStrings, + "MergeTexts": MergeTexts, "PromptTask": gtUIPromptTask, "ToolTask": gtUIToolTask, "ToolkitTask": gtUIToolkitTask, @@ -118,7 +118,7 @@ NODE_DISPLAY_NAME_MAPPINGS = { "gtUIAmazonBedrockStableDiffusionImageGenerationDriver": "Griptape Driver: Amazon Bedrock Stable Diffusion", "gtUIAmazonBedrockTitanImageGenerationDriver": "Griptape Driver: Amazon Bedrock Titan", "gtUILeonardoImageGenerationDriver": "Griptape Driver: Leonardo.AI", - "gtUIOutputStringNode": "Griptape Display: String", + "gtUIOutputStringNode": "Griptape Display: Text", "gtUIOutputImageNode": "Griptape Display: Image", "ImageQueryTask": "Griptape Run: Image Description", "PromptTask": "Griptape Run: Prompt Task", @@ -135,7 +135,7 @@ NODE_DISPLAY_NAME_MAPPINGS = { "WebScraper": "Griptape Tool: WebScraper", "gtUIFileManager": "Griptape Tool: FileManager", "ToolList": "Griptape Combine: Tool List", - "MergeStrings": "Griptape Combine: Merge Strings", + "MergeTexts": "Griptape Combine: Merge Text", } __all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"] diff --git a/nodes/agent.py b/nodes/agent.py index 94b97bc..ea5a56a 100644 --- a/nodes/agent.py +++ b/nodes/agent.py @@ -29,7 +29,6 @@ class CreateAgent(BaseAgent): "forceInput": True, }, ), - "tool": ("TOOL", {"forceInput": True}), "tools": ("TOOL_LIST", {"forceInput": True, "INPUT_IS_LIST": True}), "rulesets": ("RULESET", {"forceInput": True}), }, @@ -46,7 +45,6 @@ class CreateAgent(BaseAgent): self, STRING, config=None, - tool=None, input_string=None, tools=[], rulesets=[], @@ -55,10 +53,7 @@ class CreateAgent(BaseAgent): config = OpenAiStructureConfig() task_memory_client = [TaskMemoryClient(off_prompt=False)] - # Collect the tools to be used agent_tools = [] - if tool: - agent_tools = [tool] if len(tools) > 0: agent_tools += tools diff --git a/nodes/base_tool.py b/nodes/base_tool.py index f0a82f1..e72961a 100644 --- a/nodes/base_tool.py +++ b/nodes/base_tool.py @@ -13,11 +13,11 @@ class gtUIBaseTool: def INPUT_TYPES(s): return {"required": {"off_prompt": ("BOOLEAN", {"default": False})}} - RETURN_TYPES = ("TOOL",) + RETURN_TYPES = ("TOOL_LIST",) RETURN_NAMES = ("TOOL",) FUNCTION = "create" CATEGORY = "Griptape/Tools" def create(self, off_prompt): - return (BaseTool(off_prompt=off_prompt),) + return ([BaseTool(off_prompt=off_prompt)],) diff --git a/nodes/combine_nodes.py b/nodes/combine_nodes.py index fa087b5..7f99d29 100644 --- a/nodes/combine_nodes.py +++ b/nodes/combine_nodes.py @@ -1,6 +1,6 @@ -class MergeStrings: +class MergeTexts: """ - Merge Strings + Merge Texts """ def __init__(self): @@ -11,10 +11,12 @@ class MergeStrings: return { "required": {}, "optional": { - "string_1": ("STRING", {"forceInput": True}), - "string_2": ("STRING", {"forceInput": True}), - "string_3": ("STRING", {"forceInput": True}), - "string_4": ("STRING", {"forceInput": True}), + "input_1": ("STRING", {"forceInput": True}), + "input_2": ("STRING", {"forceInput": True}), + "input_3": ("STRING", {"forceInput": True}), + "input_4": ("STRING", {"forceInput": True}), + "input_5": ("STRING", {"forceInput": True}), + "input_6": ("STRING", {"forceInput": True}), }, } @@ -26,16 +28,18 @@ class MergeStrings: def create( self, - string_1="", - string_2="", - string_3="", - string_4="", + input_1="", + input_2="", + input_3="", + input_4="", + input_5="", + input_6="", ): # Join strings by newline concatenated_string = "\n\n".join( [ string - for string in [string_1, string_2, string_3, string_4] + for string in [input_1, input_2, input_3, input_4, input_5, input_6] if not string == "" ], ) @@ -55,12 +59,12 @@ class ToolList: def INPUT_TYPES(s): return { "optional": { - "tool_2": ("TOOL",), - "tool_3": ("TOOL",), - "tool_4": ("TOOL",), - "tool_5": ("TOOL",), - "tool_6": ("TOOL",), - "tool_1": ("TOOL",), + "tool_1": ("TOOL_LIST",), + "tool_2": ("TOOL_LIST",), + "tool_3": ("TOOL_LIST",), + "tool_4": ("TOOL_LIST",), + "tool_5": ("TOOL_LIST",), + "tool_6": ("TOOL_LIST",), } } @@ -80,8 +84,15 @@ class ToolList: tool_6=None, ): tool_list = [ - tool - for tool in [tool_1, tool_2, tool_3, tool_4, tool_5, tool_6] + tool[0] + for tool in [ + tool_1, + tool_2, + tool_3, + tool_4, + tool_5, + tool_6, + ] if tool is not None ] return (tool_list,) diff --git a/nodes/tools.py b/nodes/tools.py index 4f4aa86..364bfc7 100644 --- a/nodes/tools.py +++ b/nodes/tools.py @@ -22,7 +22,7 @@ class gtUIFileManager(gtUIBaseTool): def create(self, off_prompt, workdir=""): tool = FileManager(off_prompt=off_prompt, workdir=workdir) - return (tool,) + return ([tool],) class gtUICalculator(gtUIBaseTool): @@ -32,7 +32,7 @@ class gtUICalculator(gtUIBaseTool): def create(self, off_prompt): tool = Calculator(off_prompt=off_prompt) - return (tool,) + return ([tool],) class gtUIWebScraper(gtUIBaseTool): @@ -47,7 +47,7 @@ class gtUIWebScraper(gtUIBaseTool): web_scraper_driver=MarkdownifyWebScraperDriver(timeout=1000) ), ) - return (tool,) + return ([tool],) class gtUIDateTime(gtUIBaseTool): @@ -57,4 +57,4 @@ class gtUIDateTime(gtUIBaseTool): def create(self, off_prompt): tool = DateTime(off_prompt=off_prompt) - return (tool,) + return ([tool],)