conductor-python 1.3.4__tar.gz → 1.3.5__tar.gz

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 (242) hide show
  1. {conductor_python-1.3.4 → conductor_python-1.3.5}/PKG-INFO +169 -171
  2. {conductor_python-1.3.4 → conductor_python-1.3.5}/README.md +168 -170
  3. {conductor_python-1.3.4 → conductor_python-1.3.5}/pyproject.toml +4 -1
  4. conductor_python-1.3.5/src/conductor/__init__.py +6 -0
  5. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/automator/async_task_runner.py +47 -40
  6. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/automator/task_handler.py +10 -0
  7. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/automator/task_runner.py +57 -126
  8. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/async_task_resource_api.py +83 -0
  9. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/task_resource_api.py +83 -0
  10. conductor_python-1.3.4/src/conductor/__init__.py +0 -1
  11. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/__init__.py +0 -0
  12. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/ai/__init__.py +0 -0
  13. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/ai/configuration.py +0 -0
  14. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/ai/integrations.py +0 -0
  15. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/ai/orchestrator.py +0 -0
  16. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/authorization_client.py +0 -0
  17. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/automator/__init__.py +0 -0
  18. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/automator/json_schema_generator.py +0 -0
  19. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/automator/utils.py +0 -0
  20. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/configuration/__init__.py +0 -0
  21. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/configuration/configuration.py +0 -0
  22. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/configuration/settings/__init__.py +0 -0
  23. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/configuration/settings/authentication_settings.py +0 -0
  24. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/configuration/settings/metrics_settings.py +0 -0
  25. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/context/__init__.py +0 -0
  26. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/context/task_context.py +0 -0
  27. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/__init__.py +0 -0
  28. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/conductor_event.py +0 -0
  29. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/event_client.py +0 -0
  30. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/event_dispatcher.py +0 -0
  31. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/listener_register.py +0 -0
  32. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/listeners.py +0 -0
  33. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/queue/__init__.py +0 -0
  34. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/queue/kafka_queue_configuration.py +0 -0
  35. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/queue/queue_configuration.py +0 -0
  36. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/queue/queue_worker_configuration.py +0 -0
  37. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/sync_event_dispatcher.py +0 -0
  38. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/sync_listener_register.py +0 -0
  39. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/task_events.py +0 -0
  40. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/task_runner_events.py +0 -0
  41. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/event/workflow_events.py +0 -0
  42. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/exceptions/__init__.py +0 -0
  43. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/exceptions/api_error.py +0 -0
  44. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/exceptions/api_exception_handler.py +0 -0
  45. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/helpers/__init__.py +0 -0
  46. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/helpers/helper.py +0 -0
  47. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/__init__.py +0 -0
  48. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/__init__.py +0 -0
  49. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/application_resource_api.py +0 -0
  50. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/authorization_resource_api.py +0 -0
  51. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/event_resource_api.py +0 -0
  52. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/gateway_auth_resource_api.py +0 -0
  53. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/group_resource_api.py +0 -0
  54. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/integration_resource_api.py +0 -0
  55. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/metadata_resource_api.py +0 -0
  56. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/prompt_resource_api.py +0 -0
  57. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/role_resource_api.py +0 -0
  58. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/scheduler_resource_api.py +0 -0
  59. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/schema_resource_api.py +0 -0
  60. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/secret_resource_api.py +0 -0
  61. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/service_registry_resource_api.py +0 -0
  62. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/token_resource_api.py +0 -0
  63. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/user_resource_api.py +0 -0
  64. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/workflow_bulk_resource_api.py +0 -0
  65. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api/workflow_resource_api.py +0 -0
  66. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/api_client.py +0 -0
  67. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/async_api_client.py +0 -0
  68. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/async_rest.py +0 -0
  69. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/__init__.py +0 -0
  70. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/action.py +0 -0
  71. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/auditable.py +0 -0
  72. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/authentication_config.py +0 -0
  73. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/authorization_request.py +0 -0
  74. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/bulk_response.py +0 -0
  75. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/circuit_breaker_transition_response.py +0 -0
  76. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/conductor_application.py +0 -0
  77. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/conductor_user.py +0 -0
  78. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/correlation_ids_search_request.py +0 -0
  79. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/create_or_update_application_request.py +0 -0
  80. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/create_or_update_role_request.py +0 -0
  81. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/event_handler.py +0 -0
  82. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/external_storage_location.py +0 -0
  83. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/generate_token_request.py +0 -0
  84. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/group.py +0 -0
  85. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/health.py +0 -0
  86. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/health_check_status.py +0 -0
  87. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/integration.py +0 -0
  88. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/integration_api.py +0 -0
  89. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/integration_api_update.py +0 -0
  90. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/integration_def.py +0 -0
  91. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/integration_update.py +0 -0
  92. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/permission.py +0 -0
  93. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/poll_data.py +0 -0
  94. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/prompt_template.py +0 -0
  95. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/prompt_test_request.py +0 -0
  96. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/proto_registry_entry.py +0 -0
  97. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/rate_limit.py +0 -0
  98. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/request_param.py +0 -0
  99. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/rerun_workflow_request.py +0 -0
  100. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/response.py +0 -0
  101. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/role.py +0 -0
  102. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/save_schedule_request.py +0 -0
  103. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/schema_def.py +0 -0
  104. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/scrollable_search_result_workflow_summary.py +0 -0
  105. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_task.py +0 -0
  106. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_task_summary.py +0 -0
  107. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_workflow.py +0 -0
  108. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_workflow_schedule_execution_model.py +0 -0
  109. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_workflow_summary.py +0 -0
  110. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/service_method.py +0 -0
  111. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/service_registry.py +0 -0
  112. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/signal_response.py +0 -0
  113. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/skip_task_request.py +0 -0
  114. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/start_workflow.py +0 -0
  115. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/start_workflow_request.py +0 -0
  116. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/state_change_event.py +0 -0
  117. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/sub_workflow_params.py +0 -0
  118. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/subject_ref.py +0 -0
  119. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/tag_object.py +0 -0
  120. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/tag_string.py +0 -0
  121. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/target_ref.py +0 -0
  122. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/task.py +0 -0
  123. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/task_def.py +0 -0
  124. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/task_details.py +0 -0
  125. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/task_exec_log.py +0 -0
  126. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/task_result.py +0 -0
  127. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/task_result_status.py +0 -0
  128. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/task_summary.py +0 -0
  129. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/terminate_workflow.py +0 -0
  130. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/token.py +0 -0
  131. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/update_workflow_variables.py +0 -0
  132. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/upsert_group_request.py +0 -0
  133. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/upsert_user_request.py +0 -0
  134. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow.py +0 -0
  135. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_def.py +0 -0
  136. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_run.py +0 -0
  137. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_schedule.py +0 -0
  138. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_schedule_execution_model.py +0 -0
  139. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_state_update.py +0 -0
  140. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_status.py +0 -0
  141. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_summary.py +0 -0
  142. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_tag.py +0 -0
  143. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_task.py +0 -0
  144. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_test_request.py +0 -0
  145. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/rest.py +0 -0
  146. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/http/thread.py +0 -0
  147. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/integration_client.py +0 -0
  148. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/metadata_client.py +0 -0
  149. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/__init__.py +0 -0
  150. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/api/__init__.py +0 -0
  151. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/api/tags_api.py +0 -0
  152. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/models/__init__.py +0 -0
  153. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/models/access_key.py +0 -0
  154. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/models/access_key_status.py +0 -0
  155. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/models/access_type.py +0 -0
  156. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/models/created_access_key.py +0 -0
  157. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/models/granted_permission.py +0 -0
  158. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/models/metadata_tag.py +0 -0
  159. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/models/ratelimit_tag.py +0 -0
  160. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_authorization_client.py +0 -0
  161. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_base_client.py +0 -0
  162. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_integration_client.py +0 -0
  163. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_metadata_client.py +0 -0
  164. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_prompt_client.py +0 -0
  165. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_scheduler_client.py +0 -0
  166. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_schema_client.py +0 -0
  167. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_secret_client.py +0 -0
  168. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_service_registry_client.py +0 -0
  169. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_task_client.py +0 -0
  170. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_workflow_client.py +0 -0
  171. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/orkes_clients.py +0 -0
  172. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/prompt_client.py +0 -0
  173. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/scheduler_client.py +0 -0
  174. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/schema_client.py +0 -0
  175. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/secret_client.py +0 -0
  176. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/service_registry_client.py +0 -0
  177. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/task_client.py +0 -0
  178. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/telemetry/__init__.py +0 -0
  179. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/telemetry/metrics_collector.py +0 -0
  180. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/telemetry/model/__init__.py +0 -0
  181. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/telemetry/model/metric_documentation.py +0 -0
  182. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/telemetry/model/metric_label.py +0 -0
  183. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/telemetry/model/metric_name.py +0 -0
  184. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/worker/__init__.py +0 -0
  185. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/worker/exception.py +0 -0
  186. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/worker/worker.py +0 -0
  187. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/worker/worker_config.py +0 -0
  188. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/worker/worker_interface.py +0 -0
  189. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/worker/worker_loader.py +0 -0
  190. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/worker/worker_task.py +0 -0
  191. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/__init__.py +0 -0
  192. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/conductor_workflow.py +0 -0
  193. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/executor/__init__.py +0 -0
  194. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/executor/workflow_executor.py +0 -0
  195. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/__init__.py +0 -0
  196. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/do_while_task.py +0 -0
  197. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/dynamic_fork_task.py +0 -0
  198. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/dynamic_task.py +0 -0
  199. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/event_task.py +0 -0
  200. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/fork_task.py +0 -0
  201. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/get_document.py +0 -0
  202. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/http_poll_task.py +0 -0
  203. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/http_task.py +0 -0
  204. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/human_task.py +0 -0
  205. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/inline.py +0 -0
  206. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/javascript_task.py +0 -0
  207. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/join_task.py +0 -0
  208. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/json_jq_task.py +0 -0
  209. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/kafka_publish.py +0 -0
  210. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/kafka_publish_input.py +0 -0
  211. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/__init__.py +0 -0
  212. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/call_mcp_tool.py +0 -0
  213. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/chat_message.py +0 -0
  214. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/generate_audio.py +0 -0
  215. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/generate_image.py +0 -0
  216. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/list_mcp_tools.py +0 -0
  217. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_chat_complete.py +0 -0
  218. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_generate_embeddings.py +0 -0
  219. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_index_documents.py +0 -0
  220. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_index_text.py +0 -0
  221. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_query_embeddings.py +0 -0
  222. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_search_embeddings.py +0 -0
  223. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_search_index.py +0 -0
  224. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_store_embeddings.py +0 -0
  225. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_text_complete.py +0 -0
  226. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/tool_call.py +0 -0
  227. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/tool_spec.py +0 -0
  228. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/utils/__init__.py +0 -0
  229. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/utils/embedding_model.py +0 -0
  230. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/utils/prompt.py +0 -0
  231. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/set_variable_task.py +0 -0
  232. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/simple_task.py +0 -0
  233. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/start_workflow_task.py +0 -0
  234. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/sub_workflow_task.py +0 -0
  235. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/switch_task.py +0 -0
  236. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/task.py +0 -0
  237. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/task_type.py +0 -0
  238. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/terminate_task.py +0 -0
  239. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/timeout_policy.py +0 -0
  240. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/wait_for_webhook_task.py +0 -0
  241. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow/task/wait_task.py +0 -0
  242. {conductor_python-1.3.4 → conductor_python-1.3.5}/src/conductor/client/workflow_client.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: conductor-python
3
- Version: 1.3.4
3
+ Version: 1.3.5
4
4
  Summary: Python SDK for working with https://github.com/conductor-oss/conductor
5
5
  License: Apache-2.0
6
6
  Author: Orkes
@@ -40,33 +40,30 @@ Description-Content-Type: text/markdown
40
40
 
41
41
  Python SDK for [Conductor](https://www.conductor-oss.org/) (OSS and Orkes Conductor) — an orchestration platform for building distributed applications, AI agents, and workflow-driven microservices. Define workflows as code, run workers anywhere, and let Conductor handle retries, state management, and observability.
42
42
 
43
- If you find [Conductor](https://github.com/conductor-oss/conductor) useful, please consider giving it a star on GitHub -- it helps the project grow.
43
+ If you find [Conductor](https://github.com/conductor-oss/conductor) useful, please consider giving it a star on GitHub it helps the project grow.
44
44
 
45
45
  [![GitHub stars](https://img.shields.io/github/stars/conductor-oss/conductor.svg?style=social&label=Star&maxAge=)](https://GitHub.com/conductor-oss/conductor/)
46
46
 
47
-
48
-
49
47
  <!-- TOC -->
50
- * [Python SDK for Conductor](#python-sdk-for-conductor)
51
- * [Start Conductor server](#start--conductor-server)
52
- * [Install the SDK](#install-the-sdk)
53
- * [60-Second Quickstart](#60-second-quickstart)
54
- * [Comprehensive worker example](#comprehensive-worker-example-)
55
- * [Workers](#workers)
56
- * [Monitoring Workers](#monitoring-workers)
57
- * [Workflows](#workflows)
58
- * [Troubleshooting](#troubleshooting)
59
- * [AI & LLM Workflows](#ai--llm-workflows)
60
- * [Examples](#examples)
61
- * [API Journey Examples](#api-journey-examples)
62
- * [Documentation](#documentation)
63
- * [Support](#support)
64
- * [Frequently Asked Questions](#frequently-asked-questions)
65
- * [License](#license)
48
+ * [Start Conductor Server](#start-conductor-server)
49
+ * [Install the SDK](#install-the-sdk)
50
+ * [60-Second Quickstart](#60-second-quickstart)
51
+ * [Feature Showcase](#feature-showcase)
52
+ * [Workers: Sync and Async](#workers-sync-and-async)
53
+ * [Workflows with HTTP Calls and Waits](#workflows-with-http-calls-and-waits)
54
+ * [Long-Running Tasks with TaskContext](#long-running-tasks-with-taskcontext)
55
+ * [Monitoring with Metrics](#monitoring-with-metrics)
56
+ * [Managing Workflow Executions](#managing-workflow-executions)
57
+ * [AI & LLM Workflows](#ai--llm-workflows)
58
+ * [Why Conductor?](#why-conductor)
59
+ * [Examples](#examples)
60
+ * [Documentation](#documentation)
61
+ * [Frequently Asked Questions](#frequently-asked-questions)
62
+ * [Support](#support)
63
+ * [License](#license)
66
64
  <!-- TOC -->
67
65
 
68
-
69
- ## Start Conductor server
66
+ ## Start Conductor Server
70
67
 
71
68
  If you don't already have a Conductor server running, pick one:
72
69
 
@@ -117,7 +114,7 @@ workflow.output_parameters({'result': greet_task.output('result')})
117
114
  workflow.register(overwrite=True)
118
115
  ```
119
116
 
120
- **Step 2: Write worker**
117
+ **Step 2: Write a worker**
121
118
 
122
119
  Workers are just Python functions decorated with `@worker_task` that poll Conductor for tasks and execute them.
123
120
 
@@ -182,216 +179,201 @@ Run it:
182
179
  python quickstart.py
183
180
  ```
184
181
 
185
- > ### Using Orkes Conductor / Remote Server?
182
+ > ### Using Orkes Conductor / Remote Server?
186
183
  > Export your authentication credentials as well:
187
- >
184
+ >
188
185
  > ```shell
189
186
  > export CONDUCTOR_SERVER_URL="https://your-cluster.orkesconductor.io/api"
190
- >
187
+ >
191
188
  > # If using Orkes Conductor that requires auth key/secret
192
189
  > export CONDUCTOR_AUTH_KEY="your-key"
193
190
  > export CONDUCTOR_AUTH_SECRET="your-secret"
194
- >
191
+ >
195
192
  > # Optional — set to false to force HTTP/1.1 if your network environment has unstable long-lived HTTP/2 connections (default: true)
196
193
  > # export CONDUCTOR_HTTP2_ENABLED=false
197
194
  > ```
198
195
  > See [Configuration](#configuration) for details.
199
196
 
200
- That's it -- you just defined a worker, built a workflow, and executed it. Open the Conductor UI (default:
197
+ That's it you just defined a worker, built a workflow, and executed it. Open the Conductor UI (default:
201
198
  [http://localhost:8127](http://localhost:8127)) to see the execution.
202
199
 
203
- ## Comprehensive worker example
204
- The example includes sync + async workers, metrics, and long-running tasks
205
-
206
- See [examples/workers_e2e.py](examples/workers_e2e.py)
207
-
208
200
  ---
209
201
 
210
- ## Workers
202
+ ## Feature Showcase
211
203
 
212
- Workers are Python functions that execute Conductor tasks. Decorate any function with `@worker_task` to:
204
+ ### Workers: Sync and Async
213
205
 
214
- - register it as a worker (auto-discovered by `TaskHandler`)
215
- - use it as a workflow task (call it with `task_ref_name=...`)
216
-
217
- Note: Workers can also be used by LLMs for tool calling (see [AI & LLM Workflows](#ai--llm-workflows)).
206
+ The SDK automatically selects the right runner based on your function signature — `TaskRunner` (thread pool) for sync functions, `AsyncTaskRunner` (event loop) for async.
218
207
 
219
208
  ```python
220
209
  from conductor.client.worker.worker_task import worker_task
221
210
 
222
- @worker_task(task_definition_name='greet')
223
- def greet(name: str) -> str:
224
- return f'Hello {name}'
225
- ```
211
+ # Sync worker — for CPU-bound work (uses ThreadPoolExecutor)
212
+ @worker_task(task_definition_name='process_image', thread_count=4)
213
+ def process_image(image_url: str) -> dict:
214
+ import PIL.Image, io, requests
215
+ img = PIL.Image.open(io.BytesIO(requests.get(image_url).content))
216
+ img.thumbnail((256, 256))
217
+ return {'width': img.width, 'height': img.height}
226
218
 
227
- **Async workers** for I/O-bound tasks — the SDK automatically uses `AsyncTaskRunner` (event loop, no thread overhead):
228
219
 
229
- ```python
230
- import httpx
231
-
232
- @worker_task(task_definition_name='fetch_data')
220
+ # Async worker — for I/O-bound work (uses AsyncTaskRunner, no thread overhead)
221
+ @worker_task(task_definition_name='fetch_data', thread_count=50)
233
222
  async def fetch_data(url: str) -> dict:
223
+ import httpx
234
224
  async with httpx.AsyncClient() as client:
235
- response = await client.get(url)
236
- return response.json()
225
+ resp = await client.get(url)
226
+ return resp.json()
237
227
  ```
238
228
 
239
- **Start workers** with `TaskHandler`:
240
-
241
- Note: `@worker_task` functions are discovered only after their modules are imported. Either import your worker modules
242
- explicitly, or pass `import_modules=[...]` when constructing `TaskHandler`.
229
+ Start workers with `TaskHandler` — it auto-discovers `@worker_task` functions and spawns one subprocess per worker:
243
230
 
244
231
  ```python
245
232
  from conductor.client.automator.task_handler import TaskHandler
246
233
  from conductor.client.configuration.configuration import Configuration
247
234
 
248
- api_config = Configuration()
249
- task_handler = TaskHandler(
250
- workers=[],
251
- configuration=api_config,
252
- scan_for_annotated_workers=True, # auto-discover @worker_task functions
253
- # monitor_processes=True and restart_on_failure=True by default
254
- )
255
- task_handler.start_processes()
256
- try:
257
- task_handler.join_processes() # blocks (workers poll forever)
258
- finally:
259
- task_handler.stop_processes()
235
+ config = Configuration()
236
+ with TaskHandler(configuration=config, scan_for_annotated_workers=True) as task_handler:
237
+ task_handler.start_processes()
238
+ task_handler.join_processes() # blocks forever (workers poll continuously)
260
239
  ```
261
240
 
262
- Workers support complex inputs (dataclasses), long-running tasks (`TaskInProgress`), and hierarchical configuration via environment variables.
263
-
264
- **Resilience: auto-restart and health checks**
241
+ See [examples/worker_example.py](examples/worker_example.py) and [examples/workers_e2e.py](examples/workers_e2e.py) for complete examples.
265
242
 
243
+ ### Workflows with HTTP Calls and Waits
266
244
 
267
- Workers are typically long-lived services. By default, `TaskHandler` monitors worker subprocesses and restarts them if
268
- they exit unexpectedly.
269
-
270
- For a `/healthcheck` endpoint, you can use:
245
+ Chain custom workers with built-in system tasks — HTTP calls, waits, JavaScript, JQ transforms all in one workflow:
271
246
 
272
247
  ```python
273
- task_handler.is_healthy()
274
- task_handler.get_worker_process_status()
275
- ```
248
+ from conductor.client.workflow.conductor_workflow import ConductorWorkflow
249
+ from conductor.client.workflow.task.http_task import HttpTask
250
+ from conductor.client.workflow.task.wait_task import WaitTask
276
251
 
277
- To disable monitoring/restarts (e.g., local debugging):
252
+ workflow = ConductorWorkflow(name='order_pipeline', version=1, executor=executor)
278
253
 
279
- ```python
280
- TaskHandler(..., monitor_processes=False, restart_on_failure=False)
281
- ```
254
+ # Custom worker task
255
+ validate = validate_order(task_ref_name='validate', order_id=workflow.input('order_id'))
282
256
 
283
- **Worker Configuration**
257
+ # Built-in HTTP task — call any API, no worker needed
258
+ charge_payment = HttpTask(task_ref_name='charge_payment', http_input={
259
+ 'uri': 'https://api.stripe.com/v1/charges',
260
+ 'method': 'POST',
261
+ 'headers': {'Authorization': ['Bearer ${workflow.input.stripe_key}']},
262
+ 'body': {'amount': '${validate.output.amount}'}
263
+ })
284
264
 
285
- Workers support hierarchical environment variable configuration global settings that can be overridden per worker:
265
+ # Built-in Wait taskpause the workflow for 10 seconds
266
+ cool_down = WaitTask(task_ref_name='cool_down', wait_for_seconds=10)
286
267
 
287
- ```shell
288
- # Global (all workers)
289
- export CONDUCTOR_WORKER_ALL_POLL_INTERVAL_MILLIS=250
290
- export CONDUCTOR_WORKER_ALL_THREAD_COUNT=20
291
- export CONDUCTOR_WORKER_ALL_DOMAIN=production
268
+ # Another custom worker task
269
+ notify = send_notification(task_ref_name='notify', message='Order complete')
292
270
 
293
- # Per-worker override
294
- export CONDUCTOR_WORKER_GREETINGS_THREAD_COUNT=50
271
+ # Chain with >> operator
272
+ workflow >> validate >> charge_payment >> cool_down >> notify
273
+
274
+ # Execute synchronously and wait for the result
275
+ result = workflow.execute(workflow_input={'order_id': 'ORD-123', 'stripe_key': 'sk_test_...'})
276
+ print(result.output)
295
277
  ```
296
278
 
297
- See [WORKER_CONFIGURATION.md](WORKER_CONFIGURATION.md) for all options.
279
+ See [examples/kitchensink.py](examples/kitchensink.py) for all task types (HTTP, JavaScript, JQ, Switch, Terminate) and [examples/workflow_ops.py](examples/workflow_ops.py) for lifecycle operations.
298
280
 
299
- ## Monitoring Workers
281
+ ### Long-Running Tasks with TaskContext
300
282
 
301
- Enable Prometheus metrics:
283
+ For tasks that take minutes or hours (batch processing, ML training, external approvals), use `TaskContext` to report progress and poll incrementally:
302
284
 
303
285
  ```python
304
- from conductor.client.automator.task_handler import TaskHandler
305
- from conductor.client.configuration.configuration import Configuration
306
- from conductor.client.configuration.settings.metrics_settings import MetricsSettings
286
+ from typing import Union
287
+ from conductor.client.worker.worker_task import worker_task
288
+ from conductor.client.context.task_context import get_task_context, TaskInProgress
307
289
 
308
- api_config = Configuration()
309
- metrics_settings = MetricsSettings(directory='/tmp/conductor-metrics', http_port=8000)
290
+ @worker_task(task_definition_name='batch_job')
291
+ def batch_job(batch_id: str) -> Union[dict, TaskInProgress]:
292
+ ctx = get_task_context()
293
+ ctx.add_log(f"Processing batch {batch_id}, poll #{ctx.get_poll_count()}")
310
294
 
311
- task_handler = TaskHandler(configuration=api_config, metrics_settings=metrics_settings, scan_for_annotated_workers=True)
312
- task_handler.start_processes()
313
- # Metrics at http://localhost:8000/metrics
314
- try:
315
- task_handler.join_processes() # blocks (workers poll forever)
316
- finally:
317
- task_handler.stop_processes()
295
+ if ctx.get_poll_count() < 3:
296
+ # Not done yet — re-queue and check again in 30 seconds
297
+ return TaskInProgress(callback_after_seconds=30, output={'progress': ctx.get_poll_count() * 33})
298
+
299
+ # Done after 3 polls
300
+ return {'status': 'completed', 'batch_id': batch_id}
318
301
  ```
319
302
 
320
- See [METRICS.md](METRICS.md) for details.
303
+ `TaskContext` also provides access to task metadata, retry counts, workflow IDs, and the ability to add logs visible in the Conductor UI.
321
304
 
322
- **Learn more:**
323
- - [Worker Design & Architecture](docs/design/WORKER_DESIGN.md) — AsyncTaskRunner vs TaskRunner, discovery, lifecycle
324
- - [Worker Configuration](WORKER_CONFIGURATION.md) — Environment variable configuration system
325
- - [Complete Worker Guide](docs/WORKER.md) — All worker patterns (function, class, annotation, async)
305
+ See [examples/task_context_example.py](examples/task_context_example.py) for all patterns (polling, retry-aware logic, async context, input access).
326
306
 
327
- ## Workflows
307
+ ### Monitoring with Metrics
328
308
 
329
- Define workflows in Python using the `>>` operator to chain tasks:
309
+ Enable Prometheus metrics with a single setting — the SDK exposes poll counts, execution times, error rates, and HTTP latency:
330
310
 
331
311
  ```python
312
+ from conductor.client.automator.task_handler import TaskHandler
332
313
  from conductor.client.configuration.configuration import Configuration
333
- from conductor.client.orkes_clients import OrkesClients
334
- from conductor.client.workflow.conductor_workflow import ConductorWorkflow
314
+ from conductor.client.configuration.settings.metrics_settings import MetricsSettings
335
315
 
336
- api_config = Configuration()
337
- clients = OrkesClients(configuration=api_config)
338
- workflow_executor = clients.get_workflow_executor()
316
+ config = Configuration()
317
+ metrics = MetricsSettings(directory='/tmp/conductor-metrics', http_port=8000)
339
318
 
340
- workflow = ConductorWorkflow(name='greetings', version=1, executor=workflow_executor)
341
- # Assuming greet is defined (see Workers section above).
342
- workflow >> greet(task_ref_name='greet_ref', name=workflow.input('name'))
343
- # Registering is required if you want to start/execute by name+version; optional if you only execute inline.
344
- workflow.register(overwrite=True)
319
+ with TaskHandler(configuration=config, metrics_settings=metrics, scan_for_annotated_workers=True) as task_handler:
320
+ task_handler.start_processes()
321
+ task_handler.join_processes()
345
322
  ```
346
323
 
347
- **Execute workflows:**
348
-
349
- ```python
350
- # Synchronous (waits for completion)
351
- result = workflow_executor.execute(name='greetings', version=1, workflow_input={'name': 'Orkes'})
352
- print(result.output)
324
+ ```shell
325
+ # Prometheus-compatible endpoint
326
+ curl http://localhost:8000/metrics
327
+ ```
353
328
 
354
- # Asynchronous (returns workflow ID immediately)
355
- from conductor.client.http.models import StartWorkflowRequest
356
- request = StartWorkflowRequest(name='greetings', version=1, input={'name': 'Orkes'})
357
- workflow_id = workflow_executor.start_workflow(request)
329
+ See [examples/metrics_example.py](examples/metrics_example.py) and [METRICS.md](METRICS.md) for details on all tracked metrics.
358
330
 
359
- # Inline (sends the workflow definition with the request; no prior register required)
360
- run = workflow.execute(workflow_input={'name': 'Orkes'}, wait_for_seconds=10)
361
- print(run.output)
362
- ```
331
+ ### Managing Workflow Executions
363
332
 
364
- **Manage running workflows and send signals:**
333
+ Full lifecycle control — start, execute, pause, resume, terminate, retry, restart, rerun, signal, and search:
365
334
 
366
335
  ```python
336
+ from conductor.client.configuration.configuration import Configuration
337
+ from conductor.client.http.models import StartWorkflowRequest, RerunWorkflowRequest, TaskResult
367
338
  from conductor.client.orkes_clients import OrkesClients
368
339
 
369
- clients = OrkesClients(configuration=api_config)
340
+ config = Configuration()
341
+ clients = OrkesClients(configuration=config)
370
342
  workflow_client = clients.get_workflow_client()
343
+ task_client = clients.get_task_client()
344
+ executor = clients.get_workflow_executor()
371
345
 
346
+ # Start async (returns workflow ID immediately)
347
+ workflow_id = executor.start_workflow(StartWorkflowRequest(name='my_workflow', input={'key': 'value'}))
348
+
349
+ # Execute sync (blocks until workflow completes)
350
+ result = executor.execute(name='my_workflow', version=1, workflow_input={'key': 'value'})
351
+
352
+ # Lifecycle management
372
353
  workflow_client.pause_workflow(workflow_id)
373
354
  workflow_client.resume_workflow(workflow_id)
374
355
  workflow_client.terminate_workflow(workflow_id, reason='no longer needed')
375
- workflow_client.retry_workflow(workflow_id)
376
- workflow_client.restart_workflow(workflow_id)
356
+ workflow_client.retry_workflow(workflow_id) # retry from last failed task
357
+ workflow_client.restart_workflow(workflow_id) # restart from the beginning
358
+ workflow_client.rerun_workflow(workflow_id, # rerun from a specific task
359
+ RerunWorkflowRequest(re_run_from_task_id=task_id))
360
+
361
+ # Send a signal to a waiting workflow (complete a WAIT task externally)
362
+ task_client.update_task(TaskResult(
363
+ workflow_instance_id=workflow_id,
364
+ task_id=wait_task_id,
365
+ status='COMPLETED',
366
+ output_data={'approved': True}
367
+ ))
368
+
369
+ # Search workflows
370
+ results = workflow_client.search(query='status IN (RUNNING) AND correlationId = "order-123"')
377
371
  ```
378
372
 
379
- **Learn more:**
380
- - [Workflow Management](docs/WORKFLOW.md) — Start, pause, resume, terminate, retry, search
381
- - [Workflow Testing](docs/WORKFLOW_TESTING.md) — Unit testing with mock task outputs
382
- - [Metadata Management](docs/METADATA.md) — Task & workflow definitions
383
-
384
- ## Troubleshooting
385
-
386
- - Worker stops polling or crashes: `TaskHandler` monitors and restarts worker subprocesses by default. Consider exposing
387
- a `/healthcheck` endpoint using `task_handler.is_healthy()` + `task_handler.get_worker_process_status()`. If you
388
- enable metrics, alert on `worker_restart_total`.
389
- - `httpcore.RemoteProtocolError: <ConnectionTerminated ...>`: the SDK recreates the underlying HTTP client and retries
390
- once for idempotent requests. If your environment is still unstable with HTTP/2, set
391
- `CONDUCTOR_HTTP2_ENABLED=false` (forces HTTP/1.1) — see `docs/WORKER.md`.
392
- - FastAPI/Uvicorn: avoid running `uvicorn` with multiple web workers unless you explicitly want multiple independent
393
- `TaskHandler`s polling Conductor (see `examples/fastapi_worker_service.py`).
373
+ See [examples/workflow_ops.py](examples/workflow_ops.py) for a complete walkthrough of every operation.
374
+
394
375
  ---
376
+
395
377
  ## AI & LLM Workflows
396
378
 
397
379
  Conductor supports AI-native workflows including agentic tool calling, RAG pipelines, and multi-agent orchestration.
@@ -427,6 +409,23 @@ pip install "markitdown[pdf]"
427
409
  python examples/rag_workflow.py document.pdf "What are the key findings?"
428
410
  ```
429
411
 
412
+ ---
413
+
414
+ ## Why Conductor?
415
+
416
+ | | |
417
+ |---|---|
418
+ | **Language agnostic** | Workers in Python, Java, Go, JS, C# — all in one workflow |
419
+ | **Durable execution** | Survives crashes, retries automatically, never loses state |
420
+ | **Built-in HTTP/Wait/JS tasks** | No code needed for common operations |
421
+ | **Horizontal scaling** | Built at Netflix for millions of workflows |
422
+ | **Full visibility** | UI shows every execution, every task, every retry |
423
+ | **Sync + Async execution** | Start-and-forget OR wait-for-result |
424
+ | **Human-in-the-loop** | WAIT tasks pause until an external signal |
425
+ | **AI-native** | LLM chat, RAG pipelines, function calling, MCP tools built-in |
426
+
427
+ ---
428
+
430
429
  ## Examples
431
430
 
432
431
  See the [Examples Guide](examples/README.md) for the full catalog. Key examples:
@@ -434,17 +433,16 @@ See the [Examples Guide](examples/README.md) for the full catalog. Key examples:
434
433
  | Example | Description | Run |
435
434
  |---------|-------------|-----|
436
435
  | [workers_e2e.py](examples/workers_e2e.py) | End-to-end: sync + async workers, metrics | `python examples/workers_e2e.py` |
437
- | [fastapi_worker_service.py](examples/fastapi_worker_service.py) | FastAPI: expose a workflow as an API (+ workers) (deps: fastapi, uvicorn) | `uvicorn examples.fastapi_worker_service:app --port 8081 --workers 1` |
436
+ | [kitchensink.py](examples/kitchensink.py) | All task types (HTTP, JS, JQ, Switch) | `python examples/kitchensink.py` |
437
+ | [workflow_ops.py](examples/workflow_ops.py) | Pause, resume, terminate, retry, restart, rerun, signal | `python examples/workflow_ops.py` |
438
+ | [task_context_example.py](examples/task_context_example.py) | Long-running tasks with TaskInProgress | `python examples/task_context_example.py` |
439
+ | [metrics_example.py](examples/metrics_example.py) | Prometheus metrics collection | `python examples/metrics_example.py` |
440
+ | [fastapi_worker_service.py](examples/fastapi_worker_service.py) | FastAPI: expose a workflow as an API (+ workers) | `uvicorn examples.fastapi_worker_service:app --port 8081 --workers 1` |
438
441
  | [helloworld.py](examples/helloworld/helloworld.py) | Minimal hello world | `python examples/helloworld/helloworld.py` |
439
442
  | [dynamic_workflow.py](examples/dynamic_workflow.py) | Build workflows programmatically | `python examples/dynamic_workflow.py` |
440
- | [llm_chat.py](examples/agentic_workflows/llm_chat.py) | AI multi-turn chat | `python examples/agentic_workflows/llm_chat.py` |
441
- | [rag_workflow.py](examples/rag_workflow.py) | RAG pipeline (PDF → pgvector → answer) | `python examples/rag_workflow.py file.pdf "question"` |
442
- | [task_context_example.py](examples/task_context_example.py) | Long-running tasks with TaskInProgress | `python examples/task_context_example.py` |
443
- | [workflow_ops.py](examples/workflow_ops.py) | Pause, resume, terminate workflows | `python examples/workflow_ops.py` |
444
443
  | [test_workflows.py](examples/test_workflows.py) | Unit testing workflows | `python -m unittest examples.test_workflows` |
445
- | [kitchensink.py](examples/kitchensink.py) | All task types (HTTP, JS, JQ, Switch) | `python examples/kitchensink.py` |
446
444
 
447
- ## API Journey Examples
445
+ **API Journey Examples**
448
446
 
449
447
  End-to-end examples covering all APIs for each domain:
450
448
 
@@ -474,13 +472,6 @@ End-to-end examples covering all APIs for each domain:
474
472
  | [Metrics](METRICS.md) | Prometheus metrics collection |
475
473
  | [Examples](examples/README.md) | Complete examples catalog |
476
474
 
477
- ## Support
478
-
479
- - [Open an issue (SDK)](https://github.com/conductor-sdk/conductor-python/issues) for SDK bugs, questions, and feature requests
480
- - [Open an issue (Conductor server)](https://github.com/conductor-oss/conductor/issues) for Conductor OSS server issues
481
- - [Join the Conductor Slack](https://join.slack.com/t/orkes-conductor/shared_invite/zt-2vdbx239s-Eacdyqya9giNLHfrCavfaA) for community discussion and help
482
- - [Orkes Community Forum](https://community.orkes.io/) for Q&A
483
-
484
475
  ## Frequently Asked Questions
485
476
 
486
477
  **Is this the same as Netflix Conductor?**
@@ -505,7 +496,7 @@ No. While Conductor excels at asynchronous orchestration, it also supports synch
505
496
 
506
497
  **Do I need to use a Conductor-specific framework?**
507
498
 
508
- No. Conductor is language and framework agnostic. Use your preferred language and framework -- the [SDKs](https://github.com/conductor-oss/conductor#conductor-sdks) provide native integration for Python, Java, JavaScript, Go, C#, and more.
499
+ No. Conductor is language and framework agnostic. Use your preferred language and framework the [SDKs](https://github.com/conductor-oss/conductor#conductor-sdks) provide native integration for Python, Java, JavaScript, Go, C#, and more.
509
500
 
510
501
  **Can I mix workers written in different languages?**
511
502
 
@@ -517,16 +508,23 @@ Python 3.9 and above.
517
508
 
518
509
  **Should I use `def` or `async def` for my workers?**
519
510
 
520
- Use `async def` for I/O-bound tasks (API calls, database queries) -- the SDK uses `AsyncTaskRunner` with a single event loop for high concurrency with low overhead. Use regular `def` for CPU-bound or blocking work -- the SDK uses `TaskRunner` with a thread pool. The SDK selects the right runner automatically based on your function signature.
511
+ Use `async def` for I/O-bound tasks (API calls, database queries) the SDK uses `AsyncTaskRunner` with a single event loop for high concurrency with low overhead. Use regular `def` for CPU-bound or blocking work the SDK uses `TaskRunner` with a thread pool. The SDK selects the right runner automatically based on your function signature.
521
512
 
522
513
  **How do I run workers in production?**
523
514
 
524
- Workers are standard Python processes. Deploy them as you would any Python application -- in containers, VMs, or bare metal. Workers poll the Conductor server for tasks, so no inbound ports need to be opened. See [Worker Design](docs/design/WORKER_DESIGN.md) for architecture details.
515
+ Workers are standard Python processes. Deploy them as you would any Python application in containers, VMs, or bare metal. Workers poll the Conductor server for tasks, so no inbound ports need to be opened. See [Worker Design](docs/design/WORKER_DESIGN.md) for architecture details.
525
516
 
526
517
  **How do I test workflows without running a full Conductor server?**
527
518
 
528
519
  The SDK provides a test framework that uses Conductor's `POST /api/workflow/test` endpoint to evaluate workflows with mock task outputs. See [Workflow Testing](docs/WORKFLOW_TESTING.md) for details.
529
520
 
521
+ ## Support
522
+
523
+ - [Open an issue (SDK)](https://github.com/conductor-sdk/conductor-python/issues) for SDK bugs, questions, and feature requests
524
+ - [Open an issue (Conductor server)](https://github.com/conductor-oss/conductor/issues) for Conductor OSS server issues
525
+ - [Join the Conductor Slack](https://join.slack.com/t/orkes-conductor/shared_invite/zt-2vdbx239s-Eacdyqya9giNLHfrCavfaA) for community discussion and help
526
+ - [Orkes Community Forum](https://community.orkes.io/) for Q&A
527
+
530
528
  ## License
531
529
 
532
530
  Apache 2.0