griptape-nodes 0.70.1__py3-none-any.whl → 0.71.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- griptape_nodes/api_client/client.py +8 -5
- griptape_nodes/bootstrap/utils/python_subprocess_executor.py +48 -9
- griptape_nodes/bootstrap/utils/subprocess_websocket_base.py +88 -0
- griptape_nodes/bootstrap/utils/subprocess_websocket_listener.py +126 -0
- griptape_nodes/bootstrap/utils/subprocess_websocket_sender.py +121 -0
- griptape_nodes/bootstrap/workflow_executors/local_session_workflow_executor.py +17 -170
- griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py +13 -117
- griptape_nodes/bootstrap/workflow_publishers/local_session_workflow_publisher.py +206 -0
- griptape_nodes/bootstrap/workflow_publishers/subprocess_workflow_publisher.py +22 -3
- griptape_nodes/bootstrap/workflow_publishers/utils/subprocess_script.py +45 -25
- griptape_nodes/common/node_executor.py +60 -13
- griptape_nodes/exe_types/base_iterative_nodes.py +1 -1
- griptape_nodes/exe_types/node_groups/subflow_node_group.py +18 -0
- griptape_nodes/exe_types/param_components/log_parameter.py +1 -2
- griptape_nodes/exe_types/param_components/subflow_execution_component.py +329 -0
- griptape_nodes/exe_types/param_types/parameter_audio.py +17 -2
- griptape_nodes/exe_types/param_types/parameter_image.py +14 -1
- griptape_nodes/exe_types/param_types/parameter_number.py +16 -22
- griptape_nodes/exe_types/param_types/parameter_three_d.py +14 -1
- griptape_nodes/exe_types/param_types/parameter_video.py +17 -2
- griptape_nodes/retained_mode/managers/os_manager.py +1 -1
- griptape_nodes/traits/clamp.py +9 -52
- griptape_nodes/utils/artifact_normalization.py +245 -0
- griptape_nodes/utils/image_preview.py +27 -0
- {griptape_nodes-0.70.1.dist-info → griptape_nodes-0.71.0.dist-info}/METADATA +1 -1
- {griptape_nodes-0.70.1.dist-info → griptape_nodes-0.71.0.dist-info}/RECORD +28 -22
- {griptape_nodes-0.70.1.dist-info → griptape_nodes-0.71.0.dist-info}/WHEEL +1 -1
- {griptape_nodes-0.70.1.dist-info → griptape_nodes-0.71.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"""Core utilities for normalizing artifact inputs (images, videos, audio).
|
|
2
|
+
|
|
3
|
+
This module provides normalization functions that convert string paths to
|
|
4
|
+
their respective artifact types (ImageUrlArtifact, VideoUrlArtifact, AudioUrlArtifact).
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import logging
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any
|
|
12
|
+
from urllib.parse import urlparse
|
|
13
|
+
|
|
14
|
+
from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _resolve_localhost_url_to_path(url: str) -> str:
|
|
20
|
+
"""Resolve localhost static file URLs to workspace file paths.
|
|
21
|
+
|
|
22
|
+
Converts URLs like http://localhost:8124/workspace/static_files/file.jpg
|
|
23
|
+
to actual workspace file paths like static_files/file.jpg
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
url: URL string that may be a localhost URL
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
Resolved file path relative to workspace, or original string if not a localhost URL
|
|
30
|
+
"""
|
|
31
|
+
if not isinstance(url, str):
|
|
32
|
+
return url
|
|
33
|
+
|
|
34
|
+
# Strip query parameters (cachebuster ?t=...)
|
|
35
|
+
if "?" in url:
|
|
36
|
+
url = url.split("?")[0]
|
|
37
|
+
|
|
38
|
+
# Check if it's a localhost URL (any port)
|
|
39
|
+
if url.startswith(("http://localhost:", "https://localhost:")):
|
|
40
|
+
parsed = urlparse(url)
|
|
41
|
+
# Extract path after /workspace/
|
|
42
|
+
if "/workspace/" in parsed.path:
|
|
43
|
+
workspace_relative_path = parsed.path.split("/workspace/", 1)[1]
|
|
44
|
+
return workspace_relative_path
|
|
45
|
+
|
|
46
|
+
# Not a localhost workspace URL, return as-is
|
|
47
|
+
return url
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _resolve_file_path(file_path: str) -> Path | None: # noqa: PLR0911
|
|
51
|
+
"""Resolve file path to absolute path relative to workspace.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
file_path: File path (may be absolute, relative, or localhost URL)
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
Resolved Path object, or None if path cannot be resolved
|
|
58
|
+
"""
|
|
59
|
+
# First resolve localhost URLs
|
|
60
|
+
file_path = _resolve_localhost_url_to_path(file_path)
|
|
61
|
+
|
|
62
|
+
# Get workspace path (can raise exceptions from ConfigManager)
|
|
63
|
+
try:
|
|
64
|
+
workspace_path = GriptapeNodes.ConfigManager().workspace_path
|
|
65
|
+
except (AttributeError, RuntimeError, KeyError) as e:
|
|
66
|
+
logger.debug("Failed to get workspace path: %s", e)
|
|
67
|
+
return None
|
|
68
|
+
|
|
69
|
+
# Create Path object (Path() constructor doesn't raise exceptions, but we validate)
|
|
70
|
+
path = Path(file_path)
|
|
71
|
+
|
|
72
|
+
# Check if path is absolute (is_absolute() doesn't raise exceptions)
|
|
73
|
+
if not path.is_absolute():
|
|
74
|
+
# Relative path - resolve relative to workspace (path operations don't raise exceptions)
|
|
75
|
+
return workspace_path / path
|
|
76
|
+
|
|
77
|
+
# Absolute path - check if relative to workspace
|
|
78
|
+
is_relative_to_workspace = False
|
|
79
|
+
try:
|
|
80
|
+
is_relative_to_workspace = path.is_relative_to(workspace_path)
|
|
81
|
+
except (ValueError, AttributeError):
|
|
82
|
+
# Path.is_relative_to() not available in older Python versions, use relative_to() instead
|
|
83
|
+
try:
|
|
84
|
+
path.relative_to(workspace_path)
|
|
85
|
+
is_relative_to_workspace = True
|
|
86
|
+
except ValueError:
|
|
87
|
+
# Absolute path outside workspace
|
|
88
|
+
is_relative_to_workspace = False
|
|
89
|
+
except (OSError, RuntimeError) as e:
|
|
90
|
+
# Unexpected errors from relative_to()
|
|
91
|
+
logger.debug("Unexpected error calling relative_to() for '%s': %s", file_path, e)
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
if is_relative_to_workspace:
|
|
95
|
+
return path
|
|
96
|
+
|
|
97
|
+
# Absolute path outside workspace - return as-is (might be a system path)
|
|
98
|
+
# exists() can raise OSError or PermissionError
|
|
99
|
+
try:
|
|
100
|
+
path_exists = path.exists()
|
|
101
|
+
except (OSError, PermissionError) as e:
|
|
102
|
+
logger.debug("Failed to check if path exists for '%s': %s", file_path, e)
|
|
103
|
+
return None
|
|
104
|
+
|
|
105
|
+
if path_exists:
|
|
106
|
+
return path
|
|
107
|
+
|
|
108
|
+
return None
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _upload_file_to_static_storage(file_path: Path, artifact_type: type[Any]) -> Any | None:
|
|
112
|
+
"""Upload a file to static storage and return an artifact.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
file_path: Path to the file to upload
|
|
116
|
+
artifact_type: The artifact class to create (ImageUrlArtifact, VideoUrlArtifact, AudioUrlArtifact)
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
Artifact object with localhost URL, or None if upload fails
|
|
120
|
+
"""
|
|
121
|
+
if not file_path.exists() or not file_path.is_file():
|
|
122
|
+
return None
|
|
123
|
+
|
|
124
|
+
try:
|
|
125
|
+
file_data = file_path.read_bytes()
|
|
126
|
+
file_name = file_path.name
|
|
127
|
+
static_files_manager = GriptapeNodes.StaticFilesManager()
|
|
128
|
+
url = static_files_manager.save_static_file(file_data, file_name)
|
|
129
|
+
return artifact_type(url)
|
|
130
|
+
except Exception as e:
|
|
131
|
+
logger.debug("Failed to upload file '%s' to static storage: %s", file_path, e)
|
|
132
|
+
return None
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _normalize_string_input(artifact_input: str, artifact_type: type[Any]) -> Any: # noqa: PLR0911
|
|
136
|
+
"""Normalize a string input to an artifact.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
artifact_input: String input (URL or file path)
|
|
140
|
+
artifact_type: The artifact class to create
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
Artifact object or original input if normalization fails
|
|
144
|
+
"""
|
|
145
|
+
# If it's already a URL (http/https), return it as-is
|
|
146
|
+
if artifact_input.startswith(("http://", "https://")):
|
|
147
|
+
# Check if it's a localhost URL that needs resolving
|
|
148
|
+
if artifact_input.startswith(("http://localhost:", "https://localhost:")):
|
|
149
|
+
resolved_path = _resolve_localhost_url_to_path(artifact_input)
|
|
150
|
+
# If path wasn't resolved, return as URL artifact
|
|
151
|
+
if resolved_path == artifact_input:
|
|
152
|
+
return artifact_type(artifact_input)
|
|
153
|
+
|
|
154
|
+
# Try to resolve and upload the resolved path
|
|
155
|
+
file_path = _resolve_file_path(resolved_path)
|
|
156
|
+
if not file_path:
|
|
157
|
+
return artifact_type(artifact_input)
|
|
158
|
+
|
|
159
|
+
artifact = _upload_file_to_static_storage(file_path, artifact_type)
|
|
160
|
+
if not artifact:
|
|
161
|
+
return artifact_type(artifact_input)
|
|
162
|
+
|
|
163
|
+
# Success path: return the uploaded artifact
|
|
164
|
+
return artifact
|
|
165
|
+
# Regular URL, return as-is
|
|
166
|
+
return artifact_type(artifact_input)
|
|
167
|
+
|
|
168
|
+
# Try to resolve and upload file path
|
|
169
|
+
file_path = _resolve_file_path(artifact_input)
|
|
170
|
+
if file_path:
|
|
171
|
+
artifact = _upload_file_to_static_storage(file_path, artifact_type)
|
|
172
|
+
if artifact:
|
|
173
|
+
return artifact
|
|
174
|
+
|
|
175
|
+
return artifact_input
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def normalize_artifact_input(
|
|
179
|
+
artifact_input: Any,
|
|
180
|
+
artifact_type: type[Any],
|
|
181
|
+
*,
|
|
182
|
+
accepted_types: tuple[type[Any], ...] | None = None,
|
|
183
|
+
) -> Any:
|
|
184
|
+
"""Normalize an artifact input, converting string paths to the specified artifact type.
|
|
185
|
+
|
|
186
|
+
This ensures consistency whether values come from user input or node connections.
|
|
187
|
+
String paths are uploaded to static storage and converted to artifact objects.
|
|
188
|
+
Objects that are already the correct artifact type are returned unchanged.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
artifact_input: Artifact input (may be string, artifact object, etc.)
|
|
192
|
+
artifact_type: The artifact class to create (ImageUrlArtifact, VideoUrlArtifact, AudioUrlArtifact)
|
|
193
|
+
accepted_types: Optional tuple of artifact types that should be passed through unchanged.
|
|
194
|
+
For example, for images, both ImageUrlArtifact and ImageArtifact are valid.
|
|
195
|
+
|
|
196
|
+
Returns:
|
|
197
|
+
Artifact of the specified type if input was a string path, otherwise returns input unchanged
|
|
198
|
+
"""
|
|
199
|
+
# Return unchanged if already the correct artifact type
|
|
200
|
+
if isinstance(artifact_input, artifact_type):
|
|
201
|
+
return artifact_input
|
|
202
|
+
|
|
203
|
+
# Also return unchanged if it's one of the accepted types (e.g., ImageArtifact for images)
|
|
204
|
+
if accepted_types and isinstance(artifact_input, accepted_types):
|
|
205
|
+
return artifact_input
|
|
206
|
+
|
|
207
|
+
# Process string paths
|
|
208
|
+
if isinstance(artifact_input, str) and artifact_input:
|
|
209
|
+
return _normalize_string_input(artifact_input, artifact_type)
|
|
210
|
+
|
|
211
|
+
return artifact_input
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def normalize_artifact_list(
|
|
215
|
+
artifact_list: list[Any],
|
|
216
|
+
artifact_type: type[Any],
|
|
217
|
+
*,
|
|
218
|
+
accepted_types: tuple[type[Any], ...] | None = None,
|
|
219
|
+
) -> list[Any]:
|
|
220
|
+
"""Normalize a list of artifact inputs, converting string paths to the specified artifact type.
|
|
221
|
+
|
|
222
|
+
This ensures consistency whether values come from user input or node connections.
|
|
223
|
+
String paths are uploaded to static storage and converted to artifact objects.
|
|
224
|
+
Objects that are already the correct artifact type are passed through unchanged.
|
|
225
|
+
|
|
226
|
+
Args:
|
|
227
|
+
artifact_list: List of artifact inputs (may contain strings, artifact objects, etc.)
|
|
228
|
+
artifact_type: The artifact class to create (ImageUrlArtifact, VideoUrlArtifact, AudioUrlArtifact)
|
|
229
|
+
accepted_types: Optional tuple of artifact types that should be passed through unchanged.
|
|
230
|
+
For example, for images, both ImageUrlArtifact and ImageArtifact are valid.
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
List with string paths converted to artifacts of the specified type
|
|
234
|
+
"""
|
|
235
|
+
if not artifact_list:
|
|
236
|
+
return artifact_list
|
|
237
|
+
|
|
238
|
+
normalized_list = []
|
|
239
|
+
for item in artifact_list:
|
|
240
|
+
normalized_item = normalize_artifact_input(item, artifact_type, accepted_types=accepted_types)
|
|
241
|
+
normalized_list.append(normalized_item)
|
|
242
|
+
return normalized_list
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
__all__ = ["normalize_artifact_input", "normalize_artifact_list"]
|
|
@@ -24,6 +24,13 @@ def create_image_preview(
|
|
|
24
24
|
Returns:
|
|
25
25
|
Base64 encoded data URL of the preview, or None if failed
|
|
26
26
|
"""
|
|
27
|
+
# Check if it's an SVG file - PIL cannot open SVG files
|
|
28
|
+
# TODO: Add SVG support using cairosvg or similar library to rasterize SVG files: https://github.com/griptape-ai/griptape-nodes/issues/3721
|
|
29
|
+
# before creating previews
|
|
30
|
+
if image_path.suffix.lower() == ".svg":
|
|
31
|
+
logger.debug(f"SVG file detected, cannot create preview with PIL (vector graphics not supported): {image_path}")
|
|
32
|
+
return None
|
|
33
|
+
|
|
27
34
|
try:
|
|
28
35
|
# Open and resize the image
|
|
29
36
|
with Image.open(image_path) as img:
|
|
@@ -53,6 +60,12 @@ def create_image_preview(
|
|
|
53
60
|
return data_url
|
|
54
61
|
|
|
55
62
|
except Exception as e:
|
|
63
|
+
# Check if error is due to SVG format
|
|
64
|
+
if "cannot identify image file" in str(e).lower() and image_path.suffix.lower() == ".svg":
|
|
65
|
+
logger.debug(
|
|
66
|
+
f"SVG file detected, cannot create preview with PIL (vector graphics not supported): {image_path}"
|
|
67
|
+
)
|
|
68
|
+
return None
|
|
56
69
|
logger.warning(f"Failed to create preview for {image_path}: {e}")
|
|
57
70
|
return None
|
|
58
71
|
|
|
@@ -73,6 +86,14 @@ def create_image_preview_from_bytes(
|
|
|
73
86
|
Base64 encoded data URL of the preview, or None if failed
|
|
74
87
|
"""
|
|
75
88
|
try:
|
|
89
|
+
# Check if content might be SVG by looking at first few bytes
|
|
90
|
+
# TODO: Add SVG support using cairosvg or similar library to rasterize SVG files: https://github.com/griptape-ai/griptape-nodes/issues/3721
|
|
91
|
+
# before creating previews
|
|
92
|
+
content_start = image_bytes[:100].decode("utf-8", errors="ignore").lower()
|
|
93
|
+
if "<svg" in content_start:
|
|
94
|
+
logger.debug("SVG file detected, cannot create preview with PIL (vector graphics not supported)")
|
|
95
|
+
return None
|
|
96
|
+
|
|
76
97
|
# Open image from bytes
|
|
77
98
|
with Image.open(io.BytesIO(image_bytes)) as img:
|
|
78
99
|
# Convert to RGB if necessary (for WebP/JPEG output)
|
|
@@ -101,6 +122,12 @@ def create_image_preview_from_bytes(
|
|
|
101
122
|
return data_url
|
|
102
123
|
|
|
103
124
|
except Exception as e:
|
|
125
|
+
# Check if error is due to SVG format
|
|
126
|
+
if "cannot identify image file" in str(e).lower():
|
|
127
|
+
content_start = image_bytes[:100].decode("utf-8", errors="ignore").lower()
|
|
128
|
+
if "<svg" in content_start:
|
|
129
|
+
logger.debug("SVG file detected, cannot create preview with PIL (vector graphics not supported)")
|
|
130
|
+
return None
|
|
104
131
|
logger.warning(f"Failed to create preview from bytes: {e}")
|
|
105
132
|
return None
|
|
106
133
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
griptape_nodes/__init__.py,sha256=WxWjICLxwuyZGDpPUyCmj047GbN7PIspi4YMWgmrrQc,671
|
|
2
2
|
griptape_nodes/__main__.py,sha256=fJhor6_1A27abwbnceyNheONP1iXkPzjjsV5jBEfF2M,144
|
|
3
3
|
griptape_nodes/api_client/__init__.py,sha256=9iyLcPbcXjxxLhhCSYQ5zgvlwxceyrNXDE8YhOIVH8g,216
|
|
4
|
-
griptape_nodes/api_client/client.py,sha256=
|
|
4
|
+
griptape_nodes/api_client/client.py,sha256=df6fus5zNFOSFQJft2nmoo-hsFPoNfCihZRwWymAzcA,10006
|
|
5
5
|
griptape_nodes/api_client/request_client.py,sha256=Z5lJVoG2a9hudTAQTnniaCHbBko0X1FyoakiQMimq7g,9713
|
|
6
6
|
griptape_nodes/app/.python-version,sha256=e1X45ntWI8S-8_ppEojalDfXnTq6FW3kjUgdsyrH0W0,5
|
|
7
7
|
griptape_nodes/app/__init__.py,sha256=DB-DTsgcNnbmEClXEouwzGhrmo3gHBCWXB9BkPGpdQI,90
|
|
@@ -9,19 +9,23 @@ griptape_nodes/app/app.py,sha256=bbaRe1khQNRZ1fziDdeokkR-M3K7tvKDpCl4eVm-R4g,180
|
|
|
9
9
|
griptape_nodes/app/watch.py,sha256=hKVP_SuV9C17bH1h9o4uIVTKH-IL_-0iyHaNYmILTWU,1594
|
|
10
10
|
griptape_nodes/bootstrap/__init__.py,sha256=ENv3SIzQ9TtlRrg1y4e4CnoBpJaFpFSkNpTFBV8X5Ls,25
|
|
11
11
|
griptape_nodes/bootstrap/utils/__init__.py,sha256=tlNEApJLZazcBNhxkTdup4URwznnz4nZxjSaRfFrTBM,31
|
|
12
|
-
griptape_nodes/bootstrap/utils/python_subprocess_executor.py,sha256=
|
|
12
|
+
griptape_nodes/bootstrap/utils/python_subprocess_executor.py,sha256=jZltd_CgDsa7lcxieI71iouqXfRDxyXrg0wfIFuAUDA,6330
|
|
13
|
+
griptape_nodes/bootstrap/utils/subprocess_websocket_base.py,sha256=PfgpdRVe_d-jLPbUu3a_OzhWsm7RBZNWicPMTowyUkA,2809
|
|
14
|
+
griptape_nodes/bootstrap/utils/subprocess_websocket_listener.py,sha256=6bBKO-DaB2QT9FX9vLckQgYcCXHZ6kKCU3lVwqbVo04,4626
|
|
15
|
+
griptape_nodes/bootstrap/utils/subprocess_websocket_sender.py,sha256=DDtCr8UgkSD8h7zhduWEXuEpjusKcDyksoznaK99EAg,4678
|
|
13
16
|
griptape_nodes/bootstrap/workflow_executors/__init__.py,sha256=pyjN81-eLtjyECFYLXOtMCixiiI9qBi5yald86iM7Ek,34
|
|
14
|
-
griptape_nodes/bootstrap/workflow_executors/local_session_workflow_executor.py,sha256=
|
|
17
|
+
griptape_nodes/bootstrap/workflow_executors/local_session_workflow_executor.py,sha256=yS3b3wrqZbxRuNRDFynFsMI7cThhaNa0UERGarG_1Xw,9923
|
|
15
18
|
griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py,sha256=jp81z4QFSuQsXigKN0h2Ywo0Tr_whbxFG-TJ7MCrS2Q,10263
|
|
16
|
-
griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py,sha256=
|
|
19
|
+
griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py,sha256=zBtTN8_BF9oq6NoujpBTsY48zX5ttVSOg8nw-LgF4so,8467
|
|
17
20
|
griptape_nodes/bootstrap/workflow_executors/utils/__init__.py,sha256=IEz4GHM4-w_u6VpLemrj-V38v8aZJinr5Wya9ucEad0,40
|
|
18
21
|
griptape_nodes/bootstrap/workflow_executors/utils/subprocess_script.py,sha256=LCW6P3s3DTG_cUvG41l4GxRyj43c1p9yYlcJMACeW3s,1659
|
|
19
22
|
griptape_nodes/bootstrap/workflow_executors/workflow_executor.py,sha256=c9FQXcvskas9N3G5OnTQO2SxJZJVoxbn7lug1GIRUBw,1074
|
|
20
23
|
griptape_nodes/bootstrap/workflow_publishers/__init__.py,sha256=7ncdCGtEArgTBgSFDNCSBoIIAJpzlph1wTd2wipwvvM,35
|
|
24
|
+
griptape_nodes/bootstrap/workflow_publishers/local_session_workflow_publisher.py,sha256=v7ZwNv7C1RZEavv5y1RvdNyepAfoSYS6PuHFib0iTec,8355
|
|
21
25
|
griptape_nodes/bootstrap/workflow_publishers/local_workflow_publisher.py,sha256=ZLe0Bf-LVdeLgTkfzndawUaB-1P8AdZrM732ZMxcNaw,1721
|
|
22
|
-
griptape_nodes/bootstrap/workflow_publishers/subprocess_workflow_publisher.py,sha256=
|
|
26
|
+
griptape_nodes/bootstrap/workflow_publishers/subprocess_workflow_publisher.py,sha256=V3RnyIbT63NmwyMIhpgshBd5X_aaBbeKK1tEIna1hcY,3953
|
|
23
27
|
griptape_nodes/bootstrap/workflow_publishers/utils/__init__.py,sha256=Kj-IIxgg01ihyUmLWgZu4ZJ6M7V1fK4Efw9quCcu-ZM,41
|
|
24
|
-
griptape_nodes/bootstrap/workflow_publishers/utils/subprocess_script.py,sha256=
|
|
28
|
+
griptape_nodes/bootstrap/workflow_publishers/utils/subprocess_script.py,sha256=bj4hnuLPDV084_X2nMxqcjMGeWI-RA3ikm7QF7aZPfI,2763
|
|
25
29
|
griptape_nodes/cli/__init__.py,sha256=HuXHtxqDMtpYRokxiFYuNB7R5EgkOshPil273kTmgNg,33
|
|
26
30
|
griptape_nodes/cli/commands/__init__.py,sha256=8EbS15rm9xrbcPocuQO2RmOwSD1BBwa8iDgPSdsvzuU,35
|
|
27
31
|
griptape_nodes/cli/commands/config.py,sha256=zh5rs2vCY_x9dEUK2jtQQJGcjlJzhpJJ-EgHHvkrvdg,2302
|
|
@@ -42,7 +46,7 @@ griptape_nodes/common/macro_parser/matching.py,sha256=hnlPIihz8W1TGnfq4anbBGciwg
|
|
|
42
46
|
griptape_nodes/common/macro_parser/parsing.py,sha256=_37L3lCQFeetamWIiHT0C7eW1E3Wyx5V8y8OWzIUw_g,7428
|
|
43
47
|
griptape_nodes/common/macro_parser/resolution.py,sha256=30_bAIRMKWw-kM3E1ne-my16xT1Wd734JMmZSOZtNPA,6937
|
|
44
48
|
griptape_nodes/common/macro_parser/segments.py,sha256=r-WbZas1nSc-PlEdAZ7DycNoD6IUf3R_nhGo3T9vIa8,1010
|
|
45
|
-
griptape_nodes/common/node_executor.py,sha256=
|
|
49
|
+
griptape_nodes/common/node_executor.py,sha256=h8f-NabGopj_FHQTDFUTfxEESMNr5K1qUOmOs59y7OE,149641
|
|
46
50
|
griptape_nodes/common/project_templates/__init__.py,sha256=5DP6Sa6ClsdDcjD30pkK0iTTysTgGdRKEkeY7ztHZyc,1541
|
|
47
51
|
griptape_nodes/common/project_templates/default_project_template.py,sha256=PJFPfziH0EOGVxU5L0wZnc21bVVweW4S7wcnGPF45Co,3120
|
|
48
52
|
griptape_nodes/common/project_templates/defaults/README.md,sha256=1ou6_OFi7-t86nj-7tulW1vxNMtsvkJmNxr6SseG8hA,1080
|
|
@@ -63,14 +67,14 @@ griptape_nodes/drivers/thread_storage/griptape_cloud_thread_storage_driver.py,sh
|
|
|
63
67
|
griptape_nodes/drivers/thread_storage/local_thread_storage_driver.py,sha256=I1p2XudP89sUMsRa0DBxGXzsOFEpURLbtF01C_Wpkts,5406
|
|
64
68
|
griptape_nodes/drivers/thread_storage/thread_storage_backend.py,sha256=QXLvFOZrFx7aPBmwVGaN-IHxwRAf_sXN7YWKY6tcwgE,204
|
|
65
69
|
griptape_nodes/exe_types/__init__.py,sha256=wGGwKGX9-TSarUFbXpDvdU_J7eXIbWTBl_NCLOZa-G8,32
|
|
66
|
-
griptape_nodes/exe_types/base_iterative_nodes.py,sha256=
|
|
70
|
+
griptape_nodes/exe_types/base_iterative_nodes.py,sha256=hwEA0QWh4H2M6g8iuVahI_TUK8nm-A9r3UJS7EtEa28,43794
|
|
67
71
|
griptape_nodes/exe_types/connections.py,sha256=HcM_fwWivMsXk5q6K7ZBSJpmK9THQwX_xLS_daF0PDQ,21737
|
|
68
72
|
griptape_nodes/exe_types/core_types.py,sha256=XrMT0Rf0bPZBcx06f1GUTi5G_IwLgdyzGjBKkUwRh3M,101505
|
|
69
73
|
griptape_nodes/exe_types/flow.py,sha256=2iAh3vN5wnMVxTc5jcPBg9TSiASq1DGIm5jgpO9Bdq4,5732
|
|
70
74
|
griptape_nodes/exe_types/node_groups/__init__.py,sha256=u91XCSR4OAAr6x5kYq8i14mtHEWGQF_fSDUsWHmiOdY,346
|
|
71
75
|
griptape_nodes/exe_types/node_groups/base_iterative_node_group.py,sha256=sPPy3Psl-Ku_R46upWm_8hIGFLNPeLpUBN_Sm4RzXzg,9655
|
|
72
76
|
griptape_nodes/exe_types/node_groups/base_node_group.py,sha256=loDdJKllRPpWSSk-jJpqbBto80yn5oZGc6Jl-VXa_8A,3955
|
|
73
|
-
griptape_nodes/exe_types/node_groups/subflow_node_group.py,sha256=
|
|
77
|
+
griptape_nodes/exe_types/node_groups/subflow_node_group.py,sha256=rTW0Uili0E_a5ho8p9bloNDLUjCUuxwgEgJGXfZ4KUY,49273
|
|
74
78
|
griptape_nodes/exe_types/node_types.py,sha256=Hrzun9DN4FA-Yk-YQXBFyGrH1-kzszd9eVq4y6rmV5Y,84226
|
|
75
79
|
griptape_nodes/exe_types/param_components/README.md,sha256=mcNFxJIan9CGTnecsrJ8mkHC55dlA3fb7k4HFznou-k,14850
|
|
76
80
|
griptape_nodes/exe_types/param_components/__init__.py,sha256=ocm75WnsgiD6ozKVGFhoH9cQe_FEzeF2osxrRujOes0,60
|
|
@@ -84,23 +88,24 @@ griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_file_para
|
|
|
84
88
|
griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_parameter.py,sha256=zcBRQP0eZJloSdPQwJFw89B6QDHECnrosRZUy8mE2fM,1401
|
|
85
89
|
griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_variant_parameter.py,sha256=FaaDZ4dvZJCnpqSOKfJ5nR1klgl07JZto2A7gxhUi3o,5290
|
|
86
90
|
griptape_nodes/exe_types/param_components/huggingface/huggingface_utils.py,sha256=cE0Ht81kDcZjlN_2VoRirCA4zMlrG9GFlcptn-gC2tU,4696
|
|
87
|
-
griptape_nodes/exe_types/param_components/log_parameter.py,sha256=
|
|
91
|
+
griptape_nodes/exe_types/param_components/log_parameter.py,sha256=aLXwmoD4b5CS-Jlv2W-xnDNr4ufajuoEOFhVUAwVPdc,4261
|
|
88
92
|
griptape_nodes/exe_types/param_components/progress_bar_component.py,sha256=GrAFTOrLNAx6q9zfOqiioPTG_NLHKhTe9NiZOo6zGSc,1949
|
|
89
93
|
griptape_nodes/exe_types/param_components/seed_parameter.py,sha256=I48cVAojrD5oX4CT7v0x9LX6MrKVklywkp8IjE5pGIo,2321
|
|
94
|
+
griptape_nodes/exe_types/param_components/subflow_execution_component.py,sha256=NnIIk_0aKMrpa-ricD9_bwMJmghlpwBLO95iACuJNS4,13177
|
|
90
95
|
griptape_nodes/exe_types/param_types/__init__.py,sha256=xEEmKvIFF6M7zVjQZCupbbv6SZKt-itD-rPtfRhxJVg,53
|
|
91
|
-
griptape_nodes/exe_types/param_types/parameter_audio.py,sha256=
|
|
96
|
+
griptape_nodes/exe_types/param_types/parameter_audio.py,sha256=JmctLDsuo8lEOBlDjrHs1be8HUub7IZDa8Rimpng1SE,10330
|
|
92
97
|
griptape_nodes/exe_types/param_types/parameter_bool.py,sha256=VS76CODOy7_1MJI9spxmi9VwL3fwCxRKaj_8zpqB7dw,8215
|
|
93
98
|
griptape_nodes/exe_types/param_types/parameter_button.py,sha256=lrFnw4dBRKTSsaMxSVMOwtAV8a-Tcex2Tf58u25qCy8,17292
|
|
94
99
|
griptape_nodes/exe_types/param_types/parameter_dict.py,sha256=vbgasnkx9U9-h43geRhLjQ60ekhFlLBvuCVT9wHgWdY,6016
|
|
95
100
|
griptape_nodes/exe_types/param_types/parameter_float.py,sha256=9msvMnmzYGNpqFpGyTT4tswiAlHomo9Y5EiYsydT7IM,6793
|
|
96
|
-
griptape_nodes/exe_types/param_types/parameter_image.py,sha256=
|
|
101
|
+
griptape_nodes/exe_types/param_types/parameter_image.py,sha256=yV6WAx_2hR4LWZtiqR9Z_xe9jFNdnwg16vZsx-SPGKI,10162
|
|
97
102
|
griptape_nodes/exe_types/param_types/parameter_int.py,sha256=06h1QpWaWLeP2tlRRW5IOGO-t_ZlxsWqnezlgoyBKaE,6942
|
|
98
103
|
griptape_nodes/exe_types/param_types/parameter_json.py,sha256=M5A0_XhTKZ8qVBd1db55UA23H3nmaqryaITeN2-GwB0,9961
|
|
99
|
-
griptape_nodes/exe_types/param_types/parameter_number.py,sha256=
|
|
104
|
+
griptape_nodes/exe_types/param_types/parameter_number.py,sha256=acmFnpeYI0Gi2yVYmn9ftkruBxR_TpjDrpYi3Kj0vc8,15372
|
|
100
105
|
griptape_nodes/exe_types/param_types/parameter_range.py,sha256=fkCBN0X09fAfTG9AhKQ3Nxkit_8NrFi4IGQPpmOQR8k,14689
|
|
101
106
|
griptape_nodes/exe_types/param_types/parameter_string.py,sha256=-Q_9FwPtCXzpbv1C5FixLEET0c9WLJ228168IaSlZEU,9583
|
|
102
|
-
griptape_nodes/exe_types/param_types/parameter_three_d.py,sha256=
|
|
103
|
-
griptape_nodes/exe_types/param_types/parameter_video.py,sha256=
|
|
107
|
+
griptape_nodes/exe_types/param_types/parameter_three_d.py,sha256=xv-uUj9vZPjKNcotJCXm3GYhsIbQLEN7GkTn9G_2jsA,9155
|
|
108
|
+
griptape_nodes/exe_types/param_types/parameter_video.py,sha256=1DkHeW0mEcPYlcTVPN0dq-u33-SzpvyqLJ_ugn2Kj_k,10250
|
|
104
109
|
griptape_nodes/exe_types/type_validator.py,sha256=RTz1vX09jzQpHhozITMJ0siOZUXvsERDhrApjdaM1WM,1120
|
|
105
110
|
griptape_nodes/machines/__init__.py,sha256=v0jkwr-CFOLmfEYUQvX8BKQLOdvhSsA6toXkdHcPGUE,30
|
|
106
111
|
griptape_nodes/machines/control_flow.py,sha256=mmiA7OHXG3Nq36uFPKSGVgqm-ws-T21vzHgvF-um0hg,23007
|
|
@@ -208,7 +213,7 @@ griptape_nodes/retained_mode/managers/model_manager.py,sha256=3lj2X8vIvDSERPtR2V
|
|
|
208
213
|
griptape_nodes/retained_mode/managers/node_manager.py,sha256=BG0-z2-pDjzgS5VC3u3p7-jGUJ5nGSGSShbSv9WseoA,229244
|
|
209
214
|
griptape_nodes/retained_mode/managers/object_manager.py,sha256=ZpovmhnBKG_JCn4Pde9idlx2eBZjKvR7k9DHUYqD-r4,12882
|
|
210
215
|
griptape_nodes/retained_mode/managers/operation_manager.py,sha256=4Vn_79vHrawy3wJVUx52tfblO4mURww58nb5RtCTpKU,20190
|
|
211
|
-
griptape_nodes/retained_mode/managers/os_manager.py,sha256=
|
|
216
|
+
griptape_nodes/retained_mode/managers/os_manager.py,sha256=0PdV11cjlGfOeqGx0XQl43L-yasdDd4z4sOPvdHhLM4,142434
|
|
212
217
|
griptape_nodes/retained_mode/managers/project_manager.py,sha256=-K-anrxEVKInFMPLY-cV3ipqEh8hMELGHKbecJJJVa8,49035
|
|
213
218
|
griptape_nodes/retained_mode/managers/resource_components/__init__.py,sha256=2FHpZFw2N1-oHfMCfrnB_XpF8_-2aSNtAZWh5zQTGL0,35
|
|
214
219
|
griptape_nodes/retained_mode/managers/resource_components/capability_field.py,sha256=jZ5ONfdYVd5_MKlSKvUch1X2n1oHzMSeZW8UZ1a_RsU,1504
|
|
@@ -239,7 +244,7 @@ griptape_nodes/servers/static.py,sha256=R0nnMUCRDE0BxygZ-kdxhROAXgJPsIJBAEp7H_sJ
|
|
|
239
244
|
griptape_nodes/traits/__init__.py,sha256=bTLXTiZTJz2z15RRLoPI4nvLnNW9FiLcKL_2pT4E10g,32
|
|
240
245
|
griptape_nodes/traits/add_param_button.py,sha256=27RZDVLMD0HmRF6hjfz7iV7LBau92vMc_d2eD2Ey8fA,649
|
|
241
246
|
griptape_nodes/traits/button.py,sha256=Nweq5oGdPpSTfyX3Dr2mjgBYwLUrokxtergnOCTiPpU,15962
|
|
242
|
-
griptape_nodes/traits/clamp.py,sha256=
|
|
247
|
+
griptape_nodes/traits/clamp.py,sha256=BZVHiWfBNePWaPMaLyOgtcWzkM7Ls4hcPlm_afmGiIs,1030
|
|
243
248
|
griptape_nodes/traits/color_picker.py,sha256=ySKaoZw319yfuTSEtkVT2vSR6Goy9pBm4rusjx95F0c,3024
|
|
244
249
|
griptape_nodes/traits/compare.py,sha256=X-BXGemRDxQV4EX8X24LdtcwMWwfQ1jGqDvH2bSiSuc,521
|
|
245
250
|
griptape_nodes/traits/compare_images.py,sha256=KW0WlwsJP6nBoC1irdeRnUWUnZIJvlROlDhyWhX8iEs,1594
|
|
@@ -254,12 +259,13 @@ griptape_nodes/traits/traits.json,sha256=JwFsOaFfLeR1ohcyh6XApc5N2-mWMPGSaYbpA-m
|
|
|
254
259
|
griptape_nodes/updater/__init__.py,sha256=ZTVr-zI4Jf-cFAXU3nX9L7oTCFFWsjlrkHQiZidDhB0,2570
|
|
255
260
|
griptape_nodes/updater/__main__.py,sha256=lhMMctbBeni57ximitvkwqJ1TQzk79Jg9w0rkKjtp5Y,79
|
|
256
261
|
griptape_nodes/utils/__init__.py,sha256=kzDZW_VPyxWJFonM3kYTl7A91_JmtHPK0Io4KPLTYT4,122
|
|
262
|
+
griptape_nodes/utils/artifact_normalization.py,sha256=BofLyLnOaNCofAkeXSOhwV6BfBOjHH3C1cKglXOwAew,9157
|
|
257
263
|
griptape_nodes/utils/async_utils.py,sha256=4IrW8Ub8iJ2QB9yguZtfN1EB9B5nXHS7jbDaLOHWso0,4844
|
|
258
264
|
griptape_nodes/utils/dict_utils.py,sha256=1VP2EoyOP0nswoAgjPehpA0izpkygWRX7L--ArN6LV8,7314
|
|
259
265
|
griptape_nodes/utils/file_utils.py,sha256=D7VBkYl2MI0GUHdvI3IDB-fRN2XTp4xDpANnUcnEVvY,5524
|
|
260
266
|
griptape_nodes/utils/git_utils.py,sha256=Gz55JqSFPuxbTzvnXHKHsbMy3PvkNDAYyMQ7szekcL0,45674
|
|
261
267
|
griptape_nodes/utils/huggingface_utils.py,sha256=txR5XS_01W3TvsH4SQ3AJrFy8oS8Ah9M-ePRSs3jHYA,4737
|
|
262
|
-
griptape_nodes/utils/image_preview.py,sha256=
|
|
268
|
+
griptape_nodes/utils/image_preview.py,sha256=0lNBWAm4-bNAqpiD5AWeeIE3-5sdc26SX_sIcFuhU5w,6106
|
|
263
269
|
griptape_nodes/utils/library_utils.py,sha256=UwTdOJcPwJljWYD-DbctjExicaw-6isXZ-Js02jrGCw,4224
|
|
264
270
|
griptape_nodes/utils/metaclasses.py,sha256=RSKyAvZppH_hbMugmUmIr8QqOg1sYY4uRNfQybD4O8Q,287
|
|
265
271
|
griptape_nodes/utils/uv_utils.py,sha256=ZK37LmacKfxMVKkcIOyJ35HOXgV6sFWE9CzgKPmaRU0,519
|
|
@@ -276,7 +282,7 @@ griptape_nodes/version_compatibility/versions/v0_65_5/__init__.py,sha256=4UyspOV
|
|
|
276
282
|
griptape_nodes/version_compatibility/versions/v0_65_5/flux_2_removed_parameters.py,sha256=jOlmY5kKHXh8HPzAUtvwMJqzD4bP7pkE--yHUb7jTRA,3305
|
|
277
283
|
griptape_nodes/version_compatibility/versions/v0_7_0/__init__.py,sha256=IzPPmGK86h2swfGGTOHyVcBIlOng6SjgWQzlbf3ngmo,51
|
|
278
284
|
griptape_nodes/version_compatibility/versions/v0_7_0/local_executor_argument_addition.py,sha256=Thx8acnbw5OychhwEEj9aFxvbPe7Wgn4V9ZmZ7KRZqc,2082
|
|
279
|
-
griptape_nodes-0.
|
|
280
|
-
griptape_nodes-0.
|
|
281
|
-
griptape_nodes-0.
|
|
282
|
-
griptape_nodes-0.
|
|
285
|
+
griptape_nodes-0.71.0.dist-info/WHEEL,sha256=XV0cjMrO7zXhVAIyyc8aFf1VjZ33Fen4IiJk5zFlC3g,80
|
|
286
|
+
griptape_nodes-0.71.0.dist-info/entry_points.txt,sha256=qvevqd3BVbAV5TcantnAm0ouqaqYKhsRO3pkFymWLWM,82
|
|
287
|
+
griptape_nodes-0.71.0.dist-info/METADATA,sha256=UIMyQPSauCEqiFVzr6fRyRF1XMIYVCqDgY-Iv4L76GE,5373
|
|
288
|
+
griptape_nodes-0.71.0.dist-info/RECORD,,
|
|
File without changes
|