griptape-nodes 0.66.2__py3-none-any.whl → 0.68.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.
Files changed (34) hide show
  1. griptape_nodes/bootstrap/utils/python_subprocess_executor.py +17 -4
  2. griptape_nodes/common/node_executor.py +295 -18
  3. griptape_nodes/exe_types/core_types.py +28 -1
  4. griptape_nodes/exe_types/node_groups/__init__.py +2 -2
  5. griptape_nodes/exe_types/node_groups/base_iterative_node_group.py +81 -10
  6. griptape_nodes/exe_types/node_groups/base_node_group.py +64 -1
  7. griptape_nodes/exe_types/node_groups/subflow_node_group.py +0 -34
  8. griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_variant_parameter.py +152 -0
  9. griptape_nodes/exe_types/param_components/seed_parameter.py +3 -2
  10. griptape_nodes/exe_types/param_types/parameter_audio.py +3 -0
  11. griptape_nodes/exe_types/param_types/parameter_bool.py +3 -0
  12. griptape_nodes/exe_types/param_types/parameter_button.py +3 -0
  13. griptape_nodes/exe_types/param_types/parameter_dict.py +151 -0
  14. griptape_nodes/exe_types/param_types/parameter_float.py +3 -0
  15. griptape_nodes/exe_types/param_types/parameter_image.py +3 -0
  16. griptape_nodes/exe_types/param_types/parameter_int.py +3 -0
  17. griptape_nodes/exe_types/param_types/parameter_json.py +268 -0
  18. griptape_nodes/exe_types/param_types/parameter_number.py +3 -0
  19. griptape_nodes/exe_types/param_types/parameter_range.py +393 -0
  20. griptape_nodes/exe_types/param_types/parameter_string.py +3 -0
  21. griptape_nodes/exe_types/param_types/parameter_three_d.py +3 -0
  22. griptape_nodes/exe_types/param_types/parameter_video.py +3 -0
  23. griptape_nodes/retained_mode/events/library_events.py +2 -0
  24. griptape_nodes/retained_mode/events/parameter_events.py +89 -1
  25. griptape_nodes/retained_mode/managers/event_manager.py +176 -10
  26. griptape_nodes/retained_mode/managers/flow_manager.py +2 -1
  27. griptape_nodes/retained_mode/managers/library_manager.py +14 -4
  28. griptape_nodes/retained_mode/managers/node_manager.py +187 -7
  29. griptape_nodes/retained_mode/managers/workflow_manager.py +58 -16
  30. griptape_nodes/utils/file_utils.py +58 -0
  31. {griptape_nodes-0.66.2.dist-info → griptape_nodes-0.68.0.dist-info}/METADATA +1 -1
  32. {griptape_nodes-0.66.2.dist-info → griptape_nodes-0.68.0.dist-info}/RECORD +34 -30
  33. {griptape_nodes-0.66.2.dist-info → griptape_nodes-0.68.0.dist-info}/WHEEL +1 -1
  34. {griptape_nodes-0.66.2.dist-info → griptape_nodes-0.68.0.dist-info}/entry_points.txt +0 -0
@@ -938,9 +938,17 @@ class WorkflowManager:
938
938
  # Use provided metadata object as the new metadata
939
939
  new_metadata = request.workflow_metadata
940
940
  # Allow JSON dicts from frontend by coercing to WorkflowMetadata
941
+ # Merge with existing metadata to ensure required fields are present
941
942
  if isinstance(new_metadata, dict):
943
+ # Start with existing metadata as base, then overlay provided fields
944
+ existing_metadata_dict = resolution.workflow.metadata.model_dump()
945
+ # Only overlay non-None values from the incoming dict to preserve required fields
946
+ for key, value in new_metadata.items():
947
+ if value is not None or key in ("description", "image", "branched_from", "workflow_shape"):
948
+ # Allow explicit None for optional fields, but preserve required fields if incoming is None
949
+ existing_metadata_dict[key] = value
942
950
  try:
943
- new_metadata = WorkflowMetadata.model_validate(new_metadata)
951
+ new_metadata = WorkflowMetadata.model_validate(existing_metadata_dict)
944
952
  except Exception as e:
945
953
  return SetWorkflowMetadataResultFailure(result_details=f"Invalid workflow_metadata: {e!s}")
946
954
  # Refresh last_modified_date to reflect this change
@@ -1562,6 +1570,41 @@ class WorkflowManager:
1562
1570
  else:
1563
1571
  return None
1564
1572
 
1573
+ def _generate_unique_filename(self, base_name: str) -> str:
1574
+ """Generate a unique filename for a workflow, avoiding collisions.
1575
+
1576
+ Uses the same logic as object_manager:
1577
+ 1. If base name has no collision, use it as-is
1578
+ 2. If collision exists and name ends in a number, find first free prefix + integer
1579
+ 3. If collision exists and name doesn't end in a number, append _1, _2, etc.
1580
+
1581
+ Args:
1582
+ base_name: The desired base name for the workflow
1583
+
1584
+ Returns:
1585
+ A unique filename that doesn't exist in the workspace
1586
+ """
1587
+ workspace_path = GriptapeNodes.ConfigManager().workspace_path
1588
+ base_path = workspace_path.joinpath(f"{base_name}.py")
1589
+ if not base_path.exists():
1590
+ return base_name
1591
+
1592
+ pattern_match = re.search(r"\d+$", base_name)
1593
+ if pattern_match is not None:
1594
+ # Name ends in a number - strip it and find first free integer
1595
+ incremental_prefix = base_name[: pattern_match.start()]
1596
+ else:
1597
+ # Name doesn't end in a number - append underscore prefix
1598
+ incremental_prefix = f"{base_name}_"
1599
+
1600
+ curr_idx = 1
1601
+ while True:
1602
+ candidate_name = f"{incremental_prefix}{curr_idx}"
1603
+ candidate_path = workspace_path.joinpath(f"{candidate_name}.py")
1604
+ if not candidate_path.exists():
1605
+ return candidate_name
1606
+ curr_idx += 1
1607
+
1565
1608
  def _determine_save_target(
1566
1609
  self, requested_file_name: str | None, current_workflow_name: str | None
1567
1610
  ) -> SaveWorkflowTargetInfo:
@@ -1587,27 +1630,25 @@ class WorkflowManager:
1587
1630
  current_workflow = WorkflowRegistry.get_workflow_by_name(current_workflow_name)
1588
1631
 
1589
1632
  # Determine scenario and build target info
1590
- if (target_workflow and target_workflow.metadata.is_template) or (
1591
- current_workflow and current_workflow.metadata.is_template
1592
- ):
1593
- # Template workflows always create new copies with unique names
1633
+ # Only treat as SAVE_FROM_TEMPLATE if this is a Griptape-provided template.
1634
+ # User-marked templates (is_template=True but is_griptape_provided=False) should be saved normally.
1635
+ target_is_griptape_template = (
1636
+ target_workflow and target_workflow.metadata.is_template and target_workflow.metadata.is_griptape_provided
1637
+ )
1638
+ current_is_griptape_template = (
1639
+ current_workflow
1640
+ and current_workflow.metadata.is_template
1641
+ and current_workflow.metadata.is_griptape_provided
1642
+ )
1643
+ if target_is_griptape_template or current_is_griptape_template:
1644
+ # Griptape-provided template workflows always create new copies with unique names
1594
1645
  scenario = WorkflowManager.SaveWorkflowScenario.SAVE_FROM_TEMPLATE
1595
1646
  template_workflow = target_workflow or current_workflow
1596
1647
  if template_workflow is None:
1597
1648
  msg = "Save From Template scenario requires either target_workflow or current_workflow to be present"
1598
1649
  raise ValueError(msg)
1599
1650
  base_name = requested_file_name if requested_file_name else template_workflow.metadata.name
1600
-
1601
- # Find unique filename
1602
- curr_idx = 1
1603
- while True:
1604
- candidate_name = f"{base_name}_{curr_idx}"
1605
- candidate_path = GriptapeNodes.ConfigManager().workspace_path.joinpath(f"{candidate_name}.py")
1606
- if not candidate_path.exists():
1607
- break
1608
- curr_idx += 1
1609
-
1610
- file_name = candidate_name
1651
+ file_name = self._generate_unique_filename(base_name)
1611
1652
  creation_date = datetime.now(tz=UTC)
1612
1653
  branched_from = None
1613
1654
  relative_file_path = f"{file_name}.py"
@@ -3576,6 +3617,7 @@ class WorkflowManager:
3576
3617
  "ui_options",
3577
3618
  "settable",
3578
3619
  "is_user_defined",
3620
+ "private",
3579
3621
  "parent_container_name",
3580
3622
  "parent_element_name",
3581
3623
  ]
@@ -99,3 +99,61 @@ def find_all_files_in_directory(directory: Path, pattern: str) -> list[Path]:
99
99
  logger.debug("Found %d file(s) matching pattern '%s' in directory: %s", len(matches), pattern, directory)
100
100
 
101
101
  return matches
102
+
103
+
104
+ def find_files_recursive(directory: Path, pattern: str, *, skip_hidden: bool = True) -> set[Path]:
105
+ """Search directory recursively for files matching pattern.
106
+
107
+ Args:
108
+ directory: Directory to search in
109
+ pattern: Glob pattern to match files against (e.g., '*.json', '*library*.json')
110
+ skip_hidden: If True, skip hidden directories (those starting with .). Default is True.
111
+ This is more efficient when dealing with large hidden directories like .git, .venv, etc.
112
+
113
+ Returns:
114
+ Set of all matching file paths. Returns empty set if none found.
115
+
116
+ Examples:
117
+ >>> find_files_recursive(Path("/workspace"), "*.json")
118
+ {Path("/workspace/a.json"), Path("/workspace/sub/b.json")}
119
+ >>> find_files_recursive(Path("/workspace"), "*.json", skip_hidden=False)
120
+ {Path("/workspace/a.json"), Path("/workspace/.config/b.json")}
121
+ >>> find_files_recursive(Path("/empty"), "*.txt")
122
+ set()
123
+ """
124
+ if not directory.exists():
125
+ logger.debug("Directory does not exist: %s", directory)
126
+ return set()
127
+
128
+ if not directory.is_dir():
129
+ logger.debug("Path is not a directory: %s", directory)
130
+ return set()
131
+
132
+ def _recurse(path: Path) -> set[Path]:
133
+ """Recursively find files."""
134
+ results = set()
135
+ try:
136
+ for item in path.iterdir():
137
+ # Skip hidden files/directories if requested
138
+ if skip_hidden and item.name.startswith("."):
139
+ continue
140
+
141
+ if item.is_file() and fnmatch(item.name, pattern):
142
+ results.add(item)
143
+ elif item.is_dir():
144
+ # Recurse into directories
145
+ results.update(_recurse(item))
146
+ except (PermissionError, OSError) as e:
147
+ # Skip directories we can't access
148
+ logger.debug("Cannot access directory %s: %s", path, e)
149
+
150
+ return results
151
+
152
+ matches = _recurse(directory)
153
+
154
+ if not matches:
155
+ logger.debug("No files matching pattern '%s' found in directory: %s", pattern, directory)
156
+ else:
157
+ logger.debug("Found %d file(s) matching pattern '%s' in directory: %s", len(matches), pattern, directory)
158
+
159
+ return matches
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: griptape-nodes
3
- Version: 0.66.2
3
+ Version: 0.68.0
4
4
  Summary: Add your description here
5
5
  Requires-Dist: griptape>=1.8.12
6
6
  Requires-Dist: pydantic>=2.10.6
@@ -9,7 +9,7 @@ griptape_nodes/app/app.py,sha256=48q09c2xDjvbf4Qa1_buQhnPjR2jqkXo428GeBRkw8g,160
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=JUCWV1G8oz1LtBhiLHoTtaYPG14zsYoj3bDvz3cWBQk,4466
12
+ griptape_nodes/bootstrap/utils/python_subprocess_executor.py,sha256=_XUQxrxt8n3vPv3_UHFlaAFRSODLhzKmAK5iNcf92lg,4847
13
13
  griptape_nodes/bootstrap/workflow_executors/__init__.py,sha256=pyjN81-eLtjyECFYLXOtMCixiiI9qBi5yald86iM7Ek,34
14
14
  griptape_nodes/bootstrap/workflow_executors/local_session_workflow_executor.py,sha256=Zqb9yQe-3PxcaCEpLVcq6CQPn5iwjl5TJjQehm1fvZ0,16652
15
15
  griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py,sha256=jp81z4QFSuQsXigKN0h2Ywo0Tr_whbxFG-TJ7MCrS2Q,10263
@@ -42,7 +42,7 @@ griptape_nodes/common/macro_parser/matching.py,sha256=hnlPIihz8W1TGnfq4anbBGciwg
42
42
  griptape_nodes/common/macro_parser/parsing.py,sha256=_37L3lCQFeetamWIiHT0C7eW1E3Wyx5V8y8OWzIUw_g,7428
43
43
  griptape_nodes/common/macro_parser/resolution.py,sha256=30_bAIRMKWw-kM3E1ne-my16xT1Wd734JMmZSOZtNPA,6937
44
44
  griptape_nodes/common/macro_parser/segments.py,sha256=r-WbZas1nSc-PlEdAZ7DycNoD6IUf3R_nhGo3T9vIa8,1010
45
- griptape_nodes/common/node_executor.py,sha256=NOHt1U7ASCLBqAlGoxAG4U57kwLdhuSsLmv0ujCvmcc,134316
45
+ griptape_nodes/common/node_executor.py,sha256=zaVCw4BxurjwhVhCA9ujGXw2xzC4-Tkvjo3SFtY0S7Y,147191
46
46
  griptape_nodes/common/project_templates/__init__.py,sha256=5DP6Sa6ClsdDcjD30pkK0iTTysTgGdRKEkeY7ztHZyc,1541
47
47
  griptape_nodes/common/project_templates/default_project_template.py,sha256=PJFPfziH0EOGVxU5L0wZnc21bVVweW4S7wcnGPF45Co,3120
48
48
  griptape_nodes/common/project_templates/defaults/README.md,sha256=1ou6_OFi7-t86nj-7tulW1vxNMtsvkJmNxr6SseG8hA,1080
@@ -65,12 +65,12 @@ griptape_nodes/drivers/thread_storage/thread_storage_backend.py,sha256=QXLvFOZrF
65
65
  griptape_nodes/exe_types/__init__.py,sha256=wGGwKGX9-TSarUFbXpDvdU_J7eXIbWTBl_NCLOZa-G8,32
66
66
  griptape_nodes/exe_types/base_iterative_nodes.py,sha256=z2u4Pb9iqy2Zl3gz_LB7k6hmxYyet1Z6sLjF8afPN_0,43810
67
67
  griptape_nodes/exe_types/connections.py,sha256=HcM_fwWivMsXk5q6K7ZBSJpmK9THQwX_xLS_daF0PDQ,21737
68
- griptape_nodes/exe_types/core_types.py,sha256=TrSd_Z-99epMILmqcnr2kIPeUTuQuC7ghyWAOh0B73E,100822
68
+ griptape_nodes/exe_types/core_types.py,sha256=XrMT0Rf0bPZBcx06f1GUTi5G_IwLgdyzGjBKkUwRh3M,101505
69
69
  griptape_nodes/exe_types/flow.py,sha256=2iAh3vN5wnMVxTc5jcPBg9TSiASq1DGIm5jgpO9Bdq4,5732
70
- griptape_nodes/exe_types/node_groups/__init__.py,sha256=N-x5jU8XthYShF9TYnP90pd9DfUE5toiXb5lEoGFL-A,298
71
- griptape_nodes/exe_types/node_groups/base_iterative_node_group.py,sha256=xy05VkgLQORVE_jr5eCkAprCSlTiduCYkZkNHQGH-Cc,6343
72
- griptape_nodes/exe_types/node_groups/base_node_group.py,sha256=jXgmI2lLdCPK6Wh19LxSzsit6wIpRw6AcPqmMF9bjc8,885
73
- griptape_nodes/exe_types/node_groups/subflow_node_group.py,sha256=oIyX0VZcJvJ32KFqAsFbdMvrT-r_z8L8uclrwzCQceU,49972
70
+ griptape_nodes/exe_types/node_groups/__init__.py,sha256=u91XCSR4OAAr6x5kYq8i14mtHEWGQF_fSDUsWHmiOdY,346
71
+ griptape_nodes/exe_types/node_groups/base_iterative_node_group.py,sha256=sPPy3Psl-Ku_R46upWm_8hIGFLNPeLpUBN_Sm4RzXzg,9655
72
+ griptape_nodes/exe_types/node_groups/base_node_group.py,sha256=dJofcmERzYQSQ2KB7dC0rOKjbZKW8Ko8eD6r0smBu48,3209
73
+ griptape_nodes/exe_types/node_groups/subflow_node_group.py,sha256=UlZS95TKUCWiHgg6z4Wm1t9xXfUjWhk0L8pB5cXMcV0,48361
74
74
  griptape_nodes/exe_types/node_types.py,sha256=pPljG84zJ6Wd6yzcRjnK0n1805b-Jyzxx7-NFox66QE,84227
75
75
  griptape_nodes/exe_types/param_components/README.md,sha256=mcNFxJIan9CGTnecsrJ8mkHC55dlA3fb7k4HFznou-k,14850
76
76
  griptape_nodes/exe_types/param_components/__init__.py,sha256=ocm75WnsgiD6ozKVGFhoH9cQe_FEzeF2osxrRujOes0,60
@@ -82,21 +82,25 @@ griptape_nodes/exe_types/param_components/huggingface/__init__.py,sha256=YeVFck-
82
82
  griptape_nodes/exe_types/param_components/huggingface/huggingface_model_parameter.py,sha256=rEGN4kvblSAlRh7pD73U__wzAtVzDYWYlDC-k1nKtyM,6395
83
83
  griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_file_parameter.py,sha256=c61de3mbkc5FvVkf5vubtD0XfThDInTfibAtYhZKcKA,4265
84
84
  griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_parameter.py,sha256=zcBRQP0eZJloSdPQwJFw89B6QDHECnrosRZUy8mE2fM,1401
85
+ griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_variant_parameter.py,sha256=FaaDZ4dvZJCnpqSOKfJ5nR1klgl07JZto2A7gxhUi3o,5290
85
86
  griptape_nodes/exe_types/param_components/huggingface/huggingface_utils.py,sha256=cE0Ht81kDcZjlN_2VoRirCA4zMlrG9GFlcptn-gC2tU,4696
86
87
  griptape_nodes/exe_types/param_components/log_parameter.py,sha256=K6XRWVIpL9MtQ6IZG3hYYwIv3sNqFxONxbVnKcA_Oes,4160
87
88
  griptape_nodes/exe_types/param_components/progress_bar_component.py,sha256=GrAFTOrLNAx6q9zfOqiioPTG_NLHKhTe9NiZOo6zGSc,1949
88
- griptape_nodes/exe_types/param_components/seed_parameter.py,sha256=nXyi9bPCK9LuRB6s4Q2ezwdboIaivEObglNrSFn0y-0,2045
89
+ griptape_nodes/exe_types/param_components/seed_parameter.py,sha256=DUaYJTU8Jafu5sfibKJiO628813C37zMIJLYeXcoeuE,2119
89
90
  griptape_nodes/exe_types/param_types/__init__.py,sha256=xEEmKvIFF6M7zVjQZCupbbv6SZKt-itD-rPtfRhxJVg,53
90
- griptape_nodes/exe_types/param_types/parameter_audio.py,sha256=m9C5bASK6lJFhYkhwly7q6pRWq1q0pc1wGh38nn3kGs,9419
91
- griptape_nodes/exe_types/param_types/parameter_bool.py,sha256=mDbs4JW8dlEPvaR-u_tTKa6rzycF6KF5EPnezoQFufA,8100
92
- griptape_nodes/exe_types/param_types/parameter_button.py,sha256=sFkl7jcQbFOMJk17UEZu0zj6wgAmZ9kfnCZCn_R7L9I,17177
93
- griptape_nodes/exe_types/param_types/parameter_float.py,sha256=qjMTcMNzKkCLBBzlr2vdSweChXr-M-erSqqUVIU95tc,6678
94
- griptape_nodes/exe_types/param_types/parameter_image.py,sha256=YldCdmmpL2jeJNRgwSrWavaMVtC0jXiIuO8Np49PTXs,9318
95
- griptape_nodes/exe_types/param_types/parameter_int.py,sha256=fozMjPfBXL6AIQJ3E5rljloeYdw4ramqh6CU7jsrw24,6827
96
- griptape_nodes/exe_types/param_types/parameter_number.py,sha256=NY3c1iKCNnIZ4BKXGykxmggzr4D9-9GZoZCwQxasp0s,15257
97
- griptape_nodes/exe_types/param_types/parameter_string.py,sha256=8Mrx3Ktw12D78HNzfL19aoMtgUacxyYE9ZyNun8htcI,9468
98
- griptape_nodes/exe_types/param_types/parameter_three_d.py,sha256=G8gf5v_hplzprC-jBPufgtwnpZiqsKlbYnsuwc3D_VI,8278
99
- griptape_nodes/exe_types/param_types/parameter_video.py,sha256=MDjadF3WQIi8EiYAnT0ILOimKU0xIJTKu5HlqWKRE-I,9339
91
+ griptape_nodes/exe_types/param_types/parameter_audio.py,sha256=9oIBtDg6miZDD_5y8VWr6XXjYhsRb9HjSKoaLdgqaHA,9534
92
+ griptape_nodes/exe_types/param_types/parameter_bool.py,sha256=VS76CODOy7_1MJI9spxmi9VwL3fwCxRKaj_8zpqB7dw,8215
93
+ griptape_nodes/exe_types/param_types/parameter_button.py,sha256=lrFnw4dBRKTSsaMxSVMOwtAV8a-Tcex2Tf58u25qCy8,17292
94
+ griptape_nodes/exe_types/param_types/parameter_dict.py,sha256=vbgasnkx9U9-h43geRhLjQ60ekhFlLBvuCVT9wHgWdY,6016
95
+ griptape_nodes/exe_types/param_types/parameter_float.py,sha256=9msvMnmzYGNpqFpGyTT4tswiAlHomo9Y5EiYsydT7IM,6793
96
+ griptape_nodes/exe_types/param_types/parameter_image.py,sha256=FeoqQdr1dj0F60WK0pVyNyzYsZCDjt4JiZQn252Oz3I,9433
97
+ griptape_nodes/exe_types/param_types/parameter_int.py,sha256=06h1QpWaWLeP2tlRRW5IOGO-t_ZlxsWqnezlgoyBKaE,6942
98
+ 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=acmFnpeYI0Gi2yVYmn9ftkruBxR_TpjDrpYi3Kj0vc8,15372
100
+ griptape_nodes/exe_types/param_types/parameter_range.py,sha256=fkCBN0X09fAfTG9AhKQ3Nxkit_8NrFi4IGQPpmOQR8k,14689
101
+ 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=wbUeWJUVPJW5JJrkckzGnTM6SsWPSQNupyHGVoBjrOA,8393
103
+ griptape_nodes/exe_types/param_types/parameter_video.py,sha256=_GhpqZwn3kFJIJA7w-oiK2DHFfPW_JosMgUFlWvK6r0,9454
100
104
  griptape_nodes/exe_types/type_validator.py,sha256=RTz1vX09jzQpHhozITMJ0siOZUXvsERDhrApjdaM1WM,1120
101
105
  griptape_nodes/machines/__init__.py,sha256=v0jkwr-CFOLmfEYUQvX8BKQLOdvhSsA6toXkdHcPGUE,30
102
106
  griptape_nodes/machines/control_flow.py,sha256=mmiA7OHXG3Nq36uFPKSGVgqm-ws-T21vzHgvF-um0hg,23007
@@ -122,14 +126,14 @@ griptape_nodes/retained_mode/events/context_events.py,sha256=-FIwjI0hJodDhfM4BF-
122
126
  griptape_nodes/retained_mode/events/execution_events.py,sha256=AQHD04wxQXJDHGnw_ij4QvdUoiMckpMTZqZJX3ehGgA,13512
123
127
  griptape_nodes/retained_mode/events/flow_events.py,sha256=UcRHfaubb1GpDFSPg-5HRWrPnA7ifH1zBMYtWnYNy_E,19434
124
128
  griptape_nodes/retained_mode/events/generate_request_payload_schemas.py,sha256=PQ0QRZAUBljSIGjB8QhYUeRmSrfmLsJ6XVcygJKi13I,1102
125
- griptape_nodes/retained_mode/events/library_events.py,sha256=Ke9B7pzhiJk_ctmZPJqilzHhZXByG4B2rArG6ec9KF4,36085
129
+ griptape_nodes/retained_mode/events/library_events.py,sha256=4NUc3uoLgofo1X9nrCVl2zPX3hsnk06Oo4Op0AQKA5o,36229
126
130
  griptape_nodes/retained_mode/events/logger_events.py,sha256=jYlxzPomgCsJuPtJ0znWBhD8QJfC8qC4xfChDiuVuyg,705
127
131
  griptape_nodes/retained_mode/events/mcp_events.py,sha256=51OlMZVcabdcIxBb_ojvrHtq2jAzZA31pooPBKaApyg,10734
128
132
  griptape_nodes/retained_mode/events/model_events.py,sha256=jXm-v-_Uxysn4MJ7a80_uIphrxTHgua3BGgHGyy3T_Y,9232
129
133
  griptape_nodes/retained_mode/events/node_events.py,sha256=vpILjBkgrPzF_KSow2EJCwcU-tDD78WEWM2DAAzhhiE,37720
130
134
  griptape_nodes/retained_mode/events/object_events.py,sha256=cJaqEU73Lzf1RRxJrFqEpl8eTr-gDhKpXKywJ-vVCJQ,2631
131
135
  griptape_nodes/retained_mode/events/os_events.py,sha256=fVraPXCz48kDpCTttJFtsyfTfkaLSfTX57hexYSD7I8,23429
132
- griptape_nodes/retained_mode/events/parameter_events.py,sha256=2s3U_cc45LjSmq2pZyTEnjD6yAlc207wAYY633z4zO4,23938
136
+ griptape_nodes/retained_mode/events/parameter_events.py,sha256=TazVXxvfv64n3XJzToOQKiWQ1UIzrUAB4ri_QIvZ2ng,26968
133
137
  griptape_nodes/retained_mode/events/payload_registry.py,sha256=q-wxUqp63vhNj-Pl1JGJHnBkhUefcCArPoMN3KBREEI,1691
134
138
  griptape_nodes/retained_mode/events/project_events.py,sha256=C_jHk_7dRJLtbRgCi8IGe-mH46tueuTxLxGL7xxZVBI,17096
135
139
  griptape_nodes/retained_mode/events/resource_events.py,sha256=K47UK92wvaRtHu3ByfhkQEMyorrV0ArGewrFSJuVMiI,9015
@@ -146,7 +150,7 @@ griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py,sha256=LyWz
146
150
  griptape_nodes/retained_mode/managers/config_manager.py,sha256=74AMeaCS0eOeFbzMk5I54MtB7-SNQbwlx_-O6zBBQRo,26739
147
151
  griptape_nodes/retained_mode/managers/context_manager.py,sha256=eb44_CAZhCg2iYIoodlAPpYc67tG3sHyq9dPNoiq_1s,23031
148
152
  griptape_nodes/retained_mode/managers/engine_identity_manager.py,sha256=-31364A03kU0YmAx3nM7nHdWfKnkej5Cawt_Plbwa68,10526
149
- griptape_nodes/retained_mode/managers/event_manager.py,sha256=v66GUmh5Knyxls-lB3TicsOxK535A7aZkmjDOIehbog,20537
153
+ griptape_nodes/retained_mode/managers/event_manager.py,sha256=jiUX3WW6Hz0Z4Y1dK1X7fMwZawT3_BOKl_Dbiui-iNQ,26933
150
154
  griptape_nodes/retained_mode/managers/fitness_problems/__init__.py,sha256=H_Wwfn1k_IaxwRxgbw3-seb1HWbcxl2Cvhw7wB7bCo8,75
151
155
  griptape_nodes/retained_mode/managers/fitness_problems/libraries/__init__.py,sha256=vjyI8VUKNieAhlLlaxoUZZK9AxacdbajHVVFTPo_82A,3340
152
156
  griptape_nodes/retained_mode/managers/fitness_problems/libraries/advanced_library_load_failure_problem.py,sha256=Z7bIE_Ll4qqsG-D_PLe48r3ZuUCChgk04mopDvZ5MD0,1215
@@ -197,11 +201,11 @@ griptape_nodes/retained_mode/managers/fitness_problems/workflows/node_type_not_f
197
201
  griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_not_found_problem.py,sha256=kPhaIeDxp0duxJBJLKFiYp269kEDsCx3uVLnkKbF2gk,895
198
202
  griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_problem.py,sha256=NLAoF_x7g5tL70qZtPVFI8xeM1jPZNsm7FKt9nkuGBc,542
199
203
  griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_schema_version_problem.py,sha256=rUnbBBnGwgq5WTVPt2G4pGP3gVPoX5xvCdTkRPBmP04,1328
200
- griptape_nodes/retained_mode/managers/flow_manager.py,sha256=0Z8hNjfwlnJgQGOsQf3MEvQnkPLeQBXe2ZuixUov2QY,220137
201
- griptape_nodes/retained_mode/managers/library_manager.py,sha256=vNIwBweMIO84gJp05M_vBFYW2JjTyCpQa4G62ACsBP4,191730
204
+ griptape_nodes/retained_mode/managers/flow_manager.py,sha256=fY0xCXHiualDwVQJnNlPpMUnLz5bYWvr5D1_UvOyNVM,220269
205
+ griptape_nodes/retained_mode/managers/library_manager.py,sha256=paogGavZj2MDOYvfUklhjORQg16YdpVGBxBncVSxtR0,192265
202
206
  griptape_nodes/retained_mode/managers/mcp_manager.py,sha256=Ezmn5_48r4JWYe-tFGqmw9dXLvvTiO1rw9b4MNCkw0U,15955
203
207
  griptape_nodes/retained_mode/managers/model_manager.py,sha256=3lj2X8vIvDSERPtR2VEXNFEWy_D8H6muxRvD-PEx8U8,44845
204
- griptape_nodes/retained_mode/managers/node_manager.py,sha256=LVF7_KCb01mJ_fAaCfg_9D0Rw40KKxRSr3n3nsRg8Ss,215328
208
+ griptape_nodes/retained_mode/managers/node_manager.py,sha256=KbThJ5fvBTuF9EEIqBT37Rop41_7o-irb_-KY8hkXVY,225038
205
209
  griptape_nodes/retained_mode/managers/object_manager.py,sha256=xABsjpE1_HLEIFwYj60zDOLi18EqrYUBuNaj37lUcH4,12921
206
210
  griptape_nodes/retained_mode/managers/operation_manager.py,sha256=4Vn_79vHrawy3wJVUx52tfblO4mURww58nb5RtCTpKU,20190
207
211
  griptape_nodes/retained_mode/managers/os_manager.py,sha256=Ttgj6R063p2Yf1lcdeSTB2xOTg94MIDCMPxO8FDczEQ,142397
@@ -224,7 +228,7 @@ griptape_nodes/retained_mode/managers/sync_manager.py,sha256=dF6nAAy1DLDQydefx7v
224
228
  griptape_nodes/retained_mode/managers/user_manager.py,sha256=JAOOKDhUfIbj0CJ5EHRBcplmxheQTzeogbvGO23VqXQ,4508
225
229
  griptape_nodes/retained_mode/managers/variable_manager.py,sha256=TnuqHSRK9Yiu_EtKxQksF9SyyQb72lbFQuTQZdpBxeE,24116
226
230
  griptape_nodes/retained_mode/managers/version_compatibility_manager.py,sha256=kaCtmNMqJW-mvLCFHf77wbBZbc3CgW2h8fYYkLkNrPs,17041
227
- griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=VCOV0BfkW9ynLhmH7jRvcEJnFr6YiAF0f76sc9wCjBg,215471
231
+ griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=n6jmr966Y_0MPd9aaOssX2CYgojf_mNRxC07990Anec,217769
228
232
  griptape_nodes/retained_mode/retained_mode.py,sha256=dG8FFpLXSxT49naOcphEq2aSRCEVoQyklWgaDljjuDA,71728
229
233
  griptape_nodes/retained_mode/utils/__init__.py,sha256=W5dvv8YwvVVq_8eVTgMd3Z_VB_Dtq1sIIVq8745QH_I,52
230
234
  griptape_nodes/retained_mode/utils/name_generator.py,sha256=IZLahtfP3XC79XApLdGoZ0IKKUkgiITpd16RK7NbyEs,2524
@@ -252,7 +256,7 @@ griptape_nodes/updater/__main__.py,sha256=lhMMctbBeni57ximitvkwqJ1TQzk79Jg9w0rkK
252
256
  griptape_nodes/utils/__init__.py,sha256=kzDZW_VPyxWJFonM3kYTl7A91_JmtHPK0Io4KPLTYT4,122
253
257
  griptape_nodes/utils/async_utils.py,sha256=4IrW8Ub8iJ2QB9yguZtfN1EB9B5nXHS7jbDaLOHWso0,4844
254
258
  griptape_nodes/utils/dict_utils.py,sha256=1VP2EoyOP0nswoAgjPehpA0izpkygWRX7L--ArN6LV8,7314
255
- griptape_nodes/utils/file_utils.py,sha256=Lj1SQH8XyuJx3WoHmWhyZf2gHPirZ0ZpQtPPcuP-ONQ,3288
259
+ griptape_nodes/utils/file_utils.py,sha256=D7VBkYl2MI0GUHdvI3IDB-fRN2XTp4xDpANnUcnEVvY,5524
256
260
  griptape_nodes/utils/git_utils.py,sha256=Gz55JqSFPuxbTzvnXHKHsbMy3PvkNDAYyMQ7szekcL0,45674
257
261
  griptape_nodes/utils/huggingface_utils.py,sha256=txR5XS_01W3TvsH4SQ3AJrFy8oS8Ah9M-ePRSs3jHYA,4737
258
262
  griptape_nodes/utils/image_preview.py,sha256=NhYIqohRF9vbFpWIEvZHdPLLPK_JdUBvC4RvNAsSa1w,4480
@@ -272,7 +276,7 @@ griptape_nodes/version_compatibility/versions/v0_65_5/__init__.py,sha256=4UyspOV
272
276
  griptape_nodes/version_compatibility/versions/v0_65_5/flux_2_removed_parameters.py,sha256=jOlmY5kKHXh8HPzAUtvwMJqzD4bP7pkE--yHUb7jTRA,3305
273
277
  griptape_nodes/version_compatibility/versions/v0_7_0/__init__.py,sha256=IzPPmGK86h2swfGGTOHyVcBIlOng6SjgWQzlbf3ngmo,51
274
278
  griptape_nodes/version_compatibility/versions/v0_7_0/local_executor_argument_addition.py,sha256=Thx8acnbw5OychhwEEj9aFxvbPe7Wgn4V9ZmZ7KRZqc,2082
275
- griptape_nodes-0.66.2.dist-info/WHEEL,sha256=ZyFSCYkV2BrxH6-HRVRg3R9Fo7MALzer9KiPYqNxSbo,79
276
- griptape_nodes-0.66.2.dist-info/entry_points.txt,sha256=qvevqd3BVbAV5TcantnAm0ouqaqYKhsRO3pkFymWLWM,82
277
- griptape_nodes-0.66.2.dist-info/METADATA,sha256=VC-QhMlVIUuf9pJUTECmxxFkGGcOBDfIc0EDMcfn8ls,5374
278
- griptape_nodes-0.66.2.dist-info/RECORD,,
279
+ griptape_nodes-0.68.0.dist-info/WHEEL,sha256=eycQt0QpYmJMLKpE3X9iDk8R04v2ZF0x82ogq-zP6bQ,79
280
+ griptape_nodes-0.68.0.dist-info/entry_points.txt,sha256=qvevqd3BVbAV5TcantnAm0ouqaqYKhsRO3pkFymWLWM,82
281
+ griptape_nodes-0.68.0.dist-info/METADATA,sha256=N19_zdNWANm20AwShxLGrCdlns7RVwaJ9IoewOOXH1Q,5374
282
+ griptape_nodes-0.68.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.9.18
2
+ Generator: uv 0.9.24
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any