griptape-nodes 0.41.0__py3-none-any.whl → 0.43.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 (133) hide show
  1. griptape_nodes/__init__.py +0 -0
  2. griptape_nodes/app/.python-version +0 -0
  3. griptape_nodes/app/__init__.py +1 -10
  4. griptape_nodes/app/api.py +199 -0
  5. griptape_nodes/app/app.py +140 -222
  6. griptape_nodes/app/watch.py +4 -2
  7. griptape_nodes/bootstrap/__init__.py +0 -0
  8. griptape_nodes/bootstrap/bootstrap_script.py +0 -0
  9. griptape_nodes/bootstrap/register_libraries_script.py +0 -0
  10. griptape_nodes/bootstrap/structure_config.yaml +0 -0
  11. griptape_nodes/bootstrap/workflow_executors/__init__.py +0 -0
  12. griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py +0 -0
  13. griptape_nodes/bootstrap/workflow_executors/workflow_executor.py +0 -0
  14. griptape_nodes/bootstrap/workflow_runners/__init__.py +0 -0
  15. griptape_nodes/bootstrap/workflow_runners/bootstrap_workflow_runner.py +0 -0
  16. griptape_nodes/bootstrap/workflow_runners/local_workflow_runner.py +0 -0
  17. griptape_nodes/bootstrap/workflow_runners/subprocess_workflow_runner.py +6 -2
  18. griptape_nodes/bootstrap/workflow_runners/workflow_runner.py +0 -0
  19. griptape_nodes/drivers/__init__.py +0 -0
  20. griptape_nodes/drivers/storage/__init__.py +0 -0
  21. griptape_nodes/drivers/storage/base_storage_driver.py +0 -0
  22. griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +0 -0
  23. griptape_nodes/drivers/storage/local_storage_driver.py +5 -3
  24. griptape_nodes/drivers/storage/storage_backend.py +0 -0
  25. griptape_nodes/exe_types/__init__.py +0 -0
  26. griptape_nodes/exe_types/connections.py +0 -0
  27. griptape_nodes/exe_types/core_types.py +0 -0
  28. griptape_nodes/exe_types/flow.py +68 -368
  29. griptape_nodes/exe_types/node_types.py +17 -1
  30. griptape_nodes/exe_types/type_validator.py +0 -0
  31. griptape_nodes/machines/__init__.py +0 -0
  32. griptape_nodes/machines/control_flow.py +52 -20
  33. griptape_nodes/machines/fsm.py +16 -2
  34. griptape_nodes/machines/node_resolution.py +16 -14
  35. griptape_nodes/mcp_server/__init__.py +1 -0
  36. griptape_nodes/mcp_server/server.py +126 -0
  37. griptape_nodes/mcp_server/ws_request_manager.py +268 -0
  38. griptape_nodes/node_library/__init__.py +0 -0
  39. griptape_nodes/node_library/advanced_node_library.py +0 -0
  40. griptape_nodes/node_library/library_registry.py +0 -0
  41. griptape_nodes/node_library/workflow_registry.py +2 -2
  42. griptape_nodes/py.typed +0 -0
  43. griptape_nodes/retained_mode/__init__.py +0 -0
  44. griptape_nodes/retained_mode/events/__init__.py +0 -0
  45. griptape_nodes/retained_mode/events/agent_events.py +70 -8
  46. griptape_nodes/retained_mode/events/app_events.py +137 -12
  47. griptape_nodes/retained_mode/events/arbitrary_python_events.py +23 -0
  48. griptape_nodes/retained_mode/events/base_events.py +13 -31
  49. griptape_nodes/retained_mode/events/config_events.py +87 -11
  50. griptape_nodes/retained_mode/events/connection_events.py +56 -5
  51. griptape_nodes/retained_mode/events/context_events.py +27 -4
  52. griptape_nodes/retained_mode/events/execution_events.py +99 -14
  53. griptape_nodes/retained_mode/events/flow_events.py +165 -7
  54. griptape_nodes/retained_mode/events/generate_request_payload_schemas.py +0 -0
  55. griptape_nodes/retained_mode/events/library_events.py +195 -17
  56. griptape_nodes/retained_mode/events/logger_events.py +11 -0
  57. griptape_nodes/retained_mode/events/node_events.py +242 -22
  58. griptape_nodes/retained_mode/events/object_events.py +40 -4
  59. griptape_nodes/retained_mode/events/os_events.py +116 -3
  60. griptape_nodes/retained_mode/events/parameter_events.py +212 -8
  61. griptape_nodes/retained_mode/events/payload_registry.py +0 -0
  62. griptape_nodes/retained_mode/events/secrets_events.py +59 -7
  63. griptape_nodes/retained_mode/events/static_file_events.py +57 -4
  64. griptape_nodes/retained_mode/events/validation_events.py +39 -4
  65. griptape_nodes/retained_mode/events/workflow_events.py +188 -17
  66. griptape_nodes/retained_mode/griptape_nodes.py +89 -363
  67. griptape_nodes/retained_mode/managers/__init__.py +0 -0
  68. griptape_nodes/retained_mode/managers/agent_manager.py +49 -23
  69. griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +0 -0
  70. griptape_nodes/retained_mode/managers/config_manager.py +0 -0
  71. griptape_nodes/retained_mode/managers/context_manager.py +0 -0
  72. griptape_nodes/retained_mode/managers/engine_identity_manager.py +146 -0
  73. griptape_nodes/retained_mode/managers/event_manager.py +14 -2
  74. griptape_nodes/retained_mode/managers/flow_manager.py +751 -64
  75. griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py +45 -0
  76. griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py +191 -0
  77. griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py +346 -0
  78. griptape_nodes/retained_mode/managers/library_lifecycle/library_fsm.py +439 -0
  79. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/__init__.py +17 -0
  80. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/base.py +82 -0
  81. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/github.py +116 -0
  82. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/local_file.py +352 -0
  83. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/package.py +104 -0
  84. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py +155 -0
  85. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py +18 -0
  86. griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py +12 -0
  87. griptape_nodes/retained_mode/managers/library_manager.py +255 -40
  88. griptape_nodes/retained_mode/managers/node_manager.py +120 -103
  89. griptape_nodes/retained_mode/managers/object_manager.py +11 -3
  90. griptape_nodes/retained_mode/managers/operation_manager.py +0 -0
  91. griptape_nodes/retained_mode/managers/os_manager.py +582 -8
  92. griptape_nodes/retained_mode/managers/secrets_manager.py +4 -0
  93. griptape_nodes/retained_mode/managers/session_manager.py +328 -0
  94. griptape_nodes/retained_mode/managers/settings.py +7 -0
  95. griptape_nodes/retained_mode/managers/static_files_manager.py +0 -0
  96. griptape_nodes/retained_mode/managers/version_compatibility_manager.py +2 -2
  97. griptape_nodes/retained_mode/managers/workflow_manager.py +722 -456
  98. griptape_nodes/retained_mode/retained_mode.py +44 -0
  99. griptape_nodes/retained_mode/utils/__init__.py +0 -0
  100. griptape_nodes/retained_mode/utils/engine_identity.py +141 -27
  101. griptape_nodes/retained_mode/utils/name_generator.py +0 -0
  102. griptape_nodes/traits/__init__.py +0 -0
  103. griptape_nodes/traits/add_param_button.py +0 -0
  104. griptape_nodes/traits/button.py +0 -0
  105. griptape_nodes/traits/clamp.py +0 -0
  106. griptape_nodes/traits/compare.py +0 -0
  107. griptape_nodes/traits/compare_images.py +0 -0
  108. griptape_nodes/traits/file_system_picker.py +127 -0
  109. griptape_nodes/traits/minmax.py +0 -0
  110. griptape_nodes/traits/options.py +0 -0
  111. griptape_nodes/traits/slider.py +0 -0
  112. griptape_nodes/traits/trait_registry.py +0 -0
  113. griptape_nodes/traits/traits.json +0 -0
  114. griptape_nodes/updater/__init__.py +2 -2
  115. griptape_nodes/updater/__main__.py +0 -0
  116. griptape_nodes/utils/__init__.py +0 -0
  117. griptape_nodes/utils/dict_utils.py +0 -0
  118. griptape_nodes/utils/image_preview.py +128 -0
  119. griptape_nodes/utils/metaclasses.py +0 -0
  120. griptape_nodes/version_compatibility/__init__.py +0 -0
  121. griptape_nodes/version_compatibility/versions/__init__.py +0 -0
  122. griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +0 -0
  123. griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +5 -5
  124. griptape_nodes-0.43.0.dist-info/METADATA +90 -0
  125. griptape_nodes-0.43.0.dist-info/RECORD +129 -0
  126. griptape_nodes-0.43.0.dist-info/WHEEL +4 -0
  127. {griptape_nodes-0.41.0.dist-info → griptape_nodes-0.43.0.dist-info}/entry_points.txt +1 -0
  128. griptape_nodes/app/app_sessions.py +0 -458
  129. griptape_nodes/retained_mode/utils/session_persistence.py +0 -105
  130. griptape_nodes-0.41.0.dist-info/METADATA +0 -78
  131. griptape_nodes-0.41.0.dist-info/RECORD +0 -112
  132. griptape_nodes-0.41.0.dist-info/WHEEL +0 -4
  133. griptape_nodes-0.41.0.dist-info/licenses/LICENSE +0 -201
@@ -21,6 +21,18 @@ class RunAgentRequestArtifact(dict):
21
21
  @dataclass
22
22
  @PayloadRegistry.register
23
23
  class RunAgentRequest(RequestPayload):
24
+ """Run an agent with input and optional artifacts.
25
+
26
+ Use when: Executing conversational AI interactions, processing user queries,
27
+ running autonomous agents, handling multi-modal inputs with URLs.
28
+
29
+ Args:
30
+ input: Text input to send to the agent
31
+ url_artifacts: List of URL artifacts to include with the request
32
+
33
+ Results: RunAgentResultStarted -> RunAgentResultSuccess (with output) | RunAgentResultFailure (execution error)
34
+ """
35
+
24
36
  input: str
25
37
  url_artifacts: list[RunAgentRequestArtifact]
26
38
 
@@ -28,76 +40,126 @@ class RunAgentRequest(RequestPayload):
28
40
  @dataclass
29
41
  @PayloadRegistry.register
30
42
  class RunAgentResultStarted(WorkflowNotAlteredMixin, ResultPayloadSuccess):
31
- pass
43
+ """Agent execution started successfully. Execution will continue asynchronously."""
32
44
 
33
45
 
34
46
  @dataclass
35
47
  @PayloadRegistry.register
36
48
  class RunAgentResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
49
+ """Agent execution completed successfully.
50
+
51
+ Args:
52
+ output: Dictionary containing agent response and execution results
53
+ """
54
+
37
55
  output: dict
38
56
 
39
57
 
40
58
  @dataclass
41
59
  @PayloadRegistry.register
42
60
  class RunAgentResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
61
+ """Agent execution failed.
62
+
63
+ Args:
64
+ error: Dictionary containing error details and failure information
65
+ """
66
+
43
67
  error: dict
44
68
 
45
69
 
46
70
  @dataclass
47
71
  @PayloadRegistry.register
48
72
  class GetConversationMemoryRequest(RequestPayload):
49
- pass
73
+ """Get the agent's conversation memory.
74
+
75
+ Use when: Reviewing conversation history, implementing memory inspection,
76
+ debugging agent behavior, displaying conversation context.
77
+
78
+ Results: GetConversationMemoryResultSuccess (with runs) | GetConversationMemoryResultFailure (memory error)
79
+ """
50
80
 
51
81
 
52
82
  @dataclass
53
83
  @PayloadRegistry.register
54
84
  class GetConversationMemoryResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
85
+ """Conversation memory retrieved successfully.
86
+
87
+ Args:
88
+ runs: List of conversation runs (exchanges between user and agent)
89
+ """
90
+
55
91
  runs: list[Run]
56
92
 
57
93
 
58
94
  @dataclass
59
95
  @PayloadRegistry.register
60
96
  class GetConversationMemoryResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
61
- pass
97
+ """Conversation memory retrieval failed. Common causes: memory not initialized, access error."""
62
98
 
63
99
 
64
100
  @dataclass
65
101
  @PayloadRegistry.register
66
102
  class ConfigureAgentRequest(RequestPayload):
103
+ """Configure agent settings and behavior.
104
+
105
+ Use when: Setting up agent parameters, changing model configurations,
106
+ customizing agent behavior, updating agent settings.
107
+
108
+ Args:
109
+ prompt_driver: Dictionary of prompt driver configuration options
110
+
111
+ Results: ConfigureAgentResultSuccess | ConfigureAgentResultFailure (configuration error)
112
+ """
113
+
67
114
  prompt_driver: dict = field(default_factory=dict)
68
115
 
69
116
 
70
117
  @dataclass
71
118
  @PayloadRegistry.register
72
119
  class ConfigureAgentResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
73
- pass
120
+ """Agent configured successfully. New settings are now active."""
74
121
 
75
122
 
76
123
  @dataclass
77
124
  @PayloadRegistry.register
78
125
  class ConfigureAgentResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
79
- pass
126
+ """Agent configuration failed. Common causes: invalid parameters, configuration error."""
80
127
 
81
128
 
82
129
  @dataclass
83
130
  @PayloadRegistry.register
84
131
  class ResetAgentConversationMemoryRequest(RequestPayload):
85
- pass
132
+ """Reset the agent's conversation memory.
133
+
134
+ Use when: Starting fresh conversations, clearing conversation history,
135
+ resolving memory issues, implementing conversation reset features.
136
+
137
+ Results: ResetAgentConversationMemoryResultSuccess | ResetAgentConversationMemoryResultFailure (reset error)
138
+ """
86
139
 
87
140
 
88
141
  @dataclass
89
142
  @PayloadRegistry.register
90
143
  class ResetAgentConversationMemoryResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
91
- pass
144
+ """Agent conversation memory reset successfully. All previous conversation history cleared."""
92
145
 
93
146
 
94
147
  @dataclass
95
148
  @PayloadRegistry.register
96
149
  class ResetAgentConversationMemoryResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
97
- pass
150
+ """Agent conversation memory reset failed. Common causes: memory access error, system constraints."""
98
151
 
99
152
 
100
153
  @dataclass
101
154
  @PayloadRegistry.register
102
155
  class AgentStreamEvent(ExecutionPayload):
156
+ """Streaming token event during agent execution.
157
+
158
+ Use when: Implementing real-time agent output, displaying progressive responses,
159
+ building streaming UIs, monitoring agent token generation.
160
+
161
+ Args:
162
+ token: Individual token generated by the agent during execution
163
+ """
164
+
103
165
  token: str
@@ -13,6 +13,17 @@ from griptape_nodes.retained_mode.events.payload_registry import PayloadRegistry
13
13
  @dataclass
14
14
  @PayloadRegistry.register
15
15
  class AppStartSessionRequest(RequestPayload):
16
+ """Start a new application session.
17
+
18
+ Use when: Initializing client connections, beginning new workflow sessions,
19
+ setting up isolated execution environments, managing session state.
20
+
21
+ Args:
22
+ session_id: Specific session ID to use (None for auto-generated)
23
+
24
+ Results: AppStartSessionResultSuccess (with session ID) | AppStartSessionResultFailure (session creation error)
25
+ """
26
+
16
27
  # TODO: https://github.com/griptape-ai/griptape-nodes/issues/1600
17
28
  session_id: str | None = None
18
29
 
@@ -20,48 +31,86 @@ class AppStartSessionRequest(RequestPayload):
20
31
  @dataclass
21
32
  @PayloadRegistry.register
22
33
  class AppStartSessionResultSuccess(ResultPayloadSuccess):
34
+ """Session started successfully.
35
+
36
+ Args:
37
+ session_id: Unique identifier for the created session
38
+ """
39
+
23
40
  session_id: str
24
41
 
25
42
 
26
43
  @dataclass
27
44
  @PayloadRegistry.register
28
45
  class AppStartSessionResultFailure(ResultPayloadFailure):
29
- pass
46
+ """Session start failed. Common causes: resource constraints, initialization error."""
30
47
 
31
48
 
32
49
  @dataclass
33
50
  @PayloadRegistry.register
34
51
  class AppGetSessionRequest(RequestPayload):
35
- pass
52
+ """Get the current session information.
53
+
54
+ Use when: Checking session status, retrieving session details,
55
+ validating session state, debugging session issues.
56
+
57
+ Results: AppGetSessionResultSuccess (with session ID) | AppGetSessionResultFailure (session error)
58
+ """
36
59
 
37
60
 
38
61
  @dataclass
39
62
  @PayloadRegistry.register
40
63
  class AppGetSessionResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
64
+ """Session information retrieved successfully.
65
+
66
+ Args:
67
+ session_id: Current session identifier (None if no active session)
68
+ """
69
+
41
70
  session_id: str | None
42
71
 
43
72
 
44
73
  @dataclass
45
74
  @PayloadRegistry.register
46
75
  class AppGetSessionResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
47
- pass
76
+ """Session information retrieval failed. Common causes: session not found, access error."""
48
77
 
49
78
 
50
79
  @dataclass
51
80
  @PayloadRegistry.register
52
81
  class AppInitializationComplete(AppPayload):
53
- pass
82
+ """Application initialization completed successfully. All subsystems ready."""
83
+
84
+
85
+ @dataclass
86
+ @PayloadRegistry.register
87
+ class AppConnectionEstablished(AppPayload):
88
+ """Notification that a connection to the API has been established."""
54
89
 
55
90
 
56
91
  @dataclass
57
92
  @PayloadRegistry.register
58
93
  class GetEngineVersionRequest(RequestPayload):
59
- pass
94
+ """Get the engine version information.
95
+
96
+ Use when: Checking compatibility, displaying version info,
97
+ debugging engine issues, validating engine capabilities.
98
+
99
+ Results: GetEngineVersionResultSuccess (with version numbers) | GetEngineVersionResultFailure (version error)
100
+ """
60
101
 
61
102
 
62
103
  @dataclass
63
104
  @PayloadRegistry.register
64
105
  class GetEngineVersionResultSuccess(ResultPayloadSuccess):
106
+ """Engine version retrieved successfully.
107
+
108
+ Args:
109
+ major: Major version number
110
+ minor: Minor version number
111
+ patch: Patch version number
112
+ """
113
+
65
114
  major: int
66
115
  minor: int
67
116
  patch: int
@@ -70,25 +119,37 @@ class GetEngineVersionResultSuccess(ResultPayloadSuccess):
70
119
  @dataclass
71
120
  @PayloadRegistry.register
72
121
  class GetEngineVersionResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
73
- pass
122
+ """Engine version retrieval failed. Common causes: version not available, system error."""
74
123
 
75
124
 
76
125
  @dataclass
77
126
  @PayloadRegistry.register
78
127
  class AppEndSessionRequest(RequestPayload):
79
- pass
128
+ """End the current application session.
129
+
130
+ Use when: Closing client connections, cleaning up session resources,
131
+ terminating workflow sessions, implementing logout functionality.
132
+
133
+ Results: AppEndSessionResultSuccess (with session ID) | AppEndSessionResultFailure (cleanup error)
134
+ """
80
135
 
81
136
 
82
137
  @dataclass
83
138
  @PayloadRegistry.register
84
139
  class AppEndSessionResultSuccess(ResultPayloadSuccess):
140
+ """Session ended successfully.
141
+
142
+ Args:
143
+ session_id: Identifier of the ended session (None if no session was active)
144
+ """
145
+
85
146
  session_id: str | None
86
147
 
87
148
 
88
149
  @dataclass
89
150
  @PayloadRegistry.register
90
151
  class AppEndSessionResultFailure(ResultPayloadFailure):
91
- pass
152
+ """Session end failed. Common causes: session not found, cleanup error."""
92
153
 
93
154
 
94
155
  @dataclass
@@ -100,13 +161,13 @@ class SessionHeartbeatRequest(RequestPayload):
100
161
  @dataclass
101
162
  @PayloadRegistry.register
102
163
  class SessionHeartbeatResultSuccess(ResultPayloadSuccess):
103
- pass
164
+ """Session heartbeat successful. Session is active and responsive."""
104
165
 
105
166
 
106
167
  @dataclass
107
168
  @PayloadRegistry.register
108
169
  class SessionHeartbeatResultFailure(ResultPayloadFailure):
109
- pass
170
+ """Session heartbeat failed. Common causes: session inactive, network error, timeout."""
110
171
 
111
172
 
112
173
  @dataclass
@@ -125,6 +186,24 @@ class EngineHeartbeatRequest(RequestPayload):
125
186
  @dataclass
126
187
  @PayloadRegistry.register
127
188
  class EngineHeartbeatResultSuccess(ResultPayloadSuccess):
189
+ """Engine heartbeat successful with comprehensive status information.
190
+
191
+ Args:
192
+ heartbeat_id: Unique identifier correlating with the request
193
+ engine_version: Current engine version string
194
+ engine_id: Unique engine identifier (None if not set)
195
+ session_id: Current session identifier (None if no session)
196
+ timestamp: Heartbeat timestamp
197
+ instance_type: Cloud instance type (None if not applicable)
198
+ instance_region: Cloud instance region (None if not applicable)
199
+ instance_provider: Cloud provider name (None if not applicable)
200
+ deployment_type: Type of deployment (None if not applicable)
201
+ current_workflow: Name of active workflow (None if none)
202
+ workflow_file_path: Path to workflow file (None if none)
203
+ has_active_flow: Whether there's an active flow running
204
+ engine_name: Human-readable engine name
205
+ """
206
+
128
207
  heartbeat_id: str
129
208
  engine_version: str
130
209
  engine_id: str | None
@@ -134,7 +213,6 @@ class EngineHeartbeatResultSuccess(ResultPayloadSuccess):
134
213
  instance_region: str | None
135
214
  instance_provider: str | None
136
215
  deployment_type: str | None
137
- public_ip: str | None
138
216
  current_workflow: str | None
139
217
  workflow_file_path: str | None
140
218
  has_active_flow: bool
@@ -144,40 +222,87 @@ class EngineHeartbeatResultSuccess(ResultPayloadSuccess):
144
222
  @dataclass
145
223
  @PayloadRegistry.register
146
224
  class EngineHeartbeatResultFailure(ResultPayloadFailure):
225
+ """Engine heartbeat failed.
226
+
227
+ Args:
228
+ heartbeat_id: Unique identifier correlating with the request
229
+ """
230
+
147
231
  heartbeat_id: str
148
232
 
149
233
 
150
234
  @dataclass
151
235
  @PayloadRegistry.register
152
236
  class SetEngineNameRequest(RequestPayload):
237
+ """Set the human-readable engine name.
238
+
239
+ Use when: Customizing engine identification, setting up engine instances,
240
+ implementing engine management, branding engine instances.
241
+
242
+ Args:
243
+ engine_name: New name for the engine
244
+
245
+ Results: SetEngineNameResultSuccess (with name) | SetEngineNameResultFailure (validation error)
246
+ """
247
+
153
248
  engine_name: str
154
249
 
155
250
 
156
251
  @dataclass
157
252
  @PayloadRegistry.register
158
253
  class SetEngineNameResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
254
+ """Engine name set successfully.
255
+
256
+ Args:
257
+ engine_name: The name that was set for the engine
258
+ """
259
+
159
260
  engine_name: str
160
261
 
161
262
 
162
263
  @dataclass
163
264
  @PayloadRegistry.register
164
265
  class SetEngineNameResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
266
+ """Engine name setting failed.
267
+
268
+ Args:
269
+ error_message: Detailed error message describing the failure
270
+ """
271
+
165
272
  error_message: str
166
273
 
167
274
 
168
275
  @dataclass
169
276
  @PayloadRegistry.register
170
277
  class GetEngineNameRequest(RequestPayload):
171
- pass
278
+ """Get the current engine name.
279
+
280
+ Use when: Displaying engine information, checking engine identity,
281
+ implementing engine management UIs, debugging engine issues.
282
+
283
+ Results: GetEngineNameResultSuccess (with name) | GetEngineNameResultFailure (retrieval error)
284
+ """
172
285
 
173
286
 
174
287
  @dataclass
175
288
  @PayloadRegistry.register
176
289
  class GetEngineNameResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
290
+ """Engine name retrieved successfully.
291
+
292
+ Args:
293
+ engine_name: Current engine name
294
+ """
295
+
177
296
  engine_name: str
178
297
 
179
298
 
180
299
  @dataclass
181
300
  @PayloadRegistry.register
182
301
  class GetEngineNameResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
302
+ """Engine name retrieval failed.
303
+
304
+ Args:
305
+ error_message: Detailed error message describing the failure
306
+ """
307
+
183
308
  error_message: str
@@ -15,16 +15,39 @@ from griptape_nodes.retained_mode.events.payload_registry import PayloadRegistry
15
15
  @dataclass
16
16
  @PayloadRegistry.register
17
17
  class RunArbitraryPythonStringRequest(RequestPayload):
18
+ """Execute arbitrary Python code string.
19
+
20
+ Use when: Development/debugging, testing code snippets, prototyping,
21
+ educational purposes. WARNING: This is configurable behavior that can be disabled.
22
+
23
+ Args:
24
+ python_string: Python code string to execute
25
+
26
+ Results: RunArbitraryPythonStringResultSuccess (with output) | RunArbitraryPythonStringResultFailure (execution error)
27
+ """
28
+
18
29
  python_string: str
19
30
 
20
31
 
21
32
  @dataclass
22
33
  @PayloadRegistry.register
23
34
  class RunArbitraryPythonStringResultSuccess(ResultPayloadSuccess):
35
+ """Python code executed successfully.
36
+
37
+ Args:
38
+ python_output: String output from the executed Python code
39
+ """
40
+
24
41
  python_output: str
25
42
 
26
43
 
27
44
  @dataclass
28
45
  @PayloadRegistry.register
29
46
  class RunArbitraryPythonStringResultFailure(ResultPayloadFailure):
47
+ """Python code execution failed.
48
+
49
+ Args:
50
+ python_output: Error output from the failed Python code execution
51
+ """
52
+
30
53
  python_output: str
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import json
4
4
  from abc import ABC, abstractmethod
5
5
  from dataclasses import asdict, dataclass, field, is_dataclass
6
- from typing import TYPE_CHECKING, Any, ClassVar, Generic, TypeVar
6
+ from typing import TYPE_CHECKING, Any, ClassVar, TypeVar
7
7
 
8
8
  from griptape.artifacts import BaseArtifact
9
9
  from griptape.events import BaseEvent as GtBaseEvent
@@ -12,9 +12,6 @@ from griptape.structures import Structure
12
12
  from griptape.tools import BaseTool
13
13
  from pydantic import BaseModel, Field
14
14
 
15
- from griptape_nodes.retained_mode.utils.engine_identity import EngineIdentity
16
- from griptape_nodes.retained_mode.utils.session_persistence import SessionPersistence
17
-
18
15
  if TYPE_CHECKING:
19
16
  import builtins
20
17
 
@@ -104,7 +101,7 @@ class AppPayload(Payload):
104
101
 
105
102
 
106
103
  # Type variables for our generic payloads
107
- P = TypeVar("P", bound=Payload)
104
+ P = TypeVar("P", bound=RequestPayload)
108
105
  R = TypeVar("R", bound=ResultPayload)
109
106
  E = TypeVar("E", bound=ExecutionPayload)
110
107
  A = TypeVar("A", bound=AppPayload)
@@ -113,32 +110,13 @@ A = TypeVar("A", bound=AppPayload)
113
110
  class BaseEvent(BaseModel, ABC):
114
111
  """Abstract base class for all events."""
115
112
 
116
- # Keeping here instead of in GriptapeNodes to avoid circular import hell.
117
- # TODO: https://github.com/griptape-ai/griptape-nodes/issues/848
118
- _session_id: ClassVar[str | None] = None
113
+ # Instance fields for engine and session identification
119
114
  _engine_id: ClassVar[str | None] = None
115
+ _session_id: ClassVar[str | None] = None
120
116
 
121
- # Instance variables with a default_factory that references the class variable
122
117
  engine_id: str | None = Field(default_factory=lambda: BaseEvent._engine_id)
123
118
  session_id: str | None = Field(default_factory=lambda: BaseEvent._session_id)
124
119
 
125
- @classmethod
126
- def initialize_engine_id(cls) -> None:
127
- """Initialize the engine ID if not already set."""
128
- if cls._engine_id is None:
129
- persisted_engine_id = cls._engine_id = EngineIdentity.get_engine_id()
130
- if persisted_engine_id:
131
- cls._engine_id = persisted_engine_id
132
-
133
- @classmethod
134
- def initialize_session_id(cls) -> None:
135
- """Initialize the session ID from persisted storage if available."""
136
- if cls._session_id is None:
137
- # Check if there's a persisted session ID
138
- persisted_session_id = SessionPersistence.get_persisted_session_id()
139
- if persisted_session_id:
140
- cls._session_id = persisted_session_id
141
-
142
120
  # Custom JSON encoder for the payload
143
121
  class Config:
144
122
  """Pydantic configuration for the BaseEvent class."""
@@ -203,10 +181,12 @@ class BaseEvent(BaseModel, ABC):
203
181
  """
204
182
 
205
183
 
206
- class EventRequest(BaseEvent, Generic[P]):
184
+ class EventRequest[P: Payload](BaseEvent):
207
185
  """Request event."""
208
186
 
209
187
  request: P
188
+ request_id: str | None = None
189
+ response_topic: str | None = None
210
190
 
211
191
  def __init__(self, **data) -> None:
212
192
  """Initialize an EventRequest, inferring the generic type if needed."""
@@ -262,14 +242,16 @@ class EventRequest(BaseEvent, Generic[P]):
262
242
  raise ValueError(msg)
263
243
 
264
244
  # Create the event instance with the payload
265
- return cls(request=request_payload)
245
+ return cls(request=request_payload, **event_data)
266
246
 
267
247
 
268
- class EventResult(BaseEvent, Generic[P, R], ABC):
248
+ class EventResult[P: RequestPayload, R: ResultPayload](BaseEvent, ABC):
269
249
  """Abstract base class for result events."""
270
250
 
271
251
  request: P
272
252
  result: R
253
+ request_id: str | None = None
254
+ response_topic: str | None = None
273
255
  retained_mode: str | None = None
274
256
 
275
257
  def __init__(self, **data) -> None:
@@ -447,7 +429,7 @@ def deserialize_event(json_data: str | dict | Any) -> BaseEvent:
447
429
 
448
430
 
449
431
  # EXECUTION EVENT BASE (this event type is used for the execution of a Griptape Nodes flow)
450
- class ExecutionEvent(BaseEvent, Generic[E]):
432
+ class ExecutionEvent[E: ExecutionPayload](BaseEvent):
451
433
  payload: E
452
434
 
453
435
  def __init__(self, **data) -> None:
@@ -508,7 +490,7 @@ class ExecutionEvent(BaseEvent, Generic[E]):
508
490
 
509
491
 
510
492
  # Events sent as part of the lifecycle of the Griptape Nodes application.
511
- class AppEvent(BaseEvent, Generic[A]):
493
+ class AppEvent[A: AppPayload](BaseEvent):
512
494
  payload: A
513
495
 
514
496
  def __init__(self, **data) -> None: