From c063a2eec87967f80f36ad5f59145371211b8953 Mon Sep 17 00:00:00 2001 From: Jason Schleifer Date: Tue, 5 Nov 2024 08:10:11 +1300 Subject: [PATCH 1/3] add context string to all BOOLEAN parameters --- .../config/depricated/gtUILMStudioStructureConfig.py | 9 ++++++++- nodes/config/gtUIBaseConfig.py | 9 ++++++++- nodes/drivers/gtUIBasePromptDriver.py | 8 ++++++-- nodes/drivers/gtUILMStudioChatPromptDriver.py | 7 ++++++- nodes/drivers/gtUILMStudioEmbeddingDriver.py | 2 ++ nodes/drivers/gtUILeonardoImageGenerationDriver.py | 7 ++++++- nodes/drivers/gtUILocalVectorStoreDriver.py | 2 ++ nodes/tools/gtUIAudioTranscriptionClient.py | 11 ++++++++++- nodes/tools/gtUIBaseTool.py | 11 ++++++++++- nodes/tools/gtUIFileManager.py | 11 ++++++++++- nodes/tools/gtUIKnowledgeBaseTool.py | 9 ++++++++- nodes/tools/gtUITextToSpeechClient.py | 11 ++++++++++- nodes/utils/gtUICreateAgentModelfile.py | 9 ++++++++- 13 files changed, 94 insertions(+), 12 deletions(-) diff --git a/nodes/config/depricated/gtUILMStudioStructureConfig.py b/nodes/config/depricated/gtUILMStudioStructureConfig.py index 94f330b..50d8344 100644 --- a/nodes/config/depricated/gtUILMStudioStructureConfig.py +++ b/nodes/config/depricated/gtUILMStudioStructureConfig.py @@ -37,7 +37,14 @@ def INPUT_TYPES(s): ) inputs["optional"].update( { - "use_native_tools": ("BOOLEAN", {"default": False}), + "use_native_tools": ( + "BOOLEAN", + { + "default": False, + "label_on": "True (LLM-native tool calling)", + "label_off": "False (Griptape tool calling)", + }, + ), } ) return inputs diff --git a/nodes/config/gtUIBaseConfig.py b/nodes/config/gtUIBaseConfig.py index c2f0739..066c4b6 100644 --- a/nodes/config/gtUIBaseConfig.py +++ b/nodes/config/gtUIBaseConfig.py @@ -49,7 +49,14 @@ def INPUT_TYPES(s): ), # "stream": ([True, False], {"default": False}), "env": ("ENV", {"default": None}), - "use_native_tools": ("BOOLEAN", {"default": True}), + "use_native_tools": ( + "BOOLEAN", + { + "default": True, + "label_on": "True (LLM-native tool calling)", + "label_off": "False (Griptape tool calling)", + }, + ), "max_tokens": ( "INT", { diff --git a/nodes/drivers/gtUIBasePromptDriver.py b/nodes/drivers/gtUIBasePromptDriver.py index 0def507..86a566e 100644 --- a/nodes/drivers/gtUIBasePromptDriver.py +++ b/nodes/drivers/gtUIBasePromptDriver.py @@ -11,7 +11,6 @@ def INPUT_TYPES(s): inputs["optional"].update( { "model": ("STRING", {"tooltip": "The prompt model to use"}), - # "stream": ("BOOLEAN", {"default": False, "tooltip": "Enable or disable streaming"}), "max_attempts_on_fail": ( "INT", { @@ -40,7 +39,12 @@ def INPUT_TYPES(s): ), "use_native_tools": ( "BOOLEAN", - {"default": True, "tooltip": "Use native tools for the LLM."}, + { + "default": True, + "tooltip": "Use native tools for the LLM.", + "label_on": "True (LLM-native tool calling)", + "label_off": "False (Griptape tool calling)", + }, ), "max_tokens": ( "INT", diff --git a/nodes/drivers/gtUILMStudioChatPromptDriver.py b/nodes/drivers/gtUILMStudioChatPromptDriver.py index 9eafe0e..b229b39 100644 --- a/nodes/drivers/gtUILMStudioChatPromptDriver.py +++ b/nodes/drivers/gtUILMStudioChatPromptDriver.py @@ -34,7 +34,12 @@ def INPUT_TYPES(s): ), "use_native_tools": ( "BOOLEAN", - {"default": False, "tooltip": "Whether to use native tools."}, + { + "default": False, + "tooltip": "Whether to use native tools.", + "label_on": "True (LLM-native tool calling)", + "label_off": "False (Griptape tool calling)", + }, ), "api_key": ( "STRING", diff --git a/nodes/drivers/gtUILMStudioEmbeddingDriver.py b/nodes/drivers/gtUILMStudioEmbeddingDriver.py index d9cfaa3..3f41204 100644 --- a/nodes/drivers/gtUILMStudioEmbeddingDriver.py +++ b/nodes/drivers/gtUILMStudioEmbeddingDriver.py @@ -39,6 +39,8 @@ def INPUT_TYPES(s): { "default": False, "tooltip": "Enable or disable the use of native tools.", + "label_on": "True (LLM-native tool calling)", + "label_off": "False (Griptape tool calling)", }, ), "api_key": ( diff --git a/nodes/drivers/gtUILeonardoImageGenerationDriver.py b/nodes/drivers/gtUILeonardoImageGenerationDriver.py index 208b456..663176e 100644 --- a/nodes/drivers/gtUILeonardoImageGenerationDriver.py +++ b/nodes/drivers/gtUILeonardoImageGenerationDriver.py @@ -87,7 +87,12 @@ def INPUT_TYPES(s): ), "use_custom_model": ( "BOOLEAN", - {"default": False, "tooltip": "Enable to use a custom model ID."}, + { + "default": False, + "tooltip": "Enable to use a custom model ID.", + "label_on": "True (Use Custom Model ID)", + "label_off": "False (Choose from model list)", + }, ), "custom_model": ( "STRING", diff --git a/nodes/drivers/gtUILocalVectorStoreDriver.py b/nodes/drivers/gtUILocalVectorStoreDriver.py index aec1eed..bd1cbdb 100644 --- a/nodes/drivers/gtUILocalVectorStoreDriver.py +++ b/nodes/drivers/gtUILocalVectorStoreDriver.py @@ -21,6 +21,8 @@ def INPUT_TYPES(s): { "default": False, "tooltip": "Enable or disable persistence to a file.", + "label_on": "True (Save data to file)", + "label_off": "False (Keep data in memory)", }, ), "persist_filename": ( diff --git a/nodes/tools/gtUIAudioTranscriptionClient.py b/nodes/tools/gtUIAudioTranscriptionClient.py index 5a46e0d..e7e17fe 100644 --- a/nodes/tools/gtUIAudioTranscriptionClient.py +++ b/nodes/tools/gtUIAudioTranscriptionClient.py @@ -15,7 +15,16 @@ class gtUIAudioTranscriptionClient(gtUIBaseTool): @classmethod def INPUT_TYPES(s): return { - "required": {"off_prompt": ("BOOLEAN", {"default": True})}, + "required": { + "off_prompt": ( + "BOOLEAN", + { + "default": True, + "label_on": "True (Keep output private)", + "label_off": "False (Provide output to LLM)", + }, + ) + }, "optional": {"driver": ("DRIVER", {"default": None})}, } diff --git a/nodes/tools/gtUIBaseTool.py b/nodes/tools/gtUIBaseTool.py index 3aab004..db4224b 100644 --- a/nodes/tools/gtUIBaseTool.py +++ b/nodes/tools/gtUIBaseTool.py @@ -12,7 +12,16 @@ def __init__(self): @classmethod def INPUT_TYPES(s): return { - "required": {"off_prompt": ("BOOLEAN", {"default": False})}, + "required": { + "off_prompt": ( + "BOOLEAN", + { + "default": False, + "label_on": "True (Keep output private)", + "label_off": "False (Provide output to LLM)", + }, + ) + }, "optional": {}, "hidden": {}, } diff --git a/nodes/tools/gtUIFileManager.py b/nodes/tools/gtUIFileManager.py index e1e6834..3332292 100644 --- a/nodes/tools/gtUIFileManager.py +++ b/nodes/tools/gtUIFileManager.py @@ -15,7 +15,16 @@ class gtUIFileManager(gtUIBaseTool): @classmethod def INPUT_TYPES(s): return { - "required": {"off_prompt": ("BOOLEAN", {"default": True})}, + "required": { + "off_prompt": ( + "BOOLEAN", + { + "default": True, + "label_on": "True (Keep output private)", + "label_off": "False (Provide output to LLM)", + }, + ) + }, } def create(self, off_prompt, workdir=""): diff --git a/nodes/tools/gtUIKnowledgeBaseTool.py b/nodes/tools/gtUIKnowledgeBaseTool.py index 0e76c34..16168de 100644 --- a/nodes/tools/gtUIKnowledgeBaseTool.py +++ b/nodes/tools/gtUIKnowledgeBaseTool.py @@ -19,7 +19,14 @@ class gtUIKnowledgeBaseTool(gtUIBaseTool): def INPUT_TYPES(s): return { "required": { - "off_prompt": ("BOOLEAN", {"default": False}), + "off_prompt": ( + "BOOLEAN", + { + "default": False, + "label_on": "True (Keep output private)", + "label_off": "False (Provide output to LLM)", + }, + ), "api_key_environment_variable": ( "STRING", {"default": "GRIPTAPE_CLOUD_API_KEY"}, diff --git a/nodes/tools/gtUITextToSpeechClient.py b/nodes/tools/gtUITextToSpeechClient.py index 1b89727..f6b76eb 100644 --- a/nodes/tools/gtUITextToSpeechClient.py +++ b/nodes/tools/gtUITextToSpeechClient.py @@ -20,7 +20,16 @@ def INPUT_TYPES(s): # return inputs return { - "required": {"off_prompt": ("BOOLEAN", {"default": True})}, + "required": { + "off_prompt": ( + "BOOLEAN", + { + "default": True, + "label_on": "True (Keep output private)", + "label_off": "False (Provide output to LLM)", + }, + ) + }, "optional": {"driver": ("TEXT_TO_SPEECH_DRIVER", {"default": None})}, } diff --git a/nodes/utils/gtUICreateAgentModelfile.py b/nodes/utils/gtUICreateAgentModelfile.py index 6971126..74bbe52 100644 --- a/nodes/utils/gtUICreateAgentModelfile.py +++ b/nodes/utils/gtUICreateAgentModelfile.py @@ -28,7 +28,14 @@ def INPUT_TYPES(s): "base_model": ((), {}), "agent": ("AGENT", {}), "include_conversation_memory": ("BOOLEAN", {"default": True}), - "include_rulesets": ("BOOLEAN", {"default": True}), + "include_rulesets": ( + "BOOLEAN", + { + "default": True, + "label_on": "True (Use default rulesets)", + "label_off": "False (Create your own rulesets)", + }, + ), } } return inputs From 5566ebc40c58b002705e92d4b3d34f0610b442a5 Mon Sep 17 00:00:00 2001 From: Jason Schleifer Date: Tue, 5 Nov 2024 08:13:14 +1300 Subject: [PATCH 2/3] update readme with example of boolean parameter --- README.md | 3 +++ docs/images/off_prompt_parameter.png | Bin 0 -> 31479 bytes 2 files changed, 3 insertions(+) create mode 100644 docs/images/off_prompt_parameter.png diff --git a/README.md b/README.md index bc14b8f..f2e29a3 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,9 @@ You can previous and download more examples [here](examples/README.md). ### Nov 5, 2024 * Fixed bug where urls were dropping any text after the `:`. Example: "What is https://griptape.ai" was being converted to "What is https:". This is due to the `dynamicprompt` functionality of ComfyUI, so I've disabled that. +* Added context string to all BOOLEAN parameters to give the user a better idea as to what the particular boolean option does. For example, intead of just `True` or `False`, the tools now explain `off_prompt`. + + ![WebsScraper tool with off_prompt](docs/images/off_prompt_parameter.png) ### Nov 4, 2024 * Fixed bug where OPENAI_API_KEY was still required, and was causing some install issues. diff --git a/docs/images/off_prompt_parameter.png b/docs/images/off_prompt_parameter.png new file mode 100644 index 0000000000000000000000000000000000000000..3569d4bfb0f59f5d80ee4e4a8e72b98a372670c0 GIT binary patch literal 31479 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 Date: Wed, 6 Nov 2024 05:37:02 +1300 Subject: [PATCH 3/3] update to griptape v0.34.1 --- README.md | 4 +++- js/versions.js | 9 ++++++++- pyproject.toml | 8 ++++---- requirements.txt | 2 +- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f2e29a3..aee8881 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,9 @@ You can previous and download more examples [here](examples/README.md). ## Recent Changelog -### Nov 5, 2024 +### Nov 6, 2024 +* Upgrade to Griptape Framework v0.34.1 + * Fix to `WebScraperTool` provides better results when using `off_prompt`. * Fixed bug where urls were dropping any text after the `:`. Example: "What is https://griptape.ai" was being converted to "What is https:". This is due to the `dynamicprompt` functionality of ComfyUI, so I've disabled that. * Added context string to all BOOLEAN parameters to give the user a better idea as to what the particular boolean option does. For example, intead of just `True` or `False`, the tools now explain `off_prompt`. diff --git a/js/versions.js b/js/versions.js index 731a631..e6f4edd 100644 --- a/js/versions.js +++ b/js/versions.js @@ -1,11 +1,18 @@ export const versions = { - "version": "0.34.0g", + "version": "0.34.1", "releaseDate": "2024-11-5", "name": "ComfyUI-Griptape", "description": "Griptape integration for ComfyUI", "author": "Jason Schleifer", "repository": "https://github.com/griptape-ai/ComfyUI-Griptape", "changelog": [ + { + "version": "0.34.1", + "date": "2024-11-6", + "changes": [ + "Fixed issue with `dynamicprompt` inputs", + ] + }, { "version": "0.34.0g", "date": "2024-11-5", diff --git a/pyproject.toml b/pyproject.toml index 3559432..0bc8c2e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "comfyui-griptape" -version = "1.0.18" +version = "1.0.19" description = "Griptape LLM(Large Language Model) Nodes for ComfyUI." authors = ["Jason Schleifer "] readme = "README.md" @@ -8,7 +8,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.11" python-dotenv = "^1.0.1" -griptape = { version = "^0.34.0", extras = ["all"]} +griptape = { version = "^0.34.1", extras = ["all"]} [tool.poetry.group.dev.dependencies] icecream = "^2.1.3" @@ -26,9 +26,9 @@ priority = "explicit" [project] name = "comfyui-griptape" description = "Griptape LLM(Large Language Model) Nodes for ComfyUI." -version = "1.0.18" +version = "1.0.19" license = {file = "LICENSE"} -dependencies = ["griptape[all]==0.34.0", "python-dotenv"] +dependencies = ["griptape[all]==0.34.1", "python-dotenv"] [project.urls] Repository = "https://github.com/griptape-ai/ComfyUI-Griptape" diff --git a/requirements.txt b/requirements.txt index a170adb..b3021f7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -griptape[all]==0.34.0 +griptape[all]==0.34.1 python-dotenv