From bfdd3826dfc82bf284cbade560b829e16d40a09b Mon Sep 17 00:00:00 2001 From: Jason Schleifer Date: Thu, 5 Sep 2024 09:09:32 +1200 Subject: [PATCH] added Depricated configs --- __init__.py | 81 ++++++++---- js/ColorNodes.js | 8 +- js/ConfigurationNodes.js | 6 +- js/DisplayNodes.js | 4 +- js/ExtractionNodes.js | 6 +- js/gtUIMenuSeparator.js | 2 +- js/nodeFixes.js | 11 +- js/utils.js | 2 +- nodes/config/depricated/__init__.py | 0 .../gtUIAmazonBedrockStructureConfig.py | 84 +++++++++++++ .../gtUIAnthropicStructureConfig.py | 69 +++++++++++ .../gtUIAzureOpenAiStructureConfig.py | 103 +++++++++++++++ .../depricated/gtUIGoogleStructureConfig.py | 75 +++++++++++ .../gtUIHuggingFaceStructureConfig.py | 60 +++++++++ .../depricated/gtUILMStudioStructureConfig.py | 65 ++++++++++ .../depricated/gtUIOllamaStructureConfig.py | 54 ++++++++ .../gtUIOpenAiCompatibleConfig.py | 3 +- .../depricated/gtUIOpenAiStructureConfig.py | 68 ++++++++++ ...g.py => gtUIAmazonBedrockDriversConfig.py} | 8 +- ...onfig.py => gtUIAnthropicDriversConfig.py} | 8 +- ...fig.py => gtUIAzureOpenAiDriversConfig.py} | 8 +- nodes/config/gtUIBaseConfig.py | 33 +++-- nodes/config/gtUIBaseDriversConfig.py | 57 +++++++++ ...reConfig.py => gtUICohereDriversConfig.py} | 8 +- ...reConfig.py => gtUIGoogleDriversConfig.py} | 8 +- ...fig.py => gtUIHuggingFaceDriversConfig.py} | 8 +- ...Config.py => gtUILMStudioDriversConfig.py} | 8 +- ...reConfig.py => gtUIOllamaDriversConfig.py} | 8 +- .../gtUIOpenAiCompatibleDriversConfig.py | 117 ++++++++++++++++++ ...reConfig.py => gtUIOpenAiDriversConfig.py} | 10 +- .../gtUIOpenAiCompatibleChatPromptDriver.py | 13 +- ...UIOpenAiCompatibleImageGenerationDriver.py | 45 +++++++ 32 files changed, 973 insertions(+), 67 deletions(-) create mode 100644 nodes/config/depricated/__init__.py create mode 100644 nodes/config/depricated/gtUIAmazonBedrockStructureConfig.py create mode 100644 nodes/config/depricated/gtUIAnthropicStructureConfig.py create mode 100644 nodes/config/depricated/gtUIAzureOpenAiStructureConfig.py create mode 100644 nodes/config/depricated/gtUIGoogleStructureConfig.py create mode 100644 nodes/config/depricated/gtUIHuggingFaceStructureConfig.py create mode 100644 nodes/config/depricated/gtUILMStudioStructureConfig.py create mode 100644 nodes/config/depricated/gtUIOllamaStructureConfig.py rename nodes/config/{ => depricated}/gtUIOpenAiCompatibleConfig.py (97%) create mode 100644 nodes/config/depricated/gtUIOpenAiStructureConfig.py rename nodes/config/{gtUIAmazonBedrockStructureConfig.py => gtUIAmazonBedrockDriversConfig.py} (95%) rename nodes/config/{gtUIAnthropicStructureConfig.py => gtUIAnthropicDriversConfig.py} (93%) rename nodes/config/{gtUIAzureOpenAiStructureConfig.py => gtUIAzureOpenAiDriversConfig.py} (94%) create mode 100644 nodes/config/gtUIBaseDriversConfig.py rename nodes/config/{gtUICohereStructureConfig.py => gtUICohereDriversConfig.py} (92%) rename nodes/config/{gtUIGoogleStructureConfig.py => gtUIGoogleDriversConfig.py} (92%) rename nodes/config/{gtUIHuggingFaceStructureConfig.py => gtUIHuggingFaceDriversConfig.py} (92%) rename nodes/config/{gtUILMStudioStructureConfig.py => gtUILMStudioDriversConfig.py} (92%) rename nodes/config/{gtUIOllamaStructureConfig.py => gtUIOllamaDriversConfig.py} (92%) create mode 100644 nodes/config/gtUIOpenAiCompatibleDriversConfig.py rename nodes/config/{gtUIOpenAiStructureConfig.py => gtUIOpenAiDriversConfig.py} (92%) create mode 100644 nodes/drivers/gtUIOpenAiCompatibleImageGenerationDriver.py diff --git a/__init__.py b/__init__.py index 808ccf2..1fcf4f9 100644 --- a/__init__.py +++ b/__init__.py @@ -24,22 +24,45 @@ from .nodes.combine.gtUIMergeInputs import gtUIMergeInputs from .nodes.combine.MergeTexts import MergeTexts from .nodes.combine.RulesList import RulesList from .nodes.combine.ToolList import ToolList -from .nodes.config.gtUIAmazonBedrockSession import gtUIAmazonBedrockSession # CONFIG -from .nodes.config.gtUIAmazonBedrockStructureConfig import ( +from .nodes.config.depricated.gtUIAmazonBedrockStructureConfig import ( gtUIAmazonBedrockStructureConfig, ) -from .nodes.config.gtUIAnthropicStructureConfig import gtUIAnthropicStructureConfig -from .nodes.config.gtUIAzureOpenAiStructureConfig import gtUIAzureOpenAiStructureConfig -from .nodes.config.gtUICohereStructureConfig import gtUICohereStructureConfig + +# CONFIG - DEPRECIATED +from .nodes.config.depricated.gtUIAnthropicStructureConfig import ( + gtUIAnthropicStructureConfig, +) +from .nodes.config.depricated.gtUIAzureOpenAiStructureConfig import ( + gtUIAzureOpenAiStructureConfig, +) +from .nodes.config.depricated.gtUIGoogleStructureConfig import gtUIGoogleStructureConfig +from .nodes.config.depricated.gtUIHuggingFaceStructureConfig import ( + gtUIHuggingFaceStructureConfig, +) +from .nodes.config.depricated.gtUILMStudioStructureConfig import ( + gtUILMStudioStructureConfig, +) +from .nodes.config.depricated.gtUIOllamaStructureConfig import gtUIOllamaStructureConfig +from .nodes.config.depricated.gtUIOpenAiCompatibleConfig import ( + gtUIOpenAiCompatibleConfig, +) +from .nodes.config.depricated.gtUIOpenAiStructureConfig import gtUIOpenAiStructureConfig +from .nodes.config.gtUIAmazonBedrockDriversConfig import gtUIAmazonBedrockDriversConfig +from .nodes.config.gtUIAmazonBedrockSession import gtUIAmazonBedrockSession +from .nodes.config.gtUIAnthropicDriversConfig import gtUIAnthropicDriversConfig +from .nodes.config.gtUIAzureOpenAiDriversConfig import gtUIAzureOpenAiDriversConfig +from .nodes.config.gtUICohereDriversConfig import gtUICohereDriversConfig from .nodes.config.gtUIEnvConfig import gtUIEnvConfig -from .nodes.config.gtUIGoogleStructureConfig import gtUIGoogleStructureConfig -from .nodes.config.gtUIHuggingFaceStructureConfig import gtUIHuggingFaceStructureConfig -from .nodes.config.gtUILMStudioStructureConfig import gtUILMStudioStructureConfig -from .nodes.config.gtUIOllamaStructureConfig import gtUIOllamaStructureConfig -from .nodes.config.gtUIOpenAiCompatibleConfig import gtUIOpenAiCompatibleConfig -from .nodes.config.gtUIOpenAiStructureConfig import gtUIOpenAiStructureConfig +from .nodes.config.gtUIGoogleDriversConfig import gtUIGoogleDriversConfig +from .nodes.config.gtUIHuggingFaceDriversConfig import gtUIHuggingFaceDriversConfig +from .nodes.config.gtUILMStudioDriversConfig import gtUILMStudioDriversConfig +from .nodes.config.gtUIOllamaDriversConfig import gtUIOllamaDriversConfig +from .nodes.config.gtUIOpenAiCompatibleDriversConfig import ( + gtUIOpenAiCompatibleDriversConfig, +) +from .nodes.config.gtUIOpenAiDriversConfig import gtUIOpenAiDriversConfig from .nodes.config.gtUIStructureConfig import gtUIStructureConfig # CONVERT @@ -160,6 +183,9 @@ from .nodes.drivers.gtUIOpenAiCompatibleChatPromptDriver import ( from .nodes.drivers.gtUIOpenAiCompatibleEmbeddingDriver import ( gtUIOpenAiCompatibleEmbeddingDriver, ) +from .nodes.drivers.gtUIOpenAiCompatibleImageGenerationDriver import ( + gtUIOpenAiCompatibleImageGenerationDriver, +) from .nodes.drivers.gtUIOpenAiEmbeddingDriver import gtUIOpenAiEmbeddingDriver from .nodes.drivers.gtUIOpenAiImageGenerationDriver import ( gtUIOpenAiImageGenerationDriver, @@ -276,18 +302,26 @@ NODE_CLASS_MAPPINGS = { "Griptape Agent Config: Custom Structure": gtUIStructureConfig, "Griptape Agent Config: Environment Variables": gtUIEnvConfig, "Griptape Agent Config: Expand": gtUIExpandConfig, - # "Griptape Agent Config: Amazon Bedrock Session": gtUIAmazonBedrockSession, - "Griptape Agent Config: Amazon Bedrock": gtUIAmazonBedrockStructureConfig, - "Griptape Agent Config: Anthropic": gtUIAnthropicStructureConfig, - # Unable to test AzureOpenAI config at the moment - so disabling for now - "Griptape Agent Config: Azure OpenAI": gtUIAzureOpenAiStructureConfig, - "Griptape Agent Config: Cohere": gtUICohereStructureConfig, - "Griptape Agent Config: Google": gtUIGoogleStructureConfig, - "Griptape Agent Config: HuggingFace": gtUIHuggingFaceStructureConfig, - "Griptape Agent Config: LM Studio": gtUILMStudioStructureConfig, - "Griptape Agent Config: Ollama": gtUIOllamaStructureConfig, - "Griptape Agent Config: OpenAI": gtUIOpenAiStructureConfig, - "Griptape Agent Config: OpenAI Compatible": gtUIOpenAiCompatibleConfig, + "Griptape Agent Config: Amazon Bedrock Drivers": gtUIAmazonBedrockDriversConfig, + "Griptape Agent Config: Anthropic Drivers": gtUIAnthropicDriversConfig, + "Griptape Agent Config: Azure OpenAI Drivers": gtUIAzureOpenAiDriversConfig, + "Griptape Agent Config: Cohere Drivers": gtUICohereDriversConfig, + "Griptape Agent Config: Google Drivers": gtUIGoogleDriversConfig, + "Griptape Agent Config: HuggingFace Drivers": gtUIHuggingFaceDriversConfig, + "Griptape Agent Config: LM Studio Drivers": gtUILMStudioDriversConfig, + "Griptape Agent Config: Ollama Drivers": gtUIOllamaDriversConfig, + "Griptape Agent Config: OpenAI Drivers": gtUIOpenAiDriversConfig, + "Griptape Agent Config: OpenAI Compatible Drivers": gtUIOpenAiCompatibleDriversConfig, + # DEPRECIATED + "Griptape Agent Config: Amazon Bedrock [DEPRECIATED]": gtUIAmazonBedrockStructureConfig, + "Griptape Agent Config: Anthropic [DEPRECIATED]": gtUIAnthropicStructureConfig, + "Griptape Agent Config: Azure OpenAI [DEPRECIATED]": gtUIAzureOpenAiStructureConfig, + "Griptape Agent Config: Google [DEPRECIATED]": gtUIGoogleStructureConfig, + "Griptape Agent Config: HuggingFace [DEPRECIATED]": gtUIHuggingFaceStructureConfig, + "Griptape Agent Config: LM Studio [DEPRECIATED]": gtUILMStudioStructureConfig, + "Griptape Agent Config: Ollama [DEPRECIATED]": gtUIOllamaStructureConfig, + "Griptape Agent Config: OpenAI [DEPRECIATED]": gtUIOpenAiStructureConfig, + "Griptape Agent Config: OpenAI Compatible [DEPRECIATED]": gtUIOpenAiCompatibleConfig, # PROMPT DRIVER "Griptape Prompt Driver: Amazon Bedrock": gtUIAmazonBedrockPromptDriver, "Griptape Prompt Driver: Amazon SageMaker Jumpstart": gtUIAmazonSageMakerJumpstartPromptDriver, @@ -306,6 +340,7 @@ NODE_CLASS_MAPPINGS = { "Griptape Driver: Azure OpenAI Image Generation": gtUIAzureOpenAiImageGenerationDriver, "Griptape Driver: Leonardo.AI": gtUILeonardoImageGenerationDriver, "Griptape Driver: OpenAI Image Generation": gtUIOpenAiImageGenerationDriver, + "Griptape Driver: OpenAI Compatible Image Generation": gtUIOpenAiCompatibleImageGenerationDriver, # EMBEDDING DRIVER "Griptape Embedding Driver: Amazon Bedrock Titan": gtUIAmazonBedrockTitanEmbeddingDriver, "Griptape Embedding Driver: Amazon SageMaker Jumpstart": gtUIAmazonSageMakerJumpstartEmbeddingDriver, diff --git a/js/ColorNodes.js b/js/ColorNodes.js index 4769422..69687a9 100644 --- a/js/ColorNodes.js +++ b/js/ColorNodes.js @@ -8,7 +8,6 @@ function applyColor(node, color) { } export function setupNodeColors(nodeType, nodeData) { const setColor = getStorageValue("Comfy.Griptape.ColorNodes", true); - // console.log(setColor); if (setColor) { if (nodeData.name.includes("Griptape")) { const onNodeCreated = nodeType.prototype.onNodeCreated; @@ -63,7 +62,12 @@ export function setupNodeColors(nodeType, nodeData) { nodeData.name.includes("Griptape Vector Store: Query")){ applyColor(this, nodeColors.red); } - + + if (nodeData.name.includes("[DEPRECIATED]")){ + applyColor(this, nodeColors.yellow) + + } + const size = this.size; this.onResize?.(this.size); this?.graph?.setDirtyCanvas(true, true); diff --git a/js/ConfigurationNodes.js b/js/ConfigurationNodes.js index 7c7aaa1..0be7987 100644 --- a/js/ConfigurationNodes.js +++ b/js/ConfigurationNodes.js @@ -101,13 +101,15 @@ export function setupConfigurationNodes(nodeType, nodeData, app) { } } setFixedRandomization(this); + this.onResize?.(this.size); + this?.graph?.setDirtyCanvas(true, true); + }; } } - - + function setFixedRandomization(node) { if(node.widgets) { const controlWidget = node.widgets.find((w) => w.name === "control_after_generate"); diff --git a/js/DisplayNodes.js b/js/DisplayNodes.js index e19a37c..40cbd10 100644 --- a/js/DisplayNodes.js +++ b/js/DisplayNodes.js @@ -36,8 +36,8 @@ export function setupDisplayNodes(nodeType, nodeData, app) { this.size[1] = Math.max(this.size[1], new_val.split("\n").length * 20 + 40); } } - this.setDirtyCanvas(true, true); this.onResize?.(this.size); + this.setDirtyCanvas(true, true); }; } @@ -46,7 +46,7 @@ export function setupDisplayNodes(nodeType, nodeData, app) { this.message = ComfyWidgets.STRING(this, 'Output Text', ['STRING', { multiline: true }], app).widget; this.message.value = ""; setupMessageStyle(this.message); - fitHeight(this, true); + fitHeight(this); }; nodeType.prototype.onExecuted = function(message) { diff --git a/js/ExtractionNodes.js b/js/ExtractionNodes.js index 94d7221..ef9bcc3 100644 --- a/js/ExtractionNodes.js +++ b/js/ExtractionNodes.js @@ -25,14 +25,14 @@ export function setupExtractionNodes(nodeType, nodeData, app) { switch (widget_extraction_type.value) { case "csv": showWidget(widget_column_names); - // fitHeight(this, true); + fitHeight(this, true); break; case "json": showWidget(widget_template_schema); - // fitHeight(this, true); + fitHeight(this, true); break; default: - // fitHeight(this, true); + fitHeight(this, true); break; } } diff --git a/js/gtUIMenuSeparator.js b/js/gtUIMenuSeparator.js index 4550b44..7d0786a 100644 --- a/js/gtUIMenuSeparator.js +++ b/js/gtUIMenuSeparator.js @@ -9,7 +9,7 @@ const sep_above_items = [ "Griptape Expand: Agent Nodes", "Griptape Convert: Agent to Tool", // Sub Menu Item - Agent Configs - "Griptape Agent Config: Amazon Bedrock", + "Griptape Agent Config: Amazon Bedrock Drivers", // Sub Menu Item - Agent Tools "Griptape Tool: Audio Transcription", "Griptape Tool: Extraction", diff --git a/js/nodeFixes.js b/js/nodeFixes.js index 5ffe4b1..231cd07 100644 --- a/js/nodeFixes.js +++ b/js/nodeFixes.js @@ -59,5 +59,14 @@ export const nodeFixes = { "Griptape Driver: Qdrant Vector Store": "Griptape Vector Store Driver: Qdrant", "Griptape Driver: DuckDuckGo WebSearch": "Griptape WebSearch Driver: DuckDuckGo", "Griptape Driver: Google WebSearch": "Griptape WebSearch Driver: Google", - } + "Griptape Agent Config: Amazon Bedrock": "Griptape Agent Config: Amazon Bedrock [DEPRECIATED]", + "Griptape Agent Config: Anthropic": "Griptape Agent Config: Anthropic [DEPRECIATED]", + "Griptape Agent Config: Azure OpenAI": "Griptape Agent Config: Azure OpenAI [DEPRECIATED]", + "Griptape Agent Config: Google": "Griptape Agent Config: Google [DEPRECIATED]", + "Griptape Agent Config: HuggingFace": "Griptape Agent Config: HuggingFace [DEPRECIATED]", + "Griptape Agent Config: LM Studio": "Griptape Agent Config: LM Studio [DEPRECIATED]", + "Griptape Agent Config: Ollama": "Griptape Agent Config: Ollama [DEPRECIATED]", + "Griptape Agent Config: OpenAI Compatible": "Griptape Agent Config: OpenAI Compatible [DEPRECIATED]", + "Griptape Agent Config: OpenAI": "Griptape Agent Config: OpenAI [DEPRECIATED]", + } } \ No newline at end of file diff --git a/js/utils.js b/js/utils.js index b861dac..d0ea593 100644 --- a/js/utils.js +++ b/js/utils.js @@ -1,6 +1,6 @@ export function fitHeight(node) { node.onResize?.(node.size); - node.setSize([node.size[0], node.computeSize([node.size[0], node.size[1]])[1]]) + node.setSize([node.size[0], node.computeSize([node.size[0], node.size[1]])[1]+10]) node?.graph?.setDirtyCanvas(true, true); } diff --git a/nodes/config/depricated/__init__.py b/nodes/config/depricated/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nodes/config/depricated/gtUIAmazonBedrockStructureConfig.py b/nodes/config/depricated/gtUIAmazonBedrockStructureConfig.py new file mode 100644 index 0000000..f2a0e5f --- /dev/null +++ b/nodes/config/depricated/gtUIAmazonBedrockStructureConfig.py @@ -0,0 +1,84 @@ +from griptape.configs.drivers import ( + AmazonBedrockDriversConfig, +) + +# StructureGlobalDriversConfig, +from griptape.drivers import ( + AmazonBedrockPromptDriver, +) + +from ..gtUIBaseConfig import gtUIBaseConfig + +amazonBedrockPromptModels = [ + "anthropic.claude-3-5-sonnet-20240620-v1:0", + "anthropic.claude-3-opus-20240229-v1:0", + "anthropic.claude-3-sonnet-20240229-v1:0", + "anthropic.claude-3-haiku-20240307-v1:0", + "amazon.titan-text-premier-v1:0", + "amazon.titan-text-express-v1", + "amazon.titan-text-lite-v1", +] +amazonBedrockImageGenerationModels = [] + +DEFAULT_AWS_ACCESS_KEY_ID = "AWS_ACCESS_KEY_ID" +DEFAULT_AWS_SECRET_ACCESS_KEY = "AWS_SECRET_ACCESS_KEY" +DEFAULT_AWS_DEFAULT_REGION = "AWS_DEFAULT_REGION" + + +class gtUIAmazonBedrockStructureConfig(gtUIBaseConfig): + """ + The Griptape Amazon Bedrock Structure Config + """ + + DESCRIPTION = "Amazon Bedrock Prompt Driver." + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + inputs["required"].update( + { + "prompt_model": ( + amazonBedrockPromptModels, + {"default": amazonBedrockPromptModels[0]}, + ), + }, + ) + inputs["optional"].update( + { + "aws_access_key_id_env_var": ( + "STRING", + {"default": DEFAULT_AWS_ACCESS_KEY_ID}, + ), + "aws_secret_access_key_env_var": ( + "STRING", + {"default": DEFAULT_AWS_SECRET_ACCESS_KEY}, + ), + "aws_default_region_env_var": ( + "STRING", + {"default": DEFAULT_AWS_DEFAULT_REGION}, + ), + } + ) + return inputs + + def create( + self, + **kwargs, + ): + params = {} + + prompt_model = kwargs.get("prompt_model", amazonBedrockPromptModels[0]) + temperature = kwargs.get("temperature", 0.7) + max_attempts = kwargs.get("max_attempts_on_fail", 10) + use_native_tools = kwargs.get("use_native_tools", False) + max_tokens = kwargs.get("max_tokens", None) + params["model"] = prompt_model + params["temperature"] = temperature + params["max_attempts"] = max_attempts + params["use_native_tools"] = use_native_tools + if max_tokens > 0: + params["max_tokens"] = max_tokens + custom_config = AmazonBedrockDriversConfig( + prompt_driver=AmazonBedrockPromptDriver(**params) + ) + return (custom_config,) diff --git a/nodes/config/depricated/gtUIAnthropicStructureConfig.py b/nodes/config/depricated/gtUIAnthropicStructureConfig.py new file mode 100644 index 0000000..5037555 --- /dev/null +++ b/nodes/config/depricated/gtUIAnthropicStructureConfig.py @@ -0,0 +1,69 @@ +from griptape.configs.drivers import ( + AnthropicDriversConfig, +) + +# StructureGlobalDriversConfig, +from griptape.drivers import ( + AnthropicPromptDriver, +) + +from ..gtUIBaseConfig import gtUIBaseConfig + +anthropicPromptModels = [ + "claude-3-5-sonnet-20240620", + "claude-3-opus-20240229", + "claude-3-sonnet-20240229", + "claude-3-haiku-20240307", +] + +DEFAULT_API_KEY = "ANTHROPIC_API_KEY" + + +class gtUIAnthropicStructureConfig(gtUIBaseConfig): + """ + The Griptape Anthropic Structure Config + """ + + DESCRIPTION = ( + "Anthropic Structure Config. Use Anthropic's models for prompt and image query." + ) + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + inputs["required"].update( + { + "prompt_model": ( + anthropicPromptModels, + {"default": anthropicPromptModels[0]}, + ), + }, + ) + inputs["optional"].update( + { + "api_key_env_var": ("STRING", {"default": DEFAULT_API_KEY}), + }, + ) + return inputs + + def create( + self, + **kwargs, + ): + params = {} + + params["model"] = kwargs.get("prompt_model", anthropicPromptModels[0]) + params["temperature"] = kwargs.get("temperature", 0.7) + params["max_attempts"] = kwargs.get("max_attempts_on_fail", 10) + params["use_native_tools"] = kwargs.get("use_native_tools", True) + params["api_key"] = self.getenv(kwargs.get("api_key_env_var", DEFAULT_API_KEY)) + + max_tokens = kwargs.get("max_tokens", None) + if max_tokens > 0: + params["max_tokens"] = max_tokens + + custom_config = AnthropicDriversConfig( + prompt_driver=AnthropicPromptDriver(**params) + ) + + return (custom_config,) diff --git a/nodes/config/depricated/gtUIAzureOpenAiStructureConfig.py b/nodes/config/depricated/gtUIAzureOpenAiStructureConfig.py new file mode 100644 index 0000000..9e36093 --- /dev/null +++ b/nodes/config/depricated/gtUIAzureOpenAiStructureConfig.py @@ -0,0 +1,103 @@ +from griptape.configs.drivers import AzureOpenAiDriversConfig + +# StructureGlobalDriversConfig, +from griptape.drivers import ( + AzureOpenAiChatPromptDriver, + AzureOpenAiEmbeddingDriver, + AzureOpenAiImageGenerationDriver, +) + +from ..gtUIBaseConfig import gtUIBaseConfig + +DEFAULT_AZURE_OPENAI_ENDPOINT = "AZURE_OPENAI_ENDPOINT" +DEFAULT_AZURE_OPENAI_API_KEY = "AZURE_OPENAI_API_KEY" + + +class gtUIAzureOpenAiStructureConfig(gtUIBaseConfig): + """ + The Griptape OpenAI Structure Config + """ + + DESCRIPTION = "Azure OpenAI Structure Config. Requires AZURE_OPENAI_ENDPOINT_3 and AZURE_OPENAI_API_KEY_3" + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + inputs["required"].update( + { + "prompt_model": ( + ["gpt-4o", "gpt-4", "gpt-3.5-turbo-16k", "gpt-3.5-turbo"], + {"default": "gpt-4o"}, + ), + "prompt_model_deployment_name": ( + "STRING", + {"default": "gpt4o"}, + ), + } + ) + inputs["optional"].update( + { + "api_key_env_var": ( + "STRING", + {"default": DEFAULT_AZURE_OPENAI_API_KEY}, + ), + "azure_endpoint_env_var": ( + "STRING", + {"default": DEFAULT_AZURE_OPENAI_ENDPOINT}, + ), + } + ) + + return inputs + + def create( + self, + **kwargs, + ): + params = {} + params["model"] = kwargs.get("prompt_model", "gpt-4o") + params["temperature"] = kwargs.get("temperature", 0.7) + params["seed"] = kwargs.get("seed", 12341) + params["max_attempts"] = kwargs.get("max_attempts_on_fail", 10) + params["azure_deployment"] = kwargs.get("prompt_model_deployment_name", "gpt4o") + params["use_native_tools"] = kwargs.get("use_native_tools", False) + params["stream"] = kwargs.get("stream", False) + image_generation_driver = kwargs.get("image_generation_driver", None) + + max_tokens = kwargs.get("max_tokens", -1) + if max_tokens > 0: + params["max_tokens"] = max_tokens + + AZURE_OPENAI_API_KEY = self.getenv( + kwargs.get("api_key_env_var", DEFAULT_AZURE_OPENAI_API_KEY) + ) + AZURE_OPENAI_ENDPOINT = self.getenv( + kwargs.get("azure_endpoint_env_var", DEFAULT_AZURE_OPENAI_ENDPOINT) + ) + + params["api_key"] = self.getenv("AZURE_OPENAI_API_KEY") + params["azure_endpoint"] = self.getenv("AZURE_OPENAI_ENDPOINT") + + prompt_driver = AzureOpenAiChatPromptDriver(**params) + embedding_driver = AzureOpenAiEmbeddingDriver( + api_key=self.getenv(AZURE_OPENAI_API_KEY), + azure_endpoint=self.getenv(AZURE_OPENAI_ENDPOINT), + ) + + if not image_generation_driver: + image_generation_driver = AzureOpenAiImageGenerationDriver( + azure_deployment="dall-e-3", + model="dall-e-3", + azure_endpoint=params["azure_endpoint"], + api_key=params["api_key"], + ) + + custom_config = AzureOpenAiDriversConfig( + prompt_driver=prompt_driver, + embedding_driver=embedding_driver, + image_generation_driver=image_generation_driver, + azure_endpoint=params["azure_endpoint"], + api_key=params["api_key"], + ) + + return (custom_config,) diff --git a/nodes/config/depricated/gtUIGoogleStructureConfig.py b/nodes/config/depricated/gtUIGoogleStructureConfig.py new file mode 100644 index 0000000..42401dd --- /dev/null +++ b/nodes/config/depricated/gtUIGoogleStructureConfig.py @@ -0,0 +1,75 @@ +from griptape.configs.drivers import ( + GoogleDriversConfig, +) + +# StructureGlobalDriversConfig, +from griptape.drivers import ( + GooglePromptDriver, +) + +from ..gtUIBaseConfig import gtUIBaseConfig + +google_models = [ + "gemini-1.5-pro", + "gemini-1.5-flash", + "gemini-1.0-pro", +] + +DEFAULT_API_KEY = "GOOGLE_API_KEY" + + +class gtUIGoogleStructureConfig(gtUIBaseConfig): + """ + The Griptape Google Structure Config + """ + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + + inputs["required"].update( + { + "prompt_model": ( + google_models, + {"default": google_models[0]}, + ), + }, + ) + inputs["optional"].update( + { + "api_key_env_var": ("STRING", {"default": DEFAULT_API_KEY}), + } + ) + + return inputs + + DESCRIPTION = ( + "Google Structure Config. Use Google's models for prompt and image query." + ) + + def create( + self, + **kwargs, + ): + params = {} + temperature = kwargs.get("temperature", 0.7) + prompt_model = kwargs.get("prompt_model", google_models[0]) + max_attempts = kwargs.get("max_attempts_on_fail", 10) + api_key = self.getenv(kwargs.get("api_key_env_var", DEFAULT_API_KEY)) + use_native_tools = kwargs.get("use_native_tools", False) + max_tokens = kwargs.get("max_tokens", -1) + if max_tokens > 0: + params["max_tokens"] = max_tokens + + custom_config = GoogleDriversConfig( + prompt_driver=GooglePromptDriver( + model=prompt_model, + temperature=temperature, + max_attempts=max_attempts, + api_key=api_key, + use_native_tools=use_native_tools, + **params, + ), + ) + + return (custom_config,) diff --git a/nodes/config/depricated/gtUIHuggingFaceStructureConfig.py b/nodes/config/depricated/gtUIHuggingFaceStructureConfig.py new file mode 100644 index 0000000..752d7a6 --- /dev/null +++ b/nodes/config/depricated/gtUIHuggingFaceStructureConfig.py @@ -0,0 +1,60 @@ +from dotenv import load_dotenv +from griptape.configs.drivers import ( + DriversConfig, +) + +# StructureGlobalDriversConfig, +from griptape.drivers import ( + HuggingFaceHubPromptDriver, +) + +from ..gtUIBaseConfig import gtUIBaseConfig + +load_dotenv() + +DEFAULT_API_KEY = "HUGGINGFACE_HUB_ACCESS_TOKEN" + + +class gtUIHuggingFaceStructureConfig(gtUIBaseConfig): + """ + Create a HuggingFace Structure Config + """ + + DESCRIPTION = "HuggingFace Structure Config." + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + inputs["optional"].update( + { + "prompt_model": ("STRING", {"default": "HuggingFaceH4/zephyr-7b-beta"}), + "api_token_env_var": ( + "STRING", + {"default": DEFAULT_API_KEY}, + ), + } + ) + del inputs["optional"]["max_tokens"] + + return inputs + + def create(self, **kwargs): + prompt_model = kwargs.get("prompt_model", None) + temperature = kwargs.get("temperature", 0.7) + stream = kwargs.get("stream", False) + max_attempts = kwargs.get("max_attempts_on_fail", 10) + use_native_tools = kwargs.get("use_native_tools", False) + api_token = self.getenv(kwargs.get("api_token_env_var", DEFAULT_API_KEY)) + configs = {} + if prompt_model and api_token: + configs["prompt_driver"] = HuggingFaceHubPromptDriver( + model=prompt_model, + api_token=api_token, + max_attempts=max_attempts, + temperature=temperature, + stream=stream, + use_native_tools=use_native_tools, + ) + custom_config = DriversConfig(**configs) + + return (custom_config,) diff --git a/nodes/config/depricated/gtUILMStudioStructureConfig.py b/nodes/config/depricated/gtUILMStudioStructureConfig.py new file mode 100644 index 0000000..94f330b --- /dev/null +++ b/nodes/config/depricated/gtUILMStudioStructureConfig.py @@ -0,0 +1,65 @@ +from griptape.configs.drivers import ( + DriversConfig, +) + +# StructureGlobalDriversConfig, +from griptape.drivers import ( + OpenAiChatPromptDriver, +) + +from ..gtUIBaseConfig import gtUIBaseConfig + +lmstudio_port = "1234" +lmstudio_base_url = "http://127.0.0.1" + + +class gtUILMStudioStructureConfig(gtUIBaseConfig): + """ + The Griptape LM Studio Structure Config + """ + + DESCRIPTION = ( + "LM Studio Prompt Driver. LMStudio is available at https://lmstudio.ai " + ) + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + inputs["required"].update( + { + "model": ((), {}), + "base_url": ("STRING", {"default": lmstudio_base_url}), + "port": ( + "STRING", + {"default": lmstudio_port}, + ), + }, + ) + inputs["optional"].update( + { + "use_native_tools": ("BOOLEAN", {"default": False}), + } + ) + return inputs + + def create(self, **kwargs): + params = {} + params["model"] = kwargs.get("model", "") + port = kwargs.get("port", lmstudio_port) + base_url = kwargs.get("base_url", lmstudio_base_url) + params["base_url"] = f"{base_url}:{port}/v1" + params["temperature"] = kwargs.get("temperature", 0.7) + params["max_attempts"] = kwargs.get("max_attempts_on_fail", 10) + params["stream"] = kwargs.get("stream", False) + params["seed"] = kwargs.get("seed", 12341) + params["use_native_tools"] = kwargs.get("use_native_tools", False) + + max_tokens = kwargs.get("max_tokens", -1) + if max_tokens > 0: + params["max_tokens"] = max_tokens + + custom_config = DriversConfig( + prompt_driver=OpenAiChatPromptDriver(**params), + ) + + return (custom_config,) diff --git a/nodes/config/depricated/gtUIOllamaStructureConfig.py b/nodes/config/depricated/gtUIOllamaStructureConfig.py new file mode 100644 index 0000000..26de82a --- /dev/null +++ b/nodes/config/depricated/gtUIOllamaStructureConfig.py @@ -0,0 +1,54 @@ +from griptape.configs.drivers import ( + DriversConfig, +) + +# StructureGlobalDriversConfig, +from griptape.drivers import ( + OllamaPromptDriver, +) + +from ..gtUIBaseConfig import gtUIBaseConfig + +ollama_port = "11434" +ollama_base_url = "http://127.0.0.1" + + +class gtUIOllamaStructureConfig(gtUIBaseConfig): + """ + The Griptape Ollama Structure Config + """ + + DESCRIPTION = "Ollama Prompt Driver. Use local models with Ollama. Available at https://ollama.com" + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + inputs["required"].update( + { + "prompt_model": ((), {}), + "base_url": ("STRING", {"default": ollama_base_url}), + "port": ("STRING", {"default": ollama_port}), + }, + ) + return inputs + + def create(self, **kwargs): + params = {} + + params["model"] = kwargs.get("prompt_model", "") + params["temperature"] = kwargs.get("temperature", 0.7) + port = kwargs.get("port", ollama_port) + base_url = kwargs.get("base_url", ollama_base_url) + params["host"] = f"{base_url}:{port}" + params["stream"] = kwargs.get("stream", False) + params["use_native_tools"] = kwargs.get("use_native_tools", False) + params["max_attempts"] = kwargs.get("max_attempts_on_fail", 10) + max_tokens = kwargs.get("max_tokens", -1) + if max_tokens > 0: + params["max_tokens"] = max_tokens + + custom_config = DriversConfig( + prompt_driver=OllamaPromptDriver(**params), + ) + + return (custom_config,) diff --git a/nodes/config/gtUIOpenAiCompatibleConfig.py b/nodes/config/depricated/gtUIOpenAiCompatibleConfig.py similarity index 97% rename from nodes/config/gtUIOpenAiCompatibleConfig.py rename to nodes/config/depricated/gtUIOpenAiCompatibleConfig.py index 8ddcd6c..eb954b4 100644 --- a/nodes/config/gtUIOpenAiCompatibleConfig.py +++ b/nodes/config/depricated/gtUIOpenAiCompatibleConfig.py @@ -10,7 +10,7 @@ from griptape.drivers import ( OpenAiTextToSpeechDriver, ) -from .gtUIBaseConfig import gtUIBaseConfig +from ..gtUIBaseConfig import gtUIBaseConfig load_dotenv() @@ -42,7 +42,6 @@ class gtUIOpenAiCompatibleConfig(gtUIBaseConfig): return inputs def create(self, **kwargs): - self.run_envs(kwargs) params = {} params["model"] = kwargs.get("prompt_model", None) diff --git a/nodes/config/depricated/gtUIOpenAiStructureConfig.py b/nodes/config/depricated/gtUIOpenAiStructureConfig.py new file mode 100644 index 0000000..ca622e5 --- /dev/null +++ b/nodes/config/depricated/gtUIOpenAiStructureConfig.py @@ -0,0 +1,68 @@ +from griptape.configs import Defaults +from griptape.configs.drivers import ( + OpenAiDriversConfig, +) + +# StructureGlobalDriversConfig, +from griptape.drivers import ( + OpenAiChatPromptDriver, +) + +from ..gtUIBaseConfig import gtUIBaseConfig + +default_prompt_model = "gpt-4o" +default_image_query_model = "gpt-4o" +DEFAULT_API_KEY = "OPENAI_API_KEY" + + +class gtUIOpenAiStructureConfig(gtUIBaseConfig): + """ + The Griptape OpenAI Structure Config + """ + + DESCRIPTION = "OpenAI Structure Config. Use OpenAI's models for prompt, embedding, image generation, and image query." + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + inputs["required"].update( + { + "prompt_model": ( + ["gpt-4o", "gpt-4", "gpt-4o-mini", "gpt-3.5-turbo"], + {"default": default_prompt_model}, + ), + } + ) + inputs["optional"].update( + { + "api_key_env_var": ("STRING", {"default": DEFAULT_API_KEY}), + } + ) + return inputs + + def create( + self, + **kwargs, + ): + params = {} + params["model"] = kwargs.get("prompt_model", default_prompt_model) + params["temperature"] = kwargs.get("temperature", 0.7) + params["seed"] = kwargs.get("seed", 12341) + params["max_attempts"] = kwargs.get("max_attempts_on_fail", 10) + params["api_key"] = self.getenv(kwargs.get("api_key_env_var", DEFAULT_API_KEY)) + params["use_native_tools"] = kwargs.get("use_native_tools", False) + max_tokens = kwargs.get("max_tokens", -1) + if max_tokens > 0: + params["max_tokens"] = max_tokens + + try: + Defaults.drivers_config = OpenAiDriversConfig( + prompt_driver=OpenAiChatPromptDriver(**params) + ) + + # OpenAiStructureConfig() + custom_config = Defaults.drivers_config + except Exception as e: + raise Exception(f"Error creating OpenAiStructureConfig: {e}") + + return (custom_config,) diff --git a/nodes/config/gtUIAmazonBedrockStructureConfig.py b/nodes/config/gtUIAmazonBedrockDriversConfig.py similarity index 95% rename from nodes/config/gtUIAmazonBedrockStructureConfig.py rename to nodes/config/gtUIAmazonBedrockDriversConfig.py index df5c08f..468ee37 100644 --- a/nodes/config/gtUIAmazonBedrockStructureConfig.py +++ b/nodes/config/gtUIAmazonBedrockDriversConfig.py @@ -18,7 +18,11 @@ from ..drivers.gtUIAmazonBedrockTitanEmbeddingDriver import ( from ..drivers.gtUIAmazonBedrockTitanImageGenerationDriver import ( gtUIAmazonBedrockTitanImageGenerationDriver, ) -from .gtUIBaseConfig import add_optional_inputs, add_required_inputs, gtUIBaseConfig +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) amazonBedrockPromptModels = [ "anthropic.claude-3-5-sonnet-20240620-v1:0", @@ -44,7 +48,7 @@ drivers = [ ] -class gtUIAmazonBedrockStructureConfig(gtUIBaseConfig): +class gtUIAmazonBedrockDriversConfig(gtUIBaseDriversConfig): """ The Griptape Amazon Bedrock Structure Config """ diff --git a/nodes/config/gtUIAnthropicStructureConfig.py b/nodes/config/gtUIAnthropicDriversConfig.py similarity index 93% rename from nodes/config/gtUIAnthropicStructureConfig.py rename to nodes/config/gtUIAnthropicDriversConfig.py index 913a8bf..99a1789 100644 --- a/nodes/config/gtUIAnthropicStructureConfig.py +++ b/nodes/config/gtUIAnthropicDriversConfig.py @@ -10,7 +10,11 @@ from griptape.drivers import ( from ..drivers.gtUIAnthropicPromptDriver import gtUIAnthropicPromptDriver from ..drivers.gtUIVoyageAiEmbeddingDriver import gtUIVoyageAiEmbeddingDriver -from .gtUIBaseConfig import add_optional_inputs, add_required_inputs, gtUIBaseConfig +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) anthropicPromptModels = [ "claude-3-5-sonnet-20240620", @@ -28,7 +32,7 @@ drivers = [ ] -class gtUIAnthropicStructureConfig(gtUIBaseConfig): +class gtUIAnthropicDriversConfig(gtUIBaseDriversConfig): """ The Griptape Anthropic Structure Config """ diff --git a/nodes/config/gtUIAzureOpenAiStructureConfig.py b/nodes/config/gtUIAzureOpenAiDriversConfig.py similarity index 94% rename from nodes/config/gtUIAzureOpenAiStructureConfig.py rename to nodes/config/gtUIAzureOpenAiDriversConfig.py index 339b364..a4718fe 100644 --- a/nodes/config/gtUIAzureOpenAiStructureConfig.py +++ b/nodes/config/gtUIAzureOpenAiDriversConfig.py @@ -14,7 +14,11 @@ from ..drivers.gtUIAzureOpenAiEmbeddingDriver import gtUIAzureOpenAiEmbeddingDri from ..drivers.gtUIAzureOpenAiImageGenerationDriver import ( gtUIAzureOpenAiImageGenerationDriver, ) -from .gtUIBaseConfig import add_optional_inputs, add_required_inputs, gtUIBaseConfig +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) DEFAULT_AZURE_OPENAI_ENDPOINT = "AZURE_OPENAI_ENDPOINT" DEFAULT_AZURE_OPENAI_API_KEY = "AZURE_OPENAI_API_KEY" @@ -26,7 +30,7 @@ drivers = [ ] -class gtUIAzureOpenAiStructureConfig(gtUIBaseConfig): +class gtUIAzureOpenAiDriversConfig(gtUIBaseDriversConfig): """ The Griptape OpenAI Structure Config """ diff --git a/nodes/config/gtUIBaseConfig.py b/nodes/config/gtUIBaseConfig.py index 456727b..c1e26fe 100644 --- a/nodes/config/gtUIBaseConfig.py +++ b/nodes/config/gtUIBaseConfig.py @@ -3,8 +3,6 @@ import os from griptape.configs import Defaults from griptape.configs.drivers import OpenAiDriversConfig -from ..gtUIBase import gtUIBase - def add_required_inputs(inputs, drivers): for _, driver in drivers: @@ -27,7 +25,7 @@ def add_optional_inputs(inputs, drivers): return inputs -class gtUIBaseConfig(gtUIBase): +class gtUIBaseConfig: """ Griptape Base Config """ @@ -37,9 +35,30 @@ class gtUIBaseConfig(gtUIBase): @classmethod def INPUT_TYPES(s): - inputs = super().INPUT_TYPES() - - return inputs + return { + "required": {}, + "optional": { + "temperature": ( + "FLOAT", + {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}, + ), + "seed": ("INT", {"default": 10342349342}), + "max_attempts_on_fail": ( + "INT", + {"default": 10, "min": 1, "max": 100}, + ), + # "stream": ([True, False], {"default": False}), + "env": ("ENV", {"default": None}), + "use_native_tools": ("BOOLEAN", {"default": True}), + "max_tokens": ( + "INT", + { + "default": -1, + "tooltip": "Maximum tokens to generate. If <=0, it will use the default based on the tokenizer.", + }, + ), + }, + } RETURN_TYPES = ("CONFIG",) RETURN_NAMES = ("CONFIG",) @@ -47,7 +66,7 @@ class gtUIBaseConfig(gtUIBase): # OUTPUT_NODE = False - CATEGORY = "Griptape/Agent Configs" + CATEGORY = "Griptape/Agent Configs [DEPRECIATED]" def getenv(self, env): return os.getenv(env, None) diff --git a/nodes/config/gtUIBaseDriversConfig.py b/nodes/config/gtUIBaseDriversConfig.py new file mode 100644 index 0000000..68d6aeb --- /dev/null +++ b/nodes/config/gtUIBaseDriversConfig.py @@ -0,0 +1,57 @@ +import os + +from griptape.configs import Defaults +from griptape.configs.drivers import OpenAiDriversConfig + +from ..gtUIBase import gtUIBase + + +def add_required_inputs(inputs, drivers): + for _, driver in drivers: + inputs["required"].update(driver.INPUT_TYPES()["required"]) + return inputs + + +def add_optional_inputs(inputs, drivers): + # Add optional inputs and comments for each driver + for name, driver in drivers: + inputs["optional"].update( + { + f"{name}_model_comment": ( + "STRING", + {"default": f"{name.replace('_', ' ').title()} Driver"}, + ), + } + ) + inputs["optional"].update(driver.INPUT_TYPES()["optional"]) + return inputs + + +class gtUIBaseDriversConfig(gtUIBase): + """ + Griptape Base Drivers Config + """ + + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + + return inputs + + RETURN_TYPES = ("CONFIG",) + RETURN_NAMES = ("CONFIG",) + FUNCTION = "create" + + # OUTPUT_NODE = False + + CATEGORY = "Griptape/Agent Configs" + + def getenv(self, env): + return os.getenv(env, None) + + def create(self, **kwargs): + Defaults.drivers_config = OpenAiDriversConfig() + return (OpenAiDriversConfig(),) diff --git a/nodes/config/gtUICohereStructureConfig.py b/nodes/config/gtUICohereDriversConfig.py similarity index 92% rename from nodes/config/gtUICohereStructureConfig.py rename to nodes/config/gtUICohereDriversConfig.py index ca50faa..92e3bd5 100644 --- a/nodes/config/gtUICohereStructureConfig.py +++ b/nodes/config/gtUICohereDriversConfig.py @@ -12,7 +12,11 @@ from griptape.drivers import ( from ..drivers.gtUICohereEmbeddingDriver import gtUICohereEmbeddingDriver from ..drivers.gtUICoherePromptDriver import gtUICoherePromptDriver -from .gtUIBaseConfig import add_optional_inputs, add_required_inputs, gtUIBaseConfig +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) # Define the list of drivers drivers = [ @@ -21,7 +25,7 @@ drivers = [ ] -class gtUICohereStructureConfig(gtUIBaseConfig): +class gtUICohereDriversConfig(gtUIBaseDriversConfig): """ The Griptape OpenAI Structure Config """ diff --git a/nodes/config/gtUIGoogleStructureConfig.py b/nodes/config/gtUIGoogleDriversConfig.py similarity index 92% rename from nodes/config/gtUIGoogleStructureConfig.py rename to nodes/config/gtUIGoogleDriversConfig.py index d1b4e5b..71f33d8 100644 --- a/nodes/config/gtUIGoogleStructureConfig.py +++ b/nodes/config/gtUIGoogleDriversConfig.py @@ -12,7 +12,11 @@ from griptape.drivers import ( from ..drivers.gtUIGoogleEmbeddingDriver import gtUIGoogleEmbeddingDriver from ..drivers.gtUIGooglePromptDriver import gtUIGooglePromptDriver -from .gtUIBaseConfig import add_optional_inputs, add_required_inputs, gtUIBaseConfig +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) google_models = [ "gemini-1.5-pro", @@ -28,7 +32,7 @@ drivers = [ ] -class gtUIGoogleStructureConfig(gtUIBaseConfig): +class gtUIGoogleDriversConfig(gtUIBaseDriversConfig): """ The Griptape Google Structure Config """ diff --git a/nodes/config/gtUIHuggingFaceStructureConfig.py b/nodes/config/gtUIHuggingFaceDriversConfig.py similarity index 92% rename from nodes/config/gtUIHuggingFaceStructureConfig.py rename to nodes/config/gtUIHuggingFaceDriversConfig.py index ba265f7..b623f22 100644 --- a/nodes/config/gtUIHuggingFaceStructureConfig.py +++ b/nodes/config/gtUIHuggingFaceDriversConfig.py @@ -15,7 +15,11 @@ from ..drivers.gtUIHuggingFaceHubEmbeddingDriver import ( gtUIHuggingFaceHubEmbeddingDriver, ) from ..drivers.gtUIHuggingFaceHubPromptDriver import gtUIHuggingFaceHubPromptDriver -from .gtUIBaseConfig import add_optional_inputs, add_required_inputs, gtUIBaseConfig +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) load_dotenv() @@ -28,7 +32,7 @@ drivers = [ ] -class gtUIHuggingFaceStructureConfig(gtUIBaseConfig): +class gtUIHuggingFaceDriversConfig(gtUIBaseDriversConfig): """ Create a HuggingFace Structure Config """ diff --git a/nodes/config/gtUILMStudioStructureConfig.py b/nodes/config/gtUILMStudioDriversConfig.py similarity index 92% rename from nodes/config/gtUILMStudioStructureConfig.py rename to nodes/config/gtUILMStudioDriversConfig.py index fa24610..acb7643 100644 --- a/nodes/config/gtUILMStudioStructureConfig.py +++ b/nodes/config/gtUILMStudioDriversConfig.py @@ -12,7 +12,11 @@ from griptape.drivers import ( from ..drivers.gtUILMStudioChatPromptDriver import gtUILMStudioChatPromptDriver from ..drivers.gtUILMStudioEmbeddingDriver import gtUILMStudioEmbeddingDriver -from .gtUIBaseConfig import add_optional_inputs, add_required_inputs, gtUIBaseConfig +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) drivers = [ ("prompt", gtUILMStudioChatPromptDriver), @@ -20,7 +24,7 @@ drivers = [ ] -class gtUILMStudioStructureConfig(gtUIBaseConfig): +class gtUILMStudioDriversConfig(gtUIBaseDriversConfig): """ The Griptape LM Studio Structure Config """ diff --git a/nodes/config/gtUIOllamaStructureConfig.py b/nodes/config/gtUIOllamaDriversConfig.py similarity index 92% rename from nodes/config/gtUIOllamaStructureConfig.py rename to nodes/config/gtUIOllamaDriversConfig.py index 178534d..4162274 100644 --- a/nodes/config/gtUIOllamaStructureConfig.py +++ b/nodes/config/gtUIOllamaDriversConfig.py @@ -12,7 +12,11 @@ from griptape.drivers import ( from ..drivers.gtUIOllamaEmbeddingDriver import gtUIOllamaEmbeddingDriver from ..drivers.gtUIOllamaPromptDriver import gtUIOllamaPromptDriver -from .gtUIBaseConfig import add_optional_inputs, add_required_inputs, gtUIBaseConfig +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) drivers = [ ("prompt", gtUIOllamaPromptDriver), @@ -20,7 +24,7 @@ drivers = [ ] -class gtUIOllamaStructureConfig(gtUIBaseConfig): +class gtUIOllamaDriversConfig(gtUIBaseDriversConfig): """ The Griptape Ollama Structure Config """ diff --git a/nodes/config/gtUIOpenAiCompatibleDriversConfig.py b/nodes/config/gtUIOpenAiCompatibleDriversConfig.py new file mode 100644 index 0000000..595fe8e --- /dev/null +++ b/nodes/config/gtUIOpenAiCompatibleDriversConfig.py @@ -0,0 +1,117 @@ +from dotenv import load_dotenv +from griptape.configs import Defaults +from griptape.configs.drivers import ( + OpenAiDriversConfig, +) + +# StructureGlobalDriversConfig, +from griptape.drivers import ( + LocalVectorStoreDriver, + OpenAiAudioTranscriptionDriver, + OpenAiChatPromptDriver, + OpenAiEmbeddingDriver, + OpenAiImageGenerationDriver, + OpenAiTextToSpeechDriver, +) + +# Get all the drivers +from ..drivers.gtUIOpenAiAudioTranscriptionDriver import ( + gtUIOpenAiAudioTranscriptionDriver, +) +from ..drivers.gtUIOpenAiCompatibleChatPromptDriver import ( + gtUIOpenAiCompatibleChatPromptDriver, +) +from ..drivers.gtUIOpenAiCompatibleEmbeddingDriver import ( + gtUIOpenAiCompatibleEmbeddingDriver, +) +from ..drivers.gtUIOpenAiCompatibleImageGenerationDriver import ( + gtUIOpenAiCompatibleImageGenerationDriver, +) +from ..drivers.gtUIOpenAiTextToSpeechDriver import gtUIOpenAiTextToSpeechDriver +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) + +load_dotenv() + +DEFAULT_API_KEY = "OPENAI_API_KEY" + +# Define the list of drivers +drivers = [ + ("prompt", gtUIOpenAiCompatibleChatPromptDriver), + ("image_generation", gtUIOpenAiCompatibleImageGenerationDriver), + ("embedding", gtUIOpenAiCompatibleEmbeddingDriver), + ("text_to_speech", gtUIOpenAiTextToSpeechDriver), + ("audio_transcription", gtUIOpenAiAudioTranscriptionDriver), +] + + +class gtUIOpenAiCompatibleDriversConfig(gtUIBaseDriversConfig): + """ + Create an OpenAI Compatible Structure Config + """ + + DESCRIPTION = "OpenAI Compatible Structure Config." + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + inputs["optional"] = {} + + inputs = add_required_inputs(inputs, drivers) + inputs = add_optional_inputs(inputs, drivers) + + return inputs + + def create(self, **kwargs): + self.run_envs(kwargs) + drivers_config_params = {} + + # Create instances of the driver classes + prompt_driver_builder = gtUIOpenAiCompatibleChatPromptDriver() + embedding_driver_builder = gtUIOpenAiCompatibleEmbeddingDriver() + audio_transcription_driver_builder = gtUIOpenAiAudioTranscriptionDriver() + image_generation_driver_builder = gtUIOpenAiCompatibleEmbeddingDriver() + text_to_speech_driver_builder = gtUIOpenAiTextToSpeechDriver() + + # Build parameters for drivers + prompt_driver_params = prompt_driver_builder.build_params(**kwargs) + embedding_driver_params = embedding_driver_builder.build_params(**kwargs) + image_generation_driver_params = image_generation_driver_builder.build_params( + **kwargs + ) + text_to_speech_driver_params = text_to_speech_driver_builder.build_params( + **kwargs + ) + audio_transcription_driver_params = ( + audio_transcription_driver_builder.build_params(**kwargs) + ) + + # Create Driver Configs + drivers_config_params["prompt_driver"] = OpenAiChatPromptDriver( + **prompt_driver_params + ) + drivers_config_params["embedding_driver"] = OpenAiEmbeddingDriver( + **embedding_driver_params + ) + drivers_config_params["audio_transcription_driver"] = ( + OpenAiAudioTranscriptionDriver(**audio_transcription_driver_params) + ) + drivers_config_params["image_generation_driver"] = OpenAiImageGenerationDriver( + **image_generation_driver_params + ) + drivers_config_params["text_to_speech_driver"] = OpenAiTextToSpeechDriver( + **text_to_speech_driver_params + ) + drivers_config_params["vector_store_driver"] = LocalVectorStoreDriver( + embedding_driver=OpenAiEmbeddingDriver(**embedding_driver_params) + ) + + try: + Defaults.drivers_config = OpenAiDriversConfig(**drivers_config_params) + custom_config = Defaults.drivers_config + except Exception as e: + raise Exception(f"Error creating OpenAiCompatibleDriversConfig: {e}") + return (custom_config,) diff --git a/nodes/config/gtUIOpenAiStructureConfig.py b/nodes/config/gtUIOpenAiDriversConfig.py similarity index 92% rename from nodes/config/gtUIOpenAiStructureConfig.py rename to nodes/config/gtUIOpenAiDriversConfig.py index 53c2731..6018a01 100644 --- a/nodes/config/gtUIOpenAiStructureConfig.py +++ b/nodes/config/gtUIOpenAiDriversConfig.py @@ -21,7 +21,11 @@ from ..drivers.gtUIOpenAiChatPromptDriver import gtUIOpenAiChatPromptDriver from ..drivers.gtUIOpenAiEmbeddingDriver import gtUIOpenAiEmbeddingDriver from ..drivers.gtUIOpenAiImageGenerationDriver import gtUIOpenAiImageGenerationDriver from ..drivers.gtUIOpenAiTextToSpeechDriver import gtUIOpenAiTextToSpeechDriver -from .gtUIBaseConfig import add_optional_inputs, add_required_inputs, gtUIBaseConfig +from .gtUIBaseDriversConfig import ( + add_optional_inputs, + add_required_inputs, + gtUIBaseDriversConfig, +) default_prompt_model = "gpt-4o" default_image_query_model = "gpt-4o" @@ -37,12 +41,12 @@ drivers = [ ] -class gtUIOpenAiStructureConfig(gtUIBaseConfig): +class gtUIOpenAiDriversConfig(gtUIBaseDriversConfig): """ The Griptape OpenAI Structure Config """ - DESCRIPTION = "OpenAI Structure Config. Use OpenAI's models for prompt, embedding, image generation, and image query." + DESCRIPTION = "OpenAI Drivers Config. Use OpenAI's models for prompt, embedding, image generation, and image query." @classmethod def INPUT_TYPES(s): diff --git a/nodes/drivers/gtUIOpenAiCompatibleChatPromptDriver.py b/nodes/drivers/gtUIOpenAiCompatibleChatPromptDriver.py index 2e68a0e..d3b0edc 100644 --- a/nodes/drivers/gtUIOpenAiCompatibleChatPromptDriver.py +++ b/nodes/drivers/gtUIOpenAiCompatibleChatPromptDriver.py @@ -1,23 +1,25 @@ from griptape.drivers import OpenAiChatPromptDriver -from .gtUIBasePromptDriver import gtUIBasePromptDriver +from .gtUIOpenAiChatPromptDriver import gtUIOpenAiChatPromptDriver default_model = "gpt-4o" default_base_url = "https://api.openai.com/v1" DEFAULT_API_KEY_ENV = "OPENAI_API_KEY" -class gtUIOpenAiCompatibleChatPromptDriver(gtUIBasePromptDriver): +class gtUIOpenAiCompatibleChatPromptDriver(gtUIOpenAiChatPromptDriver): @classmethod def INPUT_TYPES(s): inputs = super().INPUT_TYPES() + # Get the base required and optional inputs + base_required_inputs = inputs["required"] + base_optional_inputs = inputs["optional"] + inputs["optional"].update( { "model": ("STRING", {"default": default_model}), "base_url": ("STRING", {"default": default_base_url}), - "api_key_env_var": ("STRING", {"default": DEFAULT_API_KEY_ENV}), - "use_native_tools": ("BOOLEAN", {"default": False}), } ) @@ -28,6 +30,7 @@ class gtUIOpenAiCompatibleChatPromptDriver(gtUIBasePromptDriver): def build_params(self, **kwargs): model = kwargs.get("model", None) base_url = kwargs.get("base_url", default_base_url) + response_format = kwargs.get("response_format", None) if kwargs.get("api_key"): api_key = kwargs.get("api_key") else: @@ -45,6 +48,8 @@ class gtUIOpenAiCompatibleChatPromptDriver(gtUIBasePromptDriver): "use_native_tools": use_native_tools, "max_attempts": max_attempts, } + if response_format: + params["response_format"] = response_format if max_tokens > 0: params["max_tokens"] = max_tokens diff --git a/nodes/drivers/gtUIOpenAiCompatibleImageGenerationDriver.py b/nodes/drivers/gtUIOpenAiCompatibleImageGenerationDriver.py new file mode 100644 index 0000000..c98a3a2 --- /dev/null +++ b/nodes/drivers/gtUIOpenAiCompatibleImageGenerationDriver.py @@ -0,0 +1,45 @@ +from griptape.drivers import ( + OpenAiImageGenerationDriver, +) + +from .gtUIOpenAiImageGenerationDriver import gtUIOpenAiImageGenerationDriver + +DEFAULT_API_KEY = "OPENAI_API_KEY" +models = ["dall-e-3", "dall-e-2"] +sizes = ["256x256", "512x512", "1024x1024", "1024x1792", "1792x1024"] +default_base_url = "https://api.openai.com/v1" + + +class gtUIOpenAiCompatibleImageGenerationDriver(gtUIOpenAiImageGenerationDriver): + DESCRIPTION = "OpenAI Image Generation Driver" + + @classmethod + def INPUT_TYPES(s): + inputs = super().INPUT_TYPES() + inputs["optional"].update( + { + "base_url": ("STRING", {"default": default_base_url}), + } + ) + + return inputs + + def build_params(self, **kwargs): + size_from_args = kwargs.get("size", sizes[2]) + model = kwargs.get("image_generation_model", models[0]) + size = self.adjust_size_based_on_model(model, size_from_args) + api_key = self.getenv(kwargs.get("api_key_env_var", DEFAULT_API_KEY)) + base_url = kwargs.get("base_url", default_base_url) + params = { + "model": model, + "image_size": size, + "api_key": api_key, + "base_url": base_url, + } + + return params + + def create(self, **kwargs): + params = self.build_params(**kwargs) + driver = OpenAiImageGenerationDriver(**params) + return (driver,)