diff --git a/README.md b/README.md index 7026a0b..81c67c9 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,9 @@ You can previous and download more examples [here](examples/README.md). ## Recent Changelog +### July 27, 2024 +* Updated menu items to be in a better order. Please provide feedback! + ### July 25, 2024 * Added separators to menu items in the RMB->Griptape menu to help group similar items. diff --git a/__init__.py b/__init__.py index dda6e8f..dd6fc5b 100644 --- a/__init__.py +++ b/__init__.py @@ -17,6 +17,7 @@ from .nodes.agent.ExpandAgent import ExpandAgent from .nodes.agent.gtUICreateAgentFromConfig import gtUICreateAgentFromConfig from .nodes.agent.gtUIReplaceRulesetsOnAgent import gtUIReplaceRulesetsOnAgent from .nodes.agent.gtUIReplaceToolsOnAgent import gtUIReplaceToolsOnAgent +from .nodes.agent.gtUIRunAgent import gtUIRunAgent from .nodes.agent.gtUISetDefaultAgent import gtUISetDefaultAgent from .nodes.agent.RunAgent import RunAgent @@ -252,12 +253,14 @@ NODE_CLASS_MAPPINGS = { # AGENT "Griptape Create: Agent": CreateAgent, "Griptape Create: Agent from Config": gtUICreateAgentFromConfig, - "Griptape Set: Default Agent": gtUISetDefaultAgent, - "Griptape Convert: Agent to Tool": gtUIConvertAgentToTool, - "Griptape Expand: Agent Nodes": ExpandAgent, - "Griptape Replace: Rulesets on Agent": gtUIReplaceRulesetsOnAgent, - "Griptape Replace: Tools on Agent": gtUIReplaceToolsOnAgent, "Griptape Run: Agent": RunAgent, + "Griptape Run: Prompt Task": gtUIPromptTask, + "Griptape Run: Text Summary": gtUITextSummaryTask, + "Griptape Run: Tool Task": gtUIToolTask, + "Griptape Run: Toolkit Task": gtUIToolkitTask, + # "Gt Run Agent": gtUIRunAgent, + "Griptape Expand: Agent Nodes": ExpandAgent, + "Griptape Set: Default Agent": gtUISetDefaultAgent, # AGENT CONFIG "Griptape Agent Config: Custom Structure": gtUIStructureConfig, "Griptape Agent Config: Amazon Bedrock": gtUIAmazonBedrockStructureConfig, @@ -270,30 +273,6 @@ NODE_CLASS_MAPPINGS = { "Griptape Agent Config: Ollama": gtUIOllamaStructureConfig, "Griptape Agent Config: OpenAI": gtUIOpenAiStructureConfig, "Griptape Agent Config: OpenAI Compatible": gtUIOpenAiCompatibleConfig, - # AGENT RULES - "Griptape Create: Rules": gtUIRule, - "Griptape Combine: Rules List": RulesList, - # TASKS - "Griptape Run: Prompt Task": gtUIPromptTask, - "Griptape Run: Text Summary": gtUITextSummaryTask, - "Griptape Run: Tool Task": gtUIToolTask, - "Griptape Run: Toolkit Task": gtUIToolkitTask, - # # STRUCTURES - # "Griptape Create: Pipeline": gtUICreatePipeline, - # "Griptape Run: Structure": gtUIRunStructure, - # "Griptape Pipeline: Add Task": gtUIPipelineAddTask, - # "Griptape Pipeline: Insert Task": gtUIPipelineInsertTask, - # AGENT TOOLS - "Griptape Tool: Audio Transcription": gtUIAudioTranscriptionClient, - "Griptape Tool: Calculator": gtUICalculator, - "Griptape Tool: DateTime": gtUIDateTime, - "Griptape Tool: FileManager": gtUIFileManager, - "Griptape Tool: Griptape Cloud KnowledgeBase": gtUIKnowledgeBaseTool, - "Griptape Tool: Text to Speech": gtUITextToSpeechClient, - "Griptape Tool: VectorStore": gtUIVectorStoreClient, - "Griptape Tool: WebScraper": gtUIWebScraper, - "Griptape Tool: WebSearch": gtUIWebSearch, - "Griptape Combine: Tool List": ToolList, # PROMPT DRIVER "Griptape Prompt Driver: Amazon Bedrock": gtUIAmazonBedrockPromptDriver, "Griptape Prompt Driver: Amazon SageMaker Jumpstart": gtUIAmazonSageMakerJumpstartPromptDriver, @@ -347,6 +326,43 @@ NODE_CLASS_MAPPINGS = { # WEBSEARCH DRIVERS "Griptape WebSearch Driver: DuckDuckGo": gtUIDuckDuckGoWebSearchDriver, "Griptape WebSearch Driver: Google": gtUIGoogleWebSearchDriver, + # AGENT RULES + "Griptape Create: Rules": gtUIRule, + "Griptape Combine: Rules List": RulesList, + "Griptape Replace: Rulesets on Agent": gtUIReplaceRulesetsOnAgent, + # TASKS + # # STRUCTURES + # "Griptape Create: Pipeline": gtUICreatePipeline, + # "Griptape Run: Structure": gtUIRunStructure, + # "Griptape Pipeline: Add Task": gtUIPipelineAddTask, + # "Griptape Pipeline: Insert Task": gtUIPipelineInsertTask, + # AGENT TOOLS + "Griptape Convert: Agent to Tool": gtUIConvertAgentToTool, + "Griptape Combine: Tool List": ToolList, + "Griptape Replace: Tools on Agent": gtUIReplaceToolsOnAgent, + "Griptape Tool: Audio Transcription": gtUIAudioTranscriptionClient, + "Griptape Tool: Calculator": gtUICalculator, + "Griptape Tool: DateTime": gtUIDateTime, + "Griptape Tool: FileManager": gtUIFileManager, + "Griptape Tool: Griptape Cloud KnowledgeBase": gtUIKnowledgeBaseTool, + "Griptape Tool: Text to Speech": gtUITextToSpeechClient, + "Griptape Tool: VectorStore": gtUIVectorStoreClient, + "Griptape Tool: WebScraper": gtUIWebScraper, + "Griptape Tool: WebSearch": gtUIWebSearch, + # DISPLAY + "Griptape Display: Image": gtUIOutputImageNode, + "Griptape Display: Text": gtUIOutputStringNode, + "Griptape Display: Data as Text": gtUIOutputDataNode, + # AUDIO + "Griptape Run: Audio Transcription": gtUIAudioTranscriptionTask, + "Griptape Run: Text to Speech": gtUITextToSpeechTask, + "Griptape Load: Audio": gtUILoadAudio, + # Image + "Griptape Create: Image from Text": gtUIPromptImageGenerationTask, + "Griptape Create: Image Variation": gtUIPromptImageVariationTask, + "Griptape Run: Image Description": gtUIImageQueryTask, + "Griptape Run: Parallel Image Description": gtUIParallelImageQueryTask, + "Griptape Load: Image From URL": gtUIFetchImage, # TEXT "Griptape Create: Text": gtUIInputStringNode, "Griptape Create: CLIP Text Encode": gtUICLIPTextEncode, @@ -355,21 +371,6 @@ NODE_CLASS_MAPPINGS = { "Griptape Combine: Merge Texts": MergeTexts, "Griptape Combine: Merge Inputs": gtUIMergeInputs, "Griptape Save: Text": gtUISaveText, - # IMAGES - "Griptape Create: Image from Text": gtUIPromptImageGenerationTask, - "Griptape Create: Image Variation": gtUIPromptImageVariationTask, - "Griptape Load: Image From URL": gtUIFetchImage, - "Griptape Run: Image Description": gtUIImageQueryTask, - "Griptape Run: Parallel Image Description": gtUIParallelImageQueryTask, - # DISPLAY - "Griptape Display: Image": gtUIOutputImageNode, - "Griptape Display: Text": gtUIOutputStringNode, - "Griptape Display: Data as Text": gtUIOutputDataNode, - # AUDIO - "Griptape Load: Audio": gtUILoadAudio, - "Griptape Run: Audio Transcription": gtUIAudioTranscriptionTask, - "Griptape Run: Text to Speech": gtUITextToSpeechTask, - # VECTOR STORE "Griptape Vector Store: Add Text": gtUIVectorStoreUpsertTextTask, "Griptape Vector Store: Query": gtUIVectorStoreQueryTask, # "Griptape Display: Artifact": gtUIOutputArtifactNode, diff --git a/js/gtUIMenuSeparator.js b/js/gtUIMenuSeparator.js new file mode 100644 index 0000000..a31549f --- /dev/null +++ b/js/gtUIMenuSeparator.js @@ -0,0 +1,36 @@ +// Menu items that should have a separator above them +const sep_above_items = [ + // Main Menu Items + "Agent Configs", + "Display", + "Audio", + // Sub Menu Items - Agent + "Griptape Run: Agent", + "Griptape Expand: Agent Nodes", + "Griptape Convert: Agent to Tool", + // Sub Menu Item - Agent Configs + "Griptape Agent Config: Amazon Bedrock", + // Sub Menu Item - Agent Tools + "Griptape Tool: Audio Transcription", + // Sub Menu Item - Audio + "Griptape Load: Audio", + // Sub Menu Items - Image + "Griptape Load: Image From URL", + "Griptape Run: Image Description", + // Sub Menu Items - Text + "Griptape Convert: Text to CLIP Encode", + "Griptape Combine: Merge Texts", + "Griptape Save: Text", + "Griptape Vector Store: Add Text" +] +export function setupMenuSeparator() { + const originalAddItem = LiteGraph.ContextMenu.prototype.addItem; + LiteGraph.ContextMenu.prototype.addItem = function (name, value, options) { + for (let item of sep_above_items) { + if (name === item) { + this.addItem("", null) + } + } + return originalAddItem.apply(this, arguments); + } +} \ No newline at end of file diff --git a/js/gtUINodes.js b/js/gtUINodes.js index 8fed528..e2c4c55 100644 --- a/js/gtUINodes.js +++ b/js/gtUINodes.js @@ -6,6 +6,17 @@ import { setupNodeColors } from "./ColorNodes.js"; import { setupDisplayNodes } from "./DisplayNodes.js"; import { setupCombineNodes } from "./CombineNodes.js"; import { gtUIAddUploadWidget } from "./gtUIUtils.js"; +import { setupMenuSeparator } from "./gtUIMenuSeparator.js"; +// app.extensionManager.registerSidebarTab({ +// id: "search", +// icon: "pi pi-search", +// title: "search", +// tooltip: "search", +// type: "custom", +// render: (el: HTMLElement) => { +// el.innerHTML = "
Custom search tab
"; +// }, +// }); app.registerExtension({ name: "comfy.gtUI", @@ -17,32 +28,8 @@ app.registerExtension({ } }, setup: (app) => { - // Add a separator above these items in the RMB Menu - const sep_above_items = [ - "Text", - "Agent Configs", - "Griptape Convert: Agent to Tool", - "Griptape Replace: Rulesets on Agent", - "Griptape Run: Agent", - "Gripatpe Agent Config: Amazon Bedrock", - "Griptape Combine: Tool List", - "Griptape Load: Image From URL", - "Griptape Run: Image Description", - "Griptape Run: Audio Transcription", - "Griptape Convert: Text to CLIP Encode", - "Griptape Combine: Merge Texts", - "Griptape Save: Text" - ] - const originalAddItem = LiteGraph.ContextMenu.prototype.addItem; - LiteGraph.ContextMenu.prototype.addItem = function (name, value, options) { - for (let item of sep_above_items) { - if (name === item) { - this.addItem("", null) - } - } - return originalAddItem.apply(this, arguments); - } - + + setupMenuSeparator(); function messageHandler(event) { // console.log(event.detail.message) } diff --git a/nodes/agent/gtUIReplaceRulesetsOnAgent.py b/nodes/agent/gtUIReplaceRulesetsOnAgent.py index cd106ad..3081f22 100644 --- a/nodes/agent/gtUIReplaceRulesetsOnAgent.py +++ b/nodes/agent/gtUIReplaceRulesetsOnAgent.py @@ -17,6 +17,7 @@ class gtUIReplaceRulesetsOnAgent(BaseAgent): """ DESCRIPTION = "Replace or Remove Rulesets on an Agent" + CATEGORY = "Griptape/Agent Rules" def __init__(self): self.default_prompt = default_prompt diff --git a/nodes/agent/gtUIReplaceToolsOnAgent.py b/nodes/agent/gtUIReplaceToolsOnAgent.py index 17b43de..8a62c3a 100644 --- a/nodes/agent/gtUIReplaceToolsOnAgent.py +++ b/nodes/agent/gtUIReplaceToolsOnAgent.py @@ -17,6 +17,7 @@ class gtUIReplaceToolsOnAgent(BaseAgent): """ DESCRIPTION = "Replace or Remove Tools on an Agent" + CATEGORY = "Griptape/Agent Tools" def __init__(self): self.default_prompt = default_prompt diff --git a/nodes/agent/gtUIRunAgent.py b/nodes/agent/gtUIRunAgent.py new file mode 100644 index 0000000..3c1a78a --- /dev/null +++ b/nodes/agent/gtUIRunAgent.py @@ -0,0 +1,142 @@ +from griptape.tasks import PromptTask, TextSummaryTask, ToolkitTask, ToolTask +from openai import OpenAIError + +# from server import PromptServer +from ...py.griptape_config import get_config +from .gtComfyAgent import gtComfyAgent + +default_prompt = "{{ input_string }}" +max_attempts_default = 10 + + +class AnyType(str): + def __ne__(self, __value: object) -> bool: + return False + + +any = AnyType("*") + + +def get_default_config(): + return get_config("agent_config") + + +run_types = ["Default", "Prompt", "Tool(s)", "Summarize"] + + +class gtUIRunAgent: + """ + Run a Griptape Agent + """ + + def __init__(self): + self.default_prompt = default_prompt + self.agent = None + + @classmethod + def INPUT_TYPES(s): + return { + "required": {}, + "optional": { + "agent": ( + "AGENT", + { + "forceInput": True, + }, + ), + "run_type": (run_types, {"default": run_types[0]}), + "tools": ("TOOL_LIST", {"forceInput": True, "INPUT_IS_LIST": True}), + "inputs": ("*",), + "text": ( + "STRING", + {"multiline": True, "dynamicPrompts": True}, + ), + }, + } + + RETURN_TYPES = ( + any, + "AGENT", + ) + RETURN_NAMES = ( + "OUTPUT", + "AGENT", + ) + FUNCTION = "run" + + OUTPUT_NODE = True + + CATEGORY = "Griptape/Agent" + + def run(self, **kwargs): + run_type = kwargs.get("run_type", run_types[0]) + inputs = kwargs.get("inputs", []) + agent = kwargs.get("agent", None) + tools = kwargs.get("tools", []) + text = kwargs.get("text", None) + + create_dict = {} + + # Configuration + if agent: + config = agent.config + create_dict["config"] = agent.config + + # Tools + create_dict["tools"] = self.tool_check(config, tools) + + if agent: + create_dict["rulesets"] = agent.rulesets + + # Memory + if agent: + create_dict["conversation_memory"] = agent.conversation_memory + create_dict["meta_memory"] = agent.meta_memory + create_dict["task_memory"] = agent.task_memory + + prompt = [] + try: + # Now create the agent + self.agent = gtComfyAgent(**create_dict) + + # Check for inputs. If none, then just create the agent + if len(inputs) == 0 and text.strip() == "": + output = "Agent created." + else: + # Get the prompt text + if len(inputs) == 0: + prompt = [text] + else: + prompt = [text] + inputs + + if run_type == "Default": + result = self.agent.run(prompt) + else: + if run_type == "Prompt" or ( + run_type == "Tool(s)" and len(tools) == 0 + ): + self.agent.add_task(PromptTask(prompt)) + elif run_type == "Tool(s)": + if len(tools) == 1: + self.agent.add_task(ToolTask(prompt, tool=tools[0])) + else: + self.agent.add_task(ToolkitTask(prompt, tools=tools)) + elif run_type == "Summarize": + self.agent.add_task(TextSummaryTask(prompt)) + result = self.agent.run() + output = result.output_task.output + return ( + output, + self.agent, + ) + + except OpenAIError as e: + if "api_key" in str(e).lower(): + return ( + "Error: OpenAI API key is missing. Please provide a valid API key.", + None, + ) + else: + return (f"OpenAI Error: {str(e)}", None) + except Exception as e: + return (f"Error creating agent: {str(e)}", None) diff --git a/nodes/drivers/gtUIAmazonBedrockPromptDriver.py b/nodes/drivers/gtUIAmazonBedrockPromptDriver.py index 57ec3c9..570de81 100644 --- a/nodes/drivers/gtUIAmazonBedrockPromptDriver.py +++ b/nodes/drivers/gtUIAmazonBedrockPromptDriver.py @@ -35,8 +35,6 @@ class gtUIAmazonBedrockPromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): # api_key = os.getenv("GOOGLE_API_KEY") model = kwargs.get("model", None) diff --git a/nodes/drivers/gtUIAmazonBedrockTitanEmbeddingDriver.py b/nodes/drivers/gtUIAmazonBedrockTitanEmbeddingDriver.py index cab5d26..2e7834f 100644 --- a/nodes/drivers/gtUIAmazonBedrockTitanEmbeddingDriver.py +++ b/nodes/drivers/gtUIAmazonBedrockTitanEmbeddingDriver.py @@ -43,8 +43,6 @@ class gtUIAmazonBedrockTitanEmbeddingDriver(gtUIBaseEmbeddingDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" - def create(self, **kwargs): model = kwargs.get("model", models[0]) diff --git a/nodes/drivers/gtUIAmazonSageMakerJumpstartEmbeddingDriver.py b/nodes/drivers/gtUIAmazonSageMakerJumpstartEmbeddingDriver.py index d938138..c5d150d 100644 --- a/nodes/drivers/gtUIAmazonSageMakerJumpstartEmbeddingDriver.py +++ b/nodes/drivers/gtUIAmazonSageMakerJumpstartEmbeddingDriver.py @@ -37,8 +37,6 @@ class gtUIAmazonSageMakerJumpstartEmbeddingDriver(gtUIBaseEmbeddingDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" - def create(self, **kwargs): model = kwargs.get("model", default_model) endpoint = kwargs.get("endpoint", default_endpoint) diff --git a/nodes/drivers/gtUIAmazonSageMakerJumpstartPromptDriver.py b/nodes/drivers/gtUIAmazonSageMakerJumpstartPromptDriver.py index 9dd7bc2..dd882a7 100644 --- a/nodes/drivers/gtUIAmazonSageMakerJumpstartPromptDriver.py +++ b/nodes/drivers/gtUIAmazonSageMakerJumpstartPromptDriver.py @@ -41,8 +41,6 @@ class gtUIAmazonSageMakerJumpstartPromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): # api_key = os.getenv("GOOGLE_API_KEY") model = kwargs.get("model", None) diff --git a/nodes/drivers/gtUIAnthropicPromptDriver.py b/nodes/drivers/gtUIAnthropicPromptDriver.py index 1841edc..2eb428c 100644 --- a/nodes/drivers/gtUIAnthropicPromptDriver.py +++ b/nodes/drivers/gtUIAnthropicPromptDriver.py @@ -32,8 +32,6 @@ class gtUIAnthropicPromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): model = kwargs.get("model", None) stream = kwargs.get("stream", False) diff --git a/nodes/drivers/gtUIAzureOpenAiChatPromptDriver.py b/nodes/drivers/gtUIAzureOpenAiChatPromptDriver.py index e481051..03ef4b1 100644 --- a/nodes/drivers/gtUIAzureOpenAiChatPromptDriver.py +++ b/nodes/drivers/gtUIAzureOpenAiChatPromptDriver.py @@ -33,8 +33,6 @@ class gtUIAzureOpenAiChatPromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): model = kwargs.get("model", None) deployment_name = kwargs.get("deployment_name", None) diff --git a/nodes/drivers/gtUIAzureOpenAiEmbeddingDriver.py b/nodes/drivers/gtUIAzureOpenAiEmbeddingDriver.py index c6884c1..9267dee 100644 --- a/nodes/drivers/gtUIAzureOpenAiEmbeddingDriver.py +++ b/nodes/drivers/gtUIAzureOpenAiEmbeddingDriver.py @@ -33,8 +33,6 @@ class gtUIAzureOpenAiEmbeddingDriver(gtUIBaseEmbeddingDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" - def create(self, **kwargs): model = kwargs.get("model", models[0]) azure_endpoint_env_var = kwargs.get("base_url", DEFAULT_AZURE_ENDPOINT_ENV_VAR) diff --git a/nodes/drivers/gtUIBaseAudioTranscriptionDriver.py b/nodes/drivers/gtUIBaseAudioTranscriptionDriver.py index e4afa8b..29edb81 100644 --- a/nodes/drivers/gtUIBaseAudioTranscriptionDriver.py +++ b/nodes/drivers/gtUIBaseAudioTranscriptionDriver.py @@ -19,7 +19,7 @@ class gtUIBaseAudioTranscriptionDriver(gtUIBaseDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Audio Transcription" + CATEGORY = "Griptape/Agent Drivers/Audio Transcription" def create( self, diff --git a/nodes/drivers/gtUIBaseDriver.py b/nodes/drivers/gtUIBaseDriver.py index 732d1c5..1f6d85b 100644 --- a/nodes/drivers/gtUIBaseDriver.py +++ b/nodes/drivers/gtUIBaseDriver.py @@ -18,7 +18,7 @@ class gtUIBaseDriver: FUNCTION = "create" - CATEGORY = "Griptape/Drivers" + CATEGORY = "Griptape/Agent Drivers" def getenv(self, env): return os.getenv(env, None) diff --git a/nodes/drivers/gtUIBaseEmbeddingDriver.py b/nodes/drivers/gtUIBaseEmbeddingDriver.py index 5b8d1b0..14ba98e 100644 --- a/nodes/drivers/gtUIBaseEmbeddingDriver.py +++ b/nodes/drivers/gtUIBaseEmbeddingDriver.py @@ -14,7 +14,7 @@ class gtUIBaseEmbeddingDriver(gtUIBaseDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" + CATEGORY = "Griptape/Agent Drivers/Embedding" RETURN_TYPES = ("EMBEDDING_DRIVER",) diff --git a/nodes/drivers/gtUIBaseImageDriver.py b/nodes/drivers/gtUIBaseImageDriver.py index 83b1bbd..d255cdc 100644 --- a/nodes/drivers/gtUIBaseImageDriver.py +++ b/nodes/drivers/gtUIBaseImageDriver.py @@ -26,7 +26,7 @@ class gtUIBaseImageGenerationDriver(gtUIBaseDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Image Generation" + CATEGORY = "Griptape/Agent Drivers/Image Generation" def create(self, prompt): api_key = self.getenv(DEFAULT_API_KEY) diff --git a/nodes/drivers/gtUIBasePromptDriver.py b/nodes/drivers/gtUIBasePromptDriver.py index 5e790ca..848960f 100644 --- a/nodes/drivers/gtUIBasePromptDriver.py +++ b/nodes/drivers/gtUIBasePromptDriver.py @@ -29,7 +29,7 @@ class gtUIBasePromptDriver(gtUIBaseDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Audio Transcription" + CATEGORY = "Griptape/Agent Drivers/Prompt" def create(self, **kwargs): driver = BasePromptDriver() diff --git a/nodes/drivers/gtUIBaseTextToSpeechDriver.py b/nodes/drivers/gtUIBaseTextToSpeechDriver.py index 18761a6..d95828c 100644 --- a/nodes/drivers/gtUIBaseTextToSpeechDriver.py +++ b/nodes/drivers/gtUIBaseTextToSpeechDriver.py @@ -21,7 +21,7 @@ class gtUIBaseTextToSpeechDriver(gtUIBaseDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Text to Speech" + CATEGORY = "Griptape/Agent Drivers/Text to Speech" def create(self, **kwargs): model = kwargs.get("model", "eleven_multilingual_v2") diff --git a/nodes/drivers/gtUIBaseVectorStoreDriver.py b/nodes/drivers/gtUIBaseVectorStoreDriver.py index d0c2af3..3cd4b33 100644 --- a/nodes/drivers/gtUIBaseVectorStoreDriver.py +++ b/nodes/drivers/gtUIBaseVectorStoreDriver.py @@ -24,7 +24,7 @@ class gtUIBaseVectorStoreDriver(gtUIBaseDriver): return inputs - CATEGORY = "Griptape/Drivers/Vector Store" + CATEGORY = "Griptape/Agent Drivers/Vector Store" RETURN_TYPES = ("VECTOR_STORE_DRIVER",) def get_default_embedding_driver(self): diff --git a/nodes/drivers/gtUIBaseWebSearchDriver.py b/nodes/drivers/gtUIBaseWebSearchDriver.py index 03be770..576809f 100644 --- a/nodes/drivers/gtUIBaseWebSearchDriver.py +++ b/nodes/drivers/gtUIBaseWebSearchDriver.py @@ -16,7 +16,7 @@ class gtUIBaseWebSearchDriver(gtUIBaseDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Web Search" + CATEGORY = "Griptape/Agent Drivers/Web Search" def create( self, diff --git a/nodes/drivers/gtUICohereEmbeddingDriver.py b/nodes/drivers/gtUICohereEmbeddingDriver.py index e5608c2..8193cb4 100644 --- a/nodes/drivers/gtUICohereEmbeddingDriver.py +++ b/nodes/drivers/gtUICohereEmbeddingDriver.py @@ -35,8 +35,6 @@ class gtUICohereEmbeddingDriver(gtUIBaseEmbeddingDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" - def create(self, **kwargs): api_key_env_var = kwargs.get("api_key_env_var", DEFAULT_API_KEY_ENV_VAR) model = kwargs.get("models", models[0]) diff --git a/nodes/drivers/gtUICoherePromptDriver.py b/nodes/drivers/gtUICoherePromptDriver.py index 4744c41..6e4638c 100644 --- a/nodes/drivers/gtUICoherePromptDriver.py +++ b/nodes/drivers/gtUICoherePromptDriver.py @@ -38,8 +38,6 @@ class gtUICoherePromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): api_key = self.getenv(kwargs.get("api_key_env_var", DEFAULT_API_KEY_ENV_VAR)) model = kwargs.get("model", models[0]) diff --git a/nodes/drivers/gtUIGoogleEmbeddingDriver.py b/nodes/drivers/gtUIGoogleEmbeddingDriver.py index a7cf719..a4856be 100644 --- a/nodes/drivers/gtUIGoogleEmbeddingDriver.py +++ b/nodes/drivers/gtUIGoogleEmbeddingDriver.py @@ -41,8 +41,6 @@ class gtUIGoogleEmbeddingDriver(gtUIBaseEmbeddingDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" - def create(self, **kwargs): model = kwargs.get("model", models[0]) api_key = self.getenv(kwargs.get("api_key_env_var", DEFAULT_API_KEY_ENV_VAR)) diff --git a/nodes/drivers/gtUIGooglePromptDriver.py b/nodes/drivers/gtUIGooglePromptDriver.py index 386cae9..6de4a10 100644 --- a/nodes/drivers/gtUIGooglePromptDriver.py +++ b/nodes/drivers/gtUIGooglePromptDriver.py @@ -34,8 +34,6 @@ class gtUIGooglePromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): api_key = self.getenv(kwargs.get("api_key_env_var", DEFAULT_API_KEY_ENV_VAR)) model = kwargs.get("model", None) diff --git a/nodes/drivers/gtUIHuggingFaceHubEmbeddingDriver.py b/nodes/drivers/gtUIHuggingFaceHubEmbeddingDriver.py index 17b8cd3..70acd2b 100644 --- a/nodes/drivers/gtUIHuggingFaceHubEmbeddingDriver.py +++ b/nodes/drivers/gtUIHuggingFaceHubEmbeddingDriver.py @@ -32,8 +32,6 @@ class gtUIHuggingFaceHubEmbeddingDriver(gtUIBaseEmbeddingDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" - def create(self, **kwargs): model = kwargs.get("model", default_model) api_key = self.getenv(kwargs.get("api_token_env_var", DEFAULT_API_KEY_ENV_VAR)) diff --git a/nodes/drivers/gtUIHuggingFaceHubPromptDriver.py b/nodes/drivers/gtUIHuggingFaceHubPromptDriver.py index 1049b9c..fc413e1 100644 --- a/nodes/drivers/gtUIHuggingFaceHubPromptDriver.py +++ b/nodes/drivers/gtUIHuggingFaceHubPromptDriver.py @@ -33,8 +33,6 @@ class gtUIHuggingFaceHubPromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): api_key = self.getenv(kwargs.get("api_token_env_var", DEFAULT_API_KEY_ENV_VAR)) model = kwargs.get("model", default_model) diff --git a/nodes/drivers/gtUILMStudioChatPromptDriver.py b/nodes/drivers/gtUILMStudioChatPromptDriver.py index b4185f6..1c1bac6 100644 --- a/nodes/drivers/gtUILMStudioChatPromptDriver.py +++ b/nodes/drivers/gtUILMStudioChatPromptDriver.py @@ -28,8 +28,6 @@ class gtUILMStudioChatPromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): model = kwargs.get("model", None) base_url = kwargs.get("base_url", default_base_url) diff --git a/nodes/drivers/gtUIOllamaPromptDriver.py b/nodes/drivers/gtUIOllamaPromptDriver.py index 180e1dd..4fd65e1 100644 --- a/nodes/drivers/gtUIOllamaPromptDriver.py +++ b/nodes/drivers/gtUIOllamaPromptDriver.py @@ -27,8 +27,6 @@ class gtUIOllamaPromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): model = kwargs.get("model", None) base_url = kwargs.get("base_url", default_base_url) diff --git a/nodes/drivers/gtUIOpenAiChatPromptDriver.py b/nodes/drivers/gtUIOpenAiChatPromptDriver.py index 571730b..64f1f61 100644 --- a/nodes/drivers/gtUIOpenAiChatPromptDriver.py +++ b/nodes/drivers/gtUIOpenAiChatPromptDriver.py @@ -27,8 +27,6 @@ class gtUIOpenAiChatPromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): api_key = self.getenv(kwargs.get("api_key_env_var", DEFAULT_API_KEY)) model = kwargs.get("model", None) diff --git a/nodes/drivers/gtUIOpenAiCompatibleChatPromptDriver.py b/nodes/drivers/gtUIOpenAiCompatibleChatPromptDriver.py index 3b77dd4..782d976 100644 --- a/nodes/drivers/gtUIOpenAiCompatibleChatPromptDriver.py +++ b/nodes/drivers/gtUIOpenAiCompatibleChatPromptDriver.py @@ -28,8 +28,6 @@ class gtUIOpenAiCompatibleChatPromptDriver(gtUIBasePromptDriver): FUNCTION = "create" - CATEGORY = "Griptape/Drivers/Prompt" - def create(self, **kwargs): model = kwargs.get("model", None) base_url = kwargs.get("base_url", default_base_url) diff --git a/nodes/drivers/gtUIOpenAiCompatibleEmbeddingDriver.py b/nodes/drivers/gtUIOpenAiCompatibleEmbeddingDriver.py index b17829e..677cc76 100644 --- a/nodes/drivers/gtUIOpenAiCompatibleEmbeddingDriver.py +++ b/nodes/drivers/gtUIOpenAiCompatibleEmbeddingDriver.py @@ -33,8 +33,6 @@ class gtUIOpenAiCompatibleEmbeddingDriver(gtUIBaseEmbeddingDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" - def create(self, **kwargs): model = kwargs.get("model", models[0]) base_url = kwargs.get("base_url", default_base_url) diff --git a/nodes/drivers/gtUIOpenAiEmbeddingDriver.py b/nodes/drivers/gtUIOpenAiEmbeddingDriver.py index 0221323..d2c3fa6 100644 --- a/nodes/drivers/gtUIOpenAiEmbeddingDriver.py +++ b/nodes/drivers/gtUIOpenAiEmbeddingDriver.py @@ -26,8 +26,6 @@ class gtUIOpenAiEmbeddingDriver(gtUIBaseEmbeddingDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" - def create(self, **kwargs): model = kwargs.get("model", models[0]) api_key = self.getenv(kwargs.get("api_key_env_var", DEFAULT_API_KEY)) diff --git a/nodes/drivers/gtUIVoyageAiEmbeddingDriver.py b/nodes/drivers/gtUIVoyageAiEmbeddingDriver.py index e7ad25b..d4a3c06 100644 --- a/nodes/drivers/gtUIVoyageAiEmbeddingDriver.py +++ b/nodes/drivers/gtUIVoyageAiEmbeddingDriver.py @@ -23,8 +23,6 @@ class gtUIVoyageAiEmbeddingDriver(gtUIBaseEmbeddingDriver): return inputs - CATEGORY = "Griptape/Drivers/Embedding" - def create(self, **kwargs): api_key_env_var = kwargs.get("api_key_env_var", DEFAULT_API_KEY_ENV_VAR) diff --git a/nodes/loaders/gtUIFetchImage.py b/nodes/loaders/gtUIFetchImage.py index d6ed0fd..7e4cba7 100644 --- a/nodes/loaders/gtUIFetchImage.py +++ b/nodes/loaders/gtUIFetchImage.py @@ -24,7 +24,7 @@ class gtUIFetchImage: RETURN_TYPES = ("IMAGE", "INT", "INT") # Image, Width, Height RETURN_NAMES = ("IMAGE", "WIDTH", "HEIGHT") FUNCTION = "FetchImage" - CATEGORY = "Griptape/Images" + CATEGORY = "Griptape/Image" @classmethod def INPUT_TYPES(cls): diff --git a/nodes/loaders/gtUILoadAudio.py b/nodes/loaders/gtUILoadAudio.py index 27ff9f8..6c4a932 100644 --- a/nodes/loaders/gtUILoadAudio.py +++ b/nodes/loaders/gtUILoadAudio.py @@ -1,9 +1,10 @@ import mimetypes import os -import folder_paths import torchaudio +import folder_paths + def is_audio_file(filepath): mime_type, _ = mimetypes.guess_type(filepath) diff --git a/nodes/tasks/gtUIBaseImageTask.py b/nodes/tasks/gtUIBaseImageTask.py index ad5424c..cf054a1 100644 --- a/nodes/tasks/gtUIBaseImageTask.py +++ b/nodes/tasks/gtUIBaseImageTask.py @@ -14,7 +14,7 @@ class gtUIBaseImageTask(gtUIBaseTask): ) return inputs - CATEGORY = "Griptape/Images" + CATEGORY = "Griptape/Image" def run(self, STRING, image, input_string=None, agent=None): output = "Output" diff --git a/nodes/tasks/gtUIBaseVectorStoreTask.py b/nodes/tasks/gtUIBaseVectorStoreTask.py index 9d3fc4d..2b22a17 100644 --- a/nodes/tasks/gtUIBaseVectorStoreTask.py +++ b/nodes/tasks/gtUIBaseVectorStoreTask.py @@ -37,7 +37,7 @@ class gtUIBaseVectorStoreTask: FUNCTION = "run" - CATEGORY = "Griptape/Vector Store" + CATEGORY = "Griptape/Text" def get_vector_store_driver(self, agent, driver): if driver: diff --git a/nodes/tasks/gtUIImageQueryTask.py b/nodes/tasks/gtUIImageQueryTask.py index 52358a0..9ce76eb 100644 --- a/nodes/tasks/gtUIImageQueryTask.py +++ b/nodes/tasks/gtUIImageQueryTask.py @@ -16,7 +16,6 @@ OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") class gtUIImageQueryTask(gtUIBaseImageTask): DESCRIPTION = "Query an image for a detailed description." - CATEGORY = "Griptape/Images" def run(self, **kwargs): STRING = kwargs.get("STRING") diff --git a/nodes/tasks/gtUIParallelImageQueryTask.py b/nodes/tasks/gtUIParallelImageQueryTask.py index 68e414f..b4e90ff 100644 --- a/nodes/tasks/gtUIParallelImageQueryTask.py +++ b/nodes/tasks/gtUIParallelImageQueryTask.py @@ -28,7 +28,6 @@ class gtUIParallelImageQueryTask(gtUIBaseImageTask): DESCRIPTION = ( "Query an image for multiple detailed descriptions. This runs in parallel." ) - CATEGORY = "Griptape/Images" def run(self, **kwargs): STRING = kwargs.get("STRING") diff --git a/nodes/tasks/gtUIPromptImageGenerationTask.py b/nodes/tasks/gtUIPromptImageGenerationTask.py index 9ae5c9b..824837c 100644 --- a/nodes/tasks/gtUIPromptImageGenerationTask.py +++ b/nodes/tasks/gtUIPromptImageGenerationTask.py @@ -1,6 +1,5 @@ import os -import folder_paths from griptape.drivers import ( DummyImageGenerationDriver, OpenAiImageGenerationDriver, @@ -13,6 +12,8 @@ from griptape.tasks import ( PromptImageGenerationTask, ) +import folder_paths + from ..agent.gtComfyAgent import gtComfyAgent as Agent from ..utilities import ( image_path_to_output, @@ -42,7 +43,7 @@ class gtUIPromptImageGenerationTask(gtUIBaseTask): "AGENT", "file_path", ) - CATEGORY = "Griptape/Images" + CATEGORY = "Griptape/Image" def run(self, **kwargs): STRING = kwargs.get("STRING") diff --git a/nodes/tasks/gtUIPromptTask.py b/nodes/tasks/gtUIPromptTask.py index 2f09931..76db6f1 100644 --- a/nodes/tasks/gtUIPromptTask.py +++ b/nodes/tasks/gtUIPromptTask.py @@ -1,4 +1,5 @@ from .gtUIBaseTask import gtUIBaseTask -class gtUIPromptTask(gtUIBaseTask): ... +class gtUIPromptTask(gtUIBaseTask): + CATEGORY = "Griptape/Agent" diff --git a/nodes/tasks/gtUITextSummaryTask.py b/nodes/tasks/gtUITextSummaryTask.py index a648c7d..10bdfc3 100644 --- a/nodes/tasks/gtUITextSummaryTask.py +++ b/nodes/tasks/gtUITextSummaryTask.py @@ -8,6 +8,7 @@ from .gtUIBaseTask import gtUIBaseTask class gtUITextSummaryTask(gtUIBaseTask): DESCRIPTION = "Summarize a text prompt." + CATEGORY = "Griptape/Agent" def run(self, **kwargs): STRING = kwargs.get("STRING") diff --git a/nodes/tasks/gtUIToolTask.py b/nodes/tasks/gtUIToolTask.py index 9124e31..c089ac1 100644 --- a/nodes/tasks/gtUIToolTask.py +++ b/nodes/tasks/gtUIToolTask.py @@ -9,6 +9,7 @@ from .gtUIBaseTask import gtUIBaseTask class gtUIToolTask(gtUIBaseTask): DESCRIPTION = "Run a tool on a text prompt." + CATEGORY = "Griptape/Agent" @classmethod def INPUT_TYPES(s): diff --git a/nodes/tasks/gtUIToolkitTask.py b/nodes/tasks/gtUIToolkitTask.py index dd6c1da..c9a9be2 100644 --- a/nodes/tasks/gtUIToolkitTask.py +++ b/nodes/tasks/gtUIToolkitTask.py @@ -8,6 +8,7 @@ from .gtUIBaseTask import gtUIBaseTask class gtUIToolkitTask(gtUIBaseTask): DESCRIPTION = "Provide a list of tools, and have the agent decide which of them to use utilizing Chain of Thought." + CATEGORY = "Griptape/Agent" @classmethod def INPUT_TYPES(cls): diff --git a/nodes/tasks/gtUIVectorStoreQueryTask.py b/nodes/tasks/gtUIVectorStoreQueryTask.py index a1920a1..67eda13 100644 --- a/nodes/tasks/gtUIVectorStoreQueryTask.py +++ b/nodes/tasks/gtUIVectorStoreQueryTask.py @@ -45,7 +45,7 @@ class gtUIVectorStoreQueryTask(gtUIBaseVectorStoreTask): FUNCTION = "run" - CATEGORY = "Griptape/Vector Store" + CATEGORY = "Griptape/Text" def run(self, **kwargs): STRING = kwargs.get("STRING", "") diff --git a/nodes/text/gtUIBaseSaveNode.py b/nodes/text/gtUIBaseSaveNode.py index 3c4635b..6ad4813 100644 --- a/nodes/text/gtUIBaseSaveNode.py +++ b/nodes/text/gtUIBaseSaveNode.py @@ -31,7 +31,7 @@ class gtUIBaseSaveNode: # INPUT_IS_LIST = True FUNCTION = "save" OUTPUT_NODE = True - CATEGORY = "Griptape/Text" + CATEGORY = "Griptape/Savers" RETURN_TYPES = () def create_output_path(self, path_filename): diff --git a/nodes/text/gtUISaveText.py b/nodes/text/gtUISaveText.py index 48a7a93..86a39b3 100644 --- a/nodes/text/gtUISaveText.py +++ b/nodes/text/gtUISaveText.py @@ -3,6 +3,7 @@ from .gtUIBaseSaveNode import gtUIBaseSaveNode class gtUISaveText(gtUIBaseSaveNode): DESCRIPTION = "Save text to a file." + CATEGORY = "Griptape/Text" @classmethod def INPUT_TYPES(s): diff --git a/nodes/tools/gtUIConvertAgentToTool.py b/nodes/tools/gtUIConvertAgentToTool.py index 0f36566..97bd87d 100644 --- a/nodes/tools/gtUIConvertAgentToTool.py +++ b/nodes/tools/gtUIConvertAgentToTool.py @@ -34,7 +34,7 @@ class gtUIConvertAgentToTool(gtUIBaseTool): FUNCTION = "run" OUTPUT_NODE = True - CATEGORY = "Griptape/Agent" + CATEGORY = "Griptape/Agent Tools" def safe_name(self, name): # Convert the name to a safe name. Name can't have any spaces or underscores