griptape-nodes 0.63.5__py3-none-any.whl → 0.63.7__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.
@@ -653,19 +653,3 @@ class ProgressEvent:
653
653
  value: Any = field()
654
654
  node_name: str = field()
655
655
  parameter_name: str = field()
656
-
657
-
658
- # Special internal request for flushing parameter changes
659
- @dataclass(kw_only=True)
660
- class FlushParameterChangesRequest(RequestPayload, WorkflowNotAlteredMixin):
661
- pass
662
-
663
-
664
- @dataclass
665
- class FlushParameterChangesResultSuccess(ResultPayloadSuccess):
666
- pass
667
-
668
-
669
- @dataclass
670
- class FlushParameterChangesResultFailure(ResultPayloadFailure):
671
- pass
@@ -10,13 +10,11 @@ from typing import TYPE_CHECKING, Any, cast
10
10
  from asyncio_thread_runner import ThreadRunner
11
11
  from typing_extensions import TypedDict, TypeVar
12
12
 
13
+ from griptape_nodes.exe_types.node_types import BaseNode
13
14
  from griptape_nodes.retained_mode.events.base_events import (
14
15
  AppPayload,
15
- EventRequest,
16
16
  EventResultFailure,
17
17
  EventResultSuccess,
18
- FlushParameterChangesRequest,
19
- FlushParameterChangesResultSuccess,
20
18
  RequestPayload,
21
19
  ResultPayload,
22
20
  )
@@ -31,15 +29,9 @@ AP = TypeVar("AP", bound=AppPayload, default=AppPayload)
31
29
 
32
30
  # Result types that should NOT trigger a flush request.
33
31
  #
34
- # After most requests complete, we queue a FlushParameterChangesRequest to flush any tracked
35
- # parameter changes to the UI. However, when the FlushParameterChangesRequest itself completes,
36
- # it returns a FlushParameterChangesResultSuccess. If we don't exclude this result type, it would
37
- # trigger another FlushParameterChangesRequest, which would return another FlushParameterChangesResultSuccess,
38
- # creating an infinite loop of flush requests.
39
- #
40
32
  # Add result types to this set if they should never trigger a flush (typically because they ARE
41
33
  # the flush operation itself, or other internal operations that don't modify workflow state).
42
- RESULT_TYPES_THAT_SKIP_FLUSH = {FlushParameterChangesResultSuccess}
34
+ RESULT_TYPES_THAT_SKIP_FLUSH = {}
43
35
 
44
36
 
45
37
  class ResultContext(TypedDict, total=False):
@@ -53,8 +45,6 @@ class EventManager:
53
45
  self._request_type_to_manager: dict[type[RequestPayload], Callable] = defaultdict(list) # pyright: ignore[reportAttributeAccessIssue]
54
46
  # Dictionary to store ALL SUBSCRIBERS to app events.
55
47
  self._app_event_listeners: dict[type[AppPayload], set[Callable]] = {}
56
- # Boolean that lets us know if there is currently a FlushParameterChangesRequest in the event queue.
57
- self._flush_in_queue: bool = False
58
48
  # Event queue for publishing events
59
49
  self._event_queue: asyncio.Queue | None = None
60
50
  # Keep track of which thread the event loop runs on
@@ -69,9 +59,6 @@ class EventManager:
69
59
  raise ValueError(msg)
70
60
  return self._event_queue
71
61
 
72
- def clear_flush_in_queue(self) -> None:
73
- self._flush_in_queue = False
74
-
75
62
  def initialize_queue(self, queue: asyncio.Queue | None = None) -> None:
76
63
  """Set the event queue for this manager.
77
64
 
@@ -253,9 +240,8 @@ class EventManager:
253
240
 
254
241
  # Queue flush request for async context (unless result type should skip flush)
255
242
  with operation_depth_mgr:
256
- if not self._flush_in_queue and type(result_payload) not in RESULT_TYPES_THAT_SKIP_FLUSH:
257
- await self.aput_event(EventRequest(request=FlushParameterChangesRequest()))
258
- self._flush_in_queue = True
243
+ if type(result_payload) not in RESULT_TYPES_THAT_SKIP_FLUSH:
244
+ self._flush_tracked_parameter_changes()
259
245
 
260
246
  return self._handle_request_core(
261
247
  request,
@@ -302,9 +288,8 @@ class EventManager:
302
288
 
303
289
  # Queue flush request for sync context (unless result type should skip flush)
304
290
  with operation_depth_mgr:
305
- if not self._flush_in_queue and type(result_payload) not in RESULT_TYPES_THAT_SKIP_FLUSH:
306
- self.put_event(EventRequest(request=FlushParameterChangesRequest()))
307
- self._flush_in_queue = True
291
+ if type(result_payload) not in RESULT_TYPES_THAT_SKIP_FLUSH:
292
+ self._flush_tracked_parameter_changes()
308
293
 
309
294
  return self._handle_request_core(
310
295
  request,
@@ -336,3 +321,14 @@ class EventManager:
336
321
  async with asyncio.TaskGroup() as tg:
337
322
  for listener_callback in listener_set:
338
323
  tg.create_task(call_function(listener_callback, app_event))
324
+
325
+ def _flush_tracked_parameter_changes(self) -> None:
326
+ from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes
327
+
328
+ obj_manager = GriptapeNodes.ObjectManager()
329
+ # Get all flows and their nodes
330
+ nodes = obj_manager.get_filtered_subset(type=BaseNode)
331
+ for node in nodes.values():
332
+ # Only flush if there are actually tracked parameters
333
+ if node._tracked_parameters:
334
+ node.emit_parameter_changes()
@@ -35,8 +35,6 @@ from griptape_nodes.node_library.workflow_registry import LibraryNameAndNodeType
35
35
  from griptape_nodes.retained_mode.events.base_events import (
36
36
  ExecutionEvent,
37
37
  ExecutionGriptapeNodeEvent,
38
- FlushParameterChangesRequest,
39
- FlushParameterChangesResultSuccess,
40
38
  ResultDetails,
41
39
  )
42
40
  from griptape_nodes.retained_mode.events.connection_events import (
@@ -267,7 +265,6 @@ class FlowManager:
267
265
  event_manager.assign_manager_to_request_type(
268
266
  PackageNodesAsSerializedFlowRequest, self.on_package_nodes_as_serialized_flow_request
269
267
  )
270
- event_manager.assign_manager_to_request_type(FlushParameterChangesRequest, self.on_flush_request)
271
268
 
272
269
  self._name_to_parent_name = {}
273
270
  self._flow_to_referenced_workflow_name = {}
@@ -3065,17 +3062,6 @@ class FlowManager:
3065
3062
  details = f"Successfully deserialized Flow '{flow_name}'."
3066
3063
  return DeserializeFlowFromCommandsResultSuccess(flow_name=flow_name, result_details=details)
3067
3064
 
3068
- def on_flush_request(self, request: FlushParameterChangesRequest) -> ResultPayload: # noqa: ARG002
3069
- obj_manager = GriptapeNodes.ObjectManager()
3070
- GriptapeNodes.EventManager().clear_flush_in_queue()
3071
- # Get all flows and their nodes
3072
- nodes = obj_manager.get_filtered_subset(type=BaseNode)
3073
- for node in nodes.values():
3074
- # Only flush if there are actually tracked parameters
3075
- if node._tracked_parameters:
3076
- node.emit_parameter_changes()
3077
- return FlushParameterChangesResultSuccess(result_details="Parameter changes flushed successfully.")
3078
-
3079
3065
  async def start_flow(
3080
3066
  self,
3081
3067
  flow: ControlFlow,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: griptape-nodes
3
- Version: 0.63.5
3
+ Version: 0.63.7
4
4
  Summary: Add your description here
5
5
  Requires-Dist: griptape>=1.8.12
6
6
  Requires-Dist: pydantic>=2.10.6
@@ -105,7 +105,7 @@ griptape_nodes/retained_mode/events/__init__.py,sha256=7B1C-c0jVvnShtHJ2lfX6BZPE
105
105
  griptape_nodes/retained_mode/events/agent_events.py,sha256=pHqw9XsMqKg8SG6VCU_xuQLSn40nmyOPFTrEZAiB9uo,10590
106
106
  griptape_nodes/retained_mode/events/app_events.py,sha256=WFv6zb6K8H7KcJdvQD6fi164EN82dW7CeBTsb7Fkprs,10195
107
107
  griptape_nodes/retained_mode/events/arbitrary_python_events.py,sha256=uhep1c1xjUc-YQO5nIStAE48PS6rFZLTDQIr_Qb3we8,1460
108
- griptape_nodes/retained_mode/events/base_events.py,sha256=UPEMkoU7lUtm8L_wdeTp8YRLSAFFgxJIVRasdqtuQfQ,23223
108
+ griptape_nodes/retained_mode/events/base_events.py,sha256=72JJe7dbJMo72NMAGw4KFjpalkJMd5S3i7qo2I4sdXI,22880
109
109
  griptape_nodes/retained_mode/events/config_events.py,sha256=Y03YMLoJTXy0Sz6tq-6lOIs37CmXn1Br3GYAinl02nY,7070
110
110
  griptape_nodes/retained_mode/events/connection_events.py,sha256=QjHAp0SeCbRSG-dF_nU_CPaOcSKItq2DWJ_FHWgF1b4,4744
111
111
  griptape_nodes/retained_mode/events/context_events.py,sha256=-FIwjI0hJodDhfM4BF-3GTRycu80v1TlSSOX34oA9nA,2122
@@ -136,7 +136,7 @@ griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py,sha256=LyWz
136
136
  griptape_nodes/retained_mode/managers/config_manager.py,sha256=WfzvFDPyboHgsCMpVGER6Ar1OHyPD_827LQx9xaUsMM,25573
137
137
  griptape_nodes/retained_mode/managers/context_manager.py,sha256=eb44_CAZhCg2iYIoodlAPpYc67tG3sHyq9dPNoiq_1s,23031
138
138
  griptape_nodes/retained_mode/managers/engine_identity_manager.py,sha256=-31364A03kU0YmAx3nM7nHdWfKnkej5Cawt_Plbwa68,10526
139
- griptape_nodes/retained_mode/managers/event_manager.py,sha256=a1V5lGP7B0Ts3hDvkZfmk33oESFTLP4STPUAgIU_tZU,14383
139
+ griptape_nodes/retained_mode/managers/event_manager.py,sha256=kNEDR6DEARWC6NcYxa8Y54u2-soFFKU55CXqTTnJk3w,13902
140
140
  griptape_nodes/retained_mode/managers/fitness_problems/__init__.py,sha256=H_Wwfn1k_IaxwRxgbw3-seb1HWbcxl2Cvhw7wB7bCo8,75
141
141
  griptape_nodes/retained_mode/managers/fitness_problems/libraries/__init__.py,sha256=nCG1TKdQzk6OSHz5RBQrUgMSJ-C4Pvn7rQrEWJvB724,3111
142
142
  griptape_nodes/retained_mode/managers/fitness_problems/libraries/advanced_library_load_failure_problem.py,sha256=Z7bIE_Ll4qqsG-D_PLe48r3ZuUCChgk04mopDvZ5MD0,1215
@@ -185,7 +185,7 @@ griptape_nodes/retained_mode/managers/fitness_problems/workflows/node_type_not_f
185
185
  griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_not_found_problem.py,sha256=kPhaIeDxp0duxJBJLKFiYp269kEDsCx3uVLnkKbF2gk,895
186
186
  griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_problem.py,sha256=NLAoF_x7g5tL70qZtPVFI8xeM1jPZNsm7FKt9nkuGBc,542
187
187
  griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_schema_version_problem.py,sha256=rUnbBBnGwgq5WTVPt2G4pGP3gVPoX5xvCdTkRPBmP04,1328
188
- griptape_nodes/retained_mode/managers/flow_manager.py,sha256=YgBIPix-bFA_Htwtur83obXJWnCh5KQ7SLC1dtd0KNQ,192102
188
+ griptape_nodes/retained_mode/managers/flow_manager.py,sha256=zWRqekEmx0TaweyyZyKqNr09VlEtWuPtLf45P3B-q6A,191305
189
189
  griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py,sha256=Iq79VxTdETiExBfFWXceJggDZqS6X3OkzXE9XwFclVw,1340
190
190
  griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py,sha256=fvAP0VaYGPHYl_Kg3RL4gdJlpqya8UTvpP-C49r950k,6723
191
191
  griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py,sha256=Ywno93eVJH4sAtQ1dgHG2Pw9B3vw8fN8oAL0gn_l6OI,14836
@@ -263,7 +263,7 @@ griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_re
263
263
  griptape_nodes/version_compatibility/workflow_versions/__init__.py,sha256=z5XDgkizoNByCXpyo34hfsJKFsWlOHbD6hgzfYH9ubc,52
264
264
  griptape_nodes/version_compatibility/workflow_versions/v0_7_0/__init__.py,sha256=IzPPmGK86h2swfGGTOHyVcBIlOng6SjgWQzlbf3ngmo,51
265
265
  griptape_nodes/version_compatibility/workflow_versions/v0_7_0/local_executor_argument_addition.py,sha256=Thx8acnbw5OychhwEEj9aFxvbPe7Wgn4V9ZmZ7KRZqc,2082
266
- griptape_nodes-0.63.5.dist-info/WHEEL,sha256=w4ZtLaDgMAZW2MMZZwtH8zENekoQYBCeullI-zsXJQk,78
267
- griptape_nodes-0.63.5.dist-info/entry_points.txt,sha256=qvevqd3BVbAV5TcantnAm0ouqaqYKhsRO3pkFymWLWM,82
268
- griptape_nodes-0.63.5.dist-info/METADATA,sha256=F_qto0f5gyBwTPQSxQOAk66psIQze0MRQWYWWZOZ-vw,5208
269
- griptape_nodes-0.63.5.dist-info/RECORD,,
266
+ griptape_nodes-0.63.7.dist-info/WHEEL,sha256=w4ZtLaDgMAZW2MMZZwtH8zENekoQYBCeullI-zsXJQk,78
267
+ griptape_nodes-0.63.7.dist-info/entry_points.txt,sha256=qvevqd3BVbAV5TcantnAm0ouqaqYKhsRO3pkFymWLWM,82
268
+ griptape_nodes-0.63.7.dist-info/METADATA,sha256=jr_k4fx4JesRyzAPbyYRiMTXHf1Wuc5YzNW9LOvnYL8,5208
269
+ griptape_nodes-0.63.7.dist-info/RECORD,,