conductor-python 1.3.3__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 (244) hide show
  1. conductor_python-1.3.5/PKG-INFO +531 -0
  2. conductor_python-1.3.5/README.md +497 -0
  3. {conductor_python-1.3.3 → 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.3 → conductor_python-1.3.5}/src/conductor/client/automator/async_task_runner.py +47 -40
  6. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/automator/json_schema_generator.py +7 -5
  7. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/automator/task_handler.py +240 -19
  8. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/automator/task_runner.py +57 -126
  9. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/async_task_resource_api.py +83 -0
  10. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/task_resource_api.py +83 -0
  11. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/async_rest.py +88 -60
  12. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/rest.py +95 -60
  13. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/telemetry/metrics_collector.py +107 -76
  14. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/telemetry/model/metric_documentation.py +1 -0
  15. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/telemetry/model/metric_name.py +1 -0
  16. conductor_python-1.3.3/PKG-INFO +0 -411
  17. conductor_python-1.3.3/README.md +0 -377
  18. conductor_python-1.3.3/src/conductor/__init__.py +0 -1
  19. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/__init__.py +0 -0
  20. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/ai/__init__.py +0 -0
  21. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/ai/configuration.py +0 -0
  22. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/ai/integrations.py +0 -0
  23. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/ai/orchestrator.py +0 -0
  24. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/authorization_client.py +0 -0
  25. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/automator/__init__.py +0 -0
  26. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/automator/utils.py +0 -0
  27. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/configuration/__init__.py +0 -0
  28. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/configuration/configuration.py +0 -0
  29. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/configuration/settings/__init__.py +0 -0
  30. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/configuration/settings/authentication_settings.py +0 -0
  31. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/configuration/settings/metrics_settings.py +0 -0
  32. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/context/__init__.py +0 -0
  33. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/context/task_context.py +0 -0
  34. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/__init__.py +0 -0
  35. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/conductor_event.py +0 -0
  36. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/event_client.py +0 -0
  37. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/event_dispatcher.py +0 -0
  38. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/listener_register.py +0 -0
  39. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/listeners.py +0 -0
  40. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/queue/__init__.py +0 -0
  41. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/queue/kafka_queue_configuration.py +0 -0
  42. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/queue/queue_configuration.py +0 -0
  43. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/queue/queue_worker_configuration.py +0 -0
  44. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/sync_event_dispatcher.py +0 -0
  45. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/sync_listener_register.py +0 -0
  46. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/task_events.py +0 -0
  47. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/task_runner_events.py +0 -0
  48. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/event/workflow_events.py +0 -0
  49. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/exceptions/__init__.py +0 -0
  50. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/exceptions/api_error.py +0 -0
  51. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/exceptions/api_exception_handler.py +0 -0
  52. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/helpers/__init__.py +0 -0
  53. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/helpers/helper.py +0 -0
  54. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/__init__.py +0 -0
  55. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/__init__.py +0 -0
  56. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/application_resource_api.py +0 -0
  57. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/authorization_resource_api.py +0 -0
  58. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/event_resource_api.py +0 -0
  59. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/gateway_auth_resource_api.py +0 -0
  60. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/group_resource_api.py +0 -0
  61. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/integration_resource_api.py +0 -0
  62. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/metadata_resource_api.py +0 -0
  63. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/prompt_resource_api.py +0 -0
  64. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/role_resource_api.py +0 -0
  65. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/scheduler_resource_api.py +0 -0
  66. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/schema_resource_api.py +0 -0
  67. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/secret_resource_api.py +0 -0
  68. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/service_registry_resource_api.py +0 -0
  69. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/token_resource_api.py +0 -0
  70. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/user_resource_api.py +0 -0
  71. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/workflow_bulk_resource_api.py +0 -0
  72. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api/workflow_resource_api.py +0 -0
  73. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/api_client.py +0 -0
  74. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/async_api_client.py +0 -0
  75. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/__init__.py +0 -0
  76. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/action.py +0 -0
  77. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/auditable.py +0 -0
  78. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/authentication_config.py +0 -0
  79. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/authorization_request.py +0 -0
  80. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/bulk_response.py +0 -0
  81. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/circuit_breaker_transition_response.py +0 -0
  82. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/conductor_application.py +0 -0
  83. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/conductor_user.py +0 -0
  84. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/correlation_ids_search_request.py +0 -0
  85. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/create_or_update_application_request.py +0 -0
  86. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/create_or_update_role_request.py +0 -0
  87. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/event_handler.py +0 -0
  88. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/external_storage_location.py +0 -0
  89. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/generate_token_request.py +0 -0
  90. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/group.py +0 -0
  91. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/health.py +0 -0
  92. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/health_check_status.py +0 -0
  93. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/integration.py +0 -0
  94. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/integration_api.py +0 -0
  95. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/integration_api_update.py +0 -0
  96. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/integration_def.py +0 -0
  97. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/integration_update.py +0 -0
  98. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/permission.py +0 -0
  99. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/poll_data.py +0 -0
  100. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/prompt_template.py +0 -0
  101. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/prompt_test_request.py +0 -0
  102. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/proto_registry_entry.py +0 -0
  103. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/rate_limit.py +0 -0
  104. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/request_param.py +0 -0
  105. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/rerun_workflow_request.py +0 -0
  106. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/response.py +0 -0
  107. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/role.py +0 -0
  108. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/save_schedule_request.py +0 -0
  109. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/schema_def.py +0 -0
  110. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/scrollable_search_result_workflow_summary.py +0 -0
  111. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_task.py +0 -0
  112. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_task_summary.py +0 -0
  113. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_workflow.py +0 -0
  114. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_workflow_schedule_execution_model.py +0 -0
  115. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/search_result_workflow_summary.py +0 -0
  116. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/service_method.py +0 -0
  117. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/service_registry.py +0 -0
  118. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/signal_response.py +0 -0
  119. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/skip_task_request.py +0 -0
  120. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/start_workflow.py +0 -0
  121. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/start_workflow_request.py +0 -0
  122. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/state_change_event.py +0 -0
  123. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/sub_workflow_params.py +0 -0
  124. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/subject_ref.py +0 -0
  125. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/tag_object.py +0 -0
  126. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/tag_string.py +0 -0
  127. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/target_ref.py +0 -0
  128. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/task.py +0 -0
  129. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/task_def.py +0 -0
  130. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/task_details.py +0 -0
  131. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/task_exec_log.py +0 -0
  132. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/task_result.py +0 -0
  133. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/task_result_status.py +0 -0
  134. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/task_summary.py +0 -0
  135. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/terminate_workflow.py +0 -0
  136. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/token.py +0 -0
  137. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/update_workflow_variables.py +0 -0
  138. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/upsert_group_request.py +0 -0
  139. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/upsert_user_request.py +0 -0
  140. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow.py +0 -0
  141. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_def.py +0 -0
  142. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_run.py +0 -0
  143. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_schedule.py +0 -0
  144. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_schedule_execution_model.py +0 -0
  145. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_state_update.py +0 -0
  146. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_status.py +0 -0
  147. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_summary.py +0 -0
  148. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_tag.py +0 -0
  149. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_task.py +0 -0
  150. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/models/workflow_test_request.py +0 -0
  151. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/http/thread.py +0 -0
  152. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/integration_client.py +0 -0
  153. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/metadata_client.py +0 -0
  154. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/__init__.py +0 -0
  155. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/api/__init__.py +0 -0
  156. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/api/tags_api.py +0 -0
  157. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/models/__init__.py +0 -0
  158. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/models/access_key.py +0 -0
  159. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/models/access_key_status.py +0 -0
  160. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/models/access_type.py +0 -0
  161. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/models/created_access_key.py +0 -0
  162. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/models/granted_permission.py +0 -0
  163. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/models/metadata_tag.py +0 -0
  164. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/models/ratelimit_tag.py +0 -0
  165. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_authorization_client.py +0 -0
  166. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_base_client.py +0 -0
  167. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_integration_client.py +0 -0
  168. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_metadata_client.py +0 -0
  169. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_prompt_client.py +0 -0
  170. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_scheduler_client.py +0 -0
  171. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_schema_client.py +0 -0
  172. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_secret_client.py +0 -0
  173. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_service_registry_client.py +0 -0
  174. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_task_client.py +0 -0
  175. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes/orkes_workflow_client.py +0 -0
  176. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/orkes_clients.py +0 -0
  177. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/prompt_client.py +0 -0
  178. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/scheduler_client.py +0 -0
  179. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/schema_client.py +0 -0
  180. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/secret_client.py +0 -0
  181. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/service_registry_client.py +0 -0
  182. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/task_client.py +0 -0
  183. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/telemetry/__init__.py +0 -0
  184. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/telemetry/model/__init__.py +0 -0
  185. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/telemetry/model/metric_label.py +0 -0
  186. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/worker/__init__.py +0 -0
  187. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/worker/exception.py +0 -0
  188. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/worker/worker.py +0 -0
  189. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/worker/worker_config.py +0 -0
  190. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/worker/worker_interface.py +0 -0
  191. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/worker/worker_loader.py +0 -0
  192. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/worker/worker_task.py +0 -0
  193. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/__init__.py +0 -0
  194. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/conductor_workflow.py +0 -0
  195. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/executor/__init__.py +0 -0
  196. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/executor/workflow_executor.py +0 -0
  197. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/__init__.py +0 -0
  198. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/do_while_task.py +0 -0
  199. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/dynamic_fork_task.py +0 -0
  200. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/dynamic_task.py +0 -0
  201. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/event_task.py +0 -0
  202. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/fork_task.py +0 -0
  203. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/get_document.py +0 -0
  204. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/http_poll_task.py +0 -0
  205. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/http_task.py +0 -0
  206. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/human_task.py +0 -0
  207. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/inline.py +0 -0
  208. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/javascript_task.py +0 -0
  209. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/join_task.py +0 -0
  210. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/json_jq_task.py +0 -0
  211. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/kafka_publish.py +0 -0
  212. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/kafka_publish_input.py +0 -0
  213. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/__init__.py +0 -0
  214. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/call_mcp_tool.py +0 -0
  215. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/chat_message.py +0 -0
  216. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/generate_audio.py +0 -0
  217. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/generate_image.py +0 -0
  218. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/list_mcp_tools.py +0 -0
  219. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_chat_complete.py +0 -0
  220. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_generate_embeddings.py +0 -0
  221. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_index_documents.py +0 -0
  222. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_index_text.py +0 -0
  223. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_query_embeddings.py +0 -0
  224. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_search_embeddings.py +0 -0
  225. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_search_index.py +0 -0
  226. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_store_embeddings.py +0 -0
  227. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/llm_text_complete.py +0 -0
  228. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/tool_call.py +0 -0
  229. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/tool_spec.py +0 -0
  230. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/utils/__init__.py +0 -0
  231. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/utils/embedding_model.py +0 -0
  232. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/llm_tasks/utils/prompt.py +0 -0
  233. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/set_variable_task.py +0 -0
  234. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/simple_task.py +0 -0
  235. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/start_workflow_task.py +0 -0
  236. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/sub_workflow_task.py +0 -0
  237. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/switch_task.py +0 -0
  238. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/task.py +0 -0
  239. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/task_type.py +0 -0
  240. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/terminate_task.py +0 -0
  241. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/timeout_policy.py +0 -0
  242. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/wait_for_webhook_task.py +0 -0
  243. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow/task/wait_task.py +0 -0
  244. {conductor_python-1.3.3 → conductor_python-1.3.5}/src/conductor/client/workflow_client.py +0 -0
@@ -0,0 +1,531 @@
1
+ Metadata-Version: 2.4
2
+ Name: conductor-python
3
+ Version: 1.3.5
4
+ Summary: Python SDK for working with https://github.com/conductor-oss/conductor
5
+ License: Apache-2.0
6
+ Author: Orkes
7
+ Author-email: developers@orkes.io
8
+ Requires-Python: >=3.9,<3.13
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Intended Audience :: System Administrators
12
+ Classifier: License :: OSI Approved :: Apache Software License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.9
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Dist: astor (>=0.8.1)
21
+ Requires-Dist: certifi (>=14.5.14)
22
+ Requires-Dist: dacite (>=1.8.1)
23
+ Requires-Dist: deprecated (>=1.2.14)
24
+ Requires-Dist: h2 (>=4.1.0)
25
+ Requires-Dist: httpx[http2] (>=0.26.0)
26
+ Requires-Dist: prometheus-client (>=0.13.1)
27
+ Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
28
+ Requires-Dist: requests (>=2.31.0)
29
+ Requires-Dist: shortuuid (>=1.0.11)
30
+ Requires-Dist: six (>=1.10)
31
+ Requires-Dist: typing-extensions (>=4.2.0)
32
+ Description-Content-Type: text/markdown
33
+
34
+ # Python SDK for Conductor
35
+
36
+ [![CI](https://github.com/conductor-sdk/conductor-python/actions/workflows/pull_request.yml/badge.svg)](https://github.com/conductor-sdk/conductor-python/actions/workflows/pull_request.yml)
37
+ [![PyPI](https://img.shields.io/pypi/v/conductor-python.svg)](https://pypi.org/project/conductor-python/)
38
+ [![Python Versions](https://img.shields.io/pypi/pyversions/conductor-python.svg)](https://pypi.org/project/conductor-python/)
39
+ [![License](https://img.shields.io/pypi/l/conductor-python.svg)](LICENSE)
40
+
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
+
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
+
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
+
47
+ <!-- TOC -->
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)
64
+ <!-- TOC -->
65
+
66
+ ## Start Conductor Server
67
+
68
+ If you don't already have a Conductor server running, pick one:
69
+
70
+ **Docker Compose (recommended, includes UI):**
71
+
72
+ ```shell
73
+ docker run -p 8080:8080 conductoross/conductor:latest
74
+ ```
75
+ The UI will be available at `http://localhost:8080` and the API at `http://localhost:8080/api`
76
+
77
+ **MacOS / Linux (one-liner):** (If you don't want to use docker, you can install and run the binary directly)
78
+ ```shell
79
+ curl -sSL https://raw.githubusercontent.com/conductor-oss/conductor/main/conductor_server.sh | sh
80
+ ```
81
+
82
+ **Conductor CLI**
83
+ ```shell
84
+ # Installs conductor cli
85
+ npm install -g @conductor-oss/conductor-cli
86
+
87
+ # Start the open source conductor server
88
+ conductor server start
89
+ # see conductor server --help for all the available commands
90
+ ```
91
+
92
+ ## Install the SDK
93
+
94
+ ```shell
95
+ pip install conductor-python
96
+ ```
97
+
98
+ ## 60-Second Quickstart
99
+
100
+ **Step 1: Create a workflow**
101
+
102
+ Workflows are definitions that reference task types (e.g. a SIMPLE task called `greet`). We'll build a workflow called
103
+ `greetings` that runs one task and returns its output.
104
+
105
+ Assuming you have a `WorkflowExecutor` (`executor`) and a worker task (`greet`):
106
+
107
+ ```python
108
+ from conductor.client.workflow.conductor_workflow import ConductorWorkflow
109
+
110
+ workflow = ConductorWorkflow(name='greetings', version=1, executor=executor)
111
+ greet_task = greet(task_ref_name='greet_ref', name=workflow.input('name'))
112
+ workflow >> greet_task
113
+ workflow.output_parameters({'result': greet_task.output('result')})
114
+ workflow.register(overwrite=True)
115
+ ```
116
+
117
+ **Step 2: Write a worker**
118
+
119
+ Workers are just Python functions decorated with `@worker_task` that poll Conductor for tasks and execute them.
120
+
121
+ ```python
122
+ from conductor.client.worker.worker_task import worker_task
123
+
124
+ # register_task_def=True is convenient for local dev quickstarts; in production, manage task definitions separately.
125
+ @worker_task(task_definition_name='greet', register_task_def=True)
126
+ def greet(name: str) -> str:
127
+ return f'Hello {name}'
128
+ ```
129
+
130
+ **Step 3: Run your first workflow app**
131
+
132
+ Create a `quickstart.py` with the following:
133
+
134
+ ```python
135
+ from conductor.client.automator.task_handler import TaskHandler
136
+ from conductor.client.configuration.configuration import Configuration
137
+ from conductor.client.orkes_clients import OrkesClients
138
+ from conductor.client.workflow.conductor_workflow import ConductorWorkflow
139
+ from conductor.client.worker.worker_task import worker_task
140
+
141
+
142
+ # A worker is any Python function.
143
+ @worker_task(task_definition_name='greet', register_task_def=True)
144
+ def greet(name: str) -> str:
145
+ return f'Hello {name}'
146
+
147
+
148
+ def main():
149
+ # Configure the SDK (reads CONDUCTOR_SERVER_URL / CONDUCTOR_AUTH_* from env).
150
+ config = Configuration()
151
+
152
+ clients = OrkesClients(configuration=config)
153
+ executor = clients.get_workflow_executor()
154
+
155
+ # Build a workflow with the >> operator.
156
+ workflow = ConductorWorkflow(name='greetings', version=1, executor=executor)
157
+ greet_task = greet(task_ref_name='greet_ref', name=workflow.input('name'))
158
+ workflow >> greet_task
159
+ workflow.output_parameters({'result': greet_task.output('result')})
160
+ workflow.register(overwrite=True)
161
+
162
+ # Start polling for tasks (one worker subprocess per worker function).
163
+ with TaskHandler(configuration=config, scan_for_annotated_workers=True) as task_handler:
164
+ task_handler.start_processes()
165
+
166
+ # Run the workflow and get the result.
167
+ run = executor.execute(name='greetings', version=1, workflow_input={'name': 'Conductor'})
168
+ print(f'result: {run.output["result"]}')
169
+ print(f'execution: {config.ui_host}/execution/{run.workflow_id}')
170
+
171
+
172
+ if __name__ == '__main__':
173
+ main()
174
+ ```
175
+
176
+ Run it:
177
+
178
+ ```shell
179
+ python quickstart.py
180
+ ```
181
+
182
+ > ### Using Orkes Conductor / Remote Server?
183
+ > Export your authentication credentials as well:
184
+ >
185
+ > ```shell
186
+ > export CONDUCTOR_SERVER_URL="https://your-cluster.orkesconductor.io/api"
187
+ >
188
+ > # If using Orkes Conductor that requires auth key/secret
189
+ > export CONDUCTOR_AUTH_KEY="your-key"
190
+ > export CONDUCTOR_AUTH_SECRET="your-secret"
191
+ >
192
+ > # Optional — set to false to force HTTP/1.1 if your network environment has unstable long-lived HTTP/2 connections (default: true)
193
+ > # export CONDUCTOR_HTTP2_ENABLED=false
194
+ > ```
195
+ > See [Configuration](#configuration) for details.
196
+
197
+ That's it — you just defined a worker, built a workflow, and executed it. Open the Conductor UI (default:
198
+ [http://localhost:8127](http://localhost:8127)) to see the execution.
199
+
200
+ ---
201
+
202
+ ## Feature Showcase
203
+
204
+ ### Workers: Sync and Async
205
+
206
+ The SDK automatically selects the right runner based on your function signature — `TaskRunner` (thread pool) for sync functions, `AsyncTaskRunner` (event loop) for async.
207
+
208
+ ```python
209
+ from conductor.client.worker.worker_task import worker_task
210
+
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}
218
+
219
+
220
+ # Async worker — for I/O-bound work (uses AsyncTaskRunner, no thread overhead)
221
+ @worker_task(task_definition_name='fetch_data', thread_count=50)
222
+ async def fetch_data(url: str) -> dict:
223
+ import httpx
224
+ async with httpx.AsyncClient() as client:
225
+ resp = await client.get(url)
226
+ return resp.json()
227
+ ```
228
+
229
+ Start workers with `TaskHandler` — it auto-discovers `@worker_task` functions and spawns one subprocess per worker:
230
+
231
+ ```python
232
+ from conductor.client.automator.task_handler import TaskHandler
233
+ from conductor.client.configuration.configuration import Configuration
234
+
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)
239
+ ```
240
+
241
+ See [examples/worker_example.py](examples/worker_example.py) and [examples/workers_e2e.py](examples/workers_e2e.py) for complete examples.
242
+
243
+ ### Workflows with HTTP Calls and Waits
244
+
245
+ Chain custom workers with built-in system tasks — HTTP calls, waits, JavaScript, JQ transforms — all in one workflow:
246
+
247
+ ```python
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
251
+
252
+ workflow = ConductorWorkflow(name='order_pipeline', version=1, executor=executor)
253
+
254
+ # Custom worker task
255
+ validate = validate_order(task_ref_name='validate', order_id=workflow.input('order_id'))
256
+
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
+ })
264
+
265
+ # Built-in Wait task — pause the workflow for 10 seconds
266
+ cool_down = WaitTask(task_ref_name='cool_down', wait_for_seconds=10)
267
+
268
+ # Another custom worker task
269
+ notify = send_notification(task_ref_name='notify', message='Order complete')
270
+
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)
277
+ ```
278
+
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.
280
+
281
+ ### Long-Running Tasks with TaskContext
282
+
283
+ For tasks that take minutes or hours (batch processing, ML training, external approvals), use `TaskContext` to report progress and poll incrementally:
284
+
285
+ ```python
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
289
+
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()}")
294
+
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}
301
+ ```
302
+
303
+ `TaskContext` also provides access to task metadata, retry counts, workflow IDs, and the ability to add logs visible in the Conductor UI.
304
+
305
+ See [examples/task_context_example.py](examples/task_context_example.py) for all patterns (polling, retry-aware logic, async context, input access).
306
+
307
+ ### Monitoring with Metrics
308
+
309
+ Enable Prometheus metrics with a single setting — the SDK exposes poll counts, execution times, error rates, and HTTP latency:
310
+
311
+ ```python
312
+ from conductor.client.automator.task_handler import TaskHandler
313
+ from conductor.client.configuration.configuration import Configuration
314
+ from conductor.client.configuration.settings.metrics_settings import MetricsSettings
315
+
316
+ config = Configuration()
317
+ metrics = MetricsSettings(directory='/tmp/conductor-metrics', http_port=8000)
318
+
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()
322
+ ```
323
+
324
+ ```shell
325
+ # Prometheus-compatible endpoint
326
+ curl http://localhost:8000/metrics
327
+ ```
328
+
329
+ See [examples/metrics_example.py](examples/metrics_example.py) and [METRICS.md](METRICS.md) for details on all tracked metrics.
330
+
331
+ ### Managing Workflow Executions
332
+
333
+ Full lifecycle control — start, execute, pause, resume, terminate, retry, restart, rerun, signal, and search:
334
+
335
+ ```python
336
+ from conductor.client.configuration.configuration import Configuration
337
+ from conductor.client.http.models import StartWorkflowRequest, RerunWorkflowRequest, TaskResult
338
+ from conductor.client.orkes_clients import OrkesClients
339
+
340
+ config = Configuration()
341
+ clients = OrkesClients(configuration=config)
342
+ workflow_client = clients.get_workflow_client()
343
+ task_client = clients.get_task_client()
344
+ executor = clients.get_workflow_executor()
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
353
+ workflow_client.pause_workflow(workflow_id)
354
+ workflow_client.resume_workflow(workflow_id)
355
+ workflow_client.terminate_workflow(workflow_id, reason='no longer needed')
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"')
371
+ ```
372
+
373
+ See [examples/workflow_ops.py](examples/workflow_ops.py) for a complete walkthrough of every operation.
374
+
375
+ ---
376
+
377
+ ## AI & LLM Workflows
378
+
379
+ Conductor supports AI-native workflows including agentic tool calling, RAG pipelines, and multi-agent orchestration.
380
+
381
+ **Agentic Workflows**
382
+
383
+ Build AI agents where LLMs dynamically select and call Python workers as tools. See [examples/agentic_workflows/](examples/agentic_workflows/) for all examples.
384
+
385
+ | Example | Description |
386
+ |---------|-------------|
387
+ | [llm_chat.py](examples/agentic_workflows/llm_chat.py) | Automated multi-turn science Q&A between two LLMs |
388
+ | [llm_chat_human_in_loop.py](examples/agentic_workflows/llm_chat_human_in_loop.py) | Interactive chat with WAIT task pauses for user input |
389
+ | [multiagent_chat.py](examples/agentic_workflows/multiagent_chat.py) | Multi-agent debate with moderator routing between panelists |
390
+ | [function_calling_example.py](examples/agentic_workflows/function_calling_example.py) | LLM picks which Python function to call based on user queries |
391
+ | [mcp_weather_agent.py](examples/agentic_workflows/mcp_weather_agent.py) | AI agent using MCP tools for weather queries |
392
+
393
+ **LLM and RAG Workflows**
394
+
395
+ | Example | Description |
396
+ |---------|-------------|
397
+ | [rag_workflow.py](examples/rag_workflow.py) | End-to-end RAG: document conversion (PDF/Word/Excel), pgvector indexing, semantic search, answer generation |
398
+ | [vector_db_helloworld.py](examples/orkes/vector_db_helloworld.py) | Vector database operations: text indexing, embedding generation, and semantic search with Pinecone |
399
+
400
+ ```shell
401
+ # Automated multi-turn chat
402
+ python examples/agentic_workflows/llm_chat.py
403
+
404
+ # Multi-agent debate
405
+ python examples/agentic_workflows/multiagent_chat.py --topic "renewable energy"
406
+
407
+ # RAG pipeline
408
+ pip install "markitdown[pdf]"
409
+ python examples/rag_workflow.py document.pdf "What are the key findings?"
410
+ ```
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
+
429
+ ## Examples
430
+
431
+ See the [Examples Guide](examples/README.md) for the full catalog. Key examples:
432
+
433
+ | Example | Description | Run |
434
+ |---------|-------------|-----|
435
+ | [workers_e2e.py](examples/workers_e2e.py) | End-to-end: sync + async workers, metrics | `python examples/workers_e2e.py` |
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` |
441
+ | [helloworld.py](examples/helloworld/helloworld.py) | Minimal hello world | `python examples/helloworld/helloworld.py` |
442
+ | [dynamic_workflow.py](examples/dynamic_workflow.py) | Build workflows programmatically | `python examples/dynamic_workflow.py` |
443
+ | [test_workflows.py](examples/test_workflows.py) | Unit testing workflows | `python -m unittest examples.test_workflows` |
444
+
445
+ **API Journey Examples**
446
+
447
+ End-to-end examples covering all APIs for each domain:
448
+
449
+ | Example | APIs | Run |
450
+ |---------|------|-----|
451
+ | [authorization_journey.py](examples/authorization_journey.py) | Authorization APIs | `python examples/authorization_journey.py` |
452
+ | [metadata_journey.py](examples/metadata_journey.py) | Metadata APIs | `python examples/metadata_journey.py` |
453
+ | [schedule_journey.py](examples/schedule_journey.py) | Schedule APIs | `python examples/schedule_journey.py` |
454
+ | [prompt_journey.py](examples/prompt_journey.py) | Prompt APIs | `python examples/prompt_journey.py` |
455
+
456
+ ## Documentation
457
+
458
+ | Document | Description |
459
+ |----------|-------------|
460
+ | [Worker Design](docs/design/WORKER_DESIGN.md) | Architecture: AsyncTaskRunner vs TaskRunner, discovery, lifecycle |
461
+ | [Worker Guide](docs/WORKER.md) | All worker patterns (function, class, annotation, async) |
462
+ | [Worker Configuration](WORKER_CONFIGURATION.md) | Hierarchical environment variable configuration |
463
+ | [Workflow Management](docs/WORKFLOW.md) | Start, pause, resume, terminate, retry, search |
464
+ | [Workflow Testing](docs/WORKFLOW_TESTING.md) | Unit testing with mock outputs |
465
+ | [Task Management](docs/TASK_MANAGEMENT.md) | Task operations |
466
+ | [Metadata](docs/METADATA.md) | Task & workflow definitions |
467
+ | [Authorization](docs/AUTHORIZATION.md) | Users, groups, applications, permissions |
468
+ | [Schedules](docs/SCHEDULE.md) | Workflow scheduling |
469
+ | [Secrets](docs/SECRET_MANAGEMENT.md) | Secret storage |
470
+ | [Prompts](docs/PROMPT.md) | AI/LLM prompt templates |
471
+ | [Integrations](docs/INTEGRATION.md) | AI/LLM provider integrations |
472
+ | [Metrics](METRICS.md) | Prometheus metrics collection |
473
+ | [Examples](examples/README.md) | Complete examples catalog |
474
+
475
+ ## Frequently Asked Questions
476
+
477
+ **Is this the same as Netflix Conductor?**
478
+
479
+ Yes. Conductor OSS is the continuation of the original [Netflix Conductor](https://github.com/Netflix/conductor) repository after Netflix contributed the project to the open-source foundation.
480
+
481
+ **Is this project actively maintained?**
482
+
483
+ Yes. [Orkes](https://orkes.io) is the primary maintainer and offers an enterprise SaaS platform for Conductor across all major cloud providers.
484
+
485
+ **Can Conductor scale to handle my workload?**
486
+
487
+ Conductor was built at Netflix to handle massive scale and has been battle-tested in production environments processing millions of workflows. It scales horizontally to meet virtually any demand.
488
+
489
+ **Does Conductor support durable code execution?**
490
+
491
+ Yes. Conductor ensures workflows complete reliably even in the face of infrastructure failures, process crashes, or network issues.
492
+
493
+ **Are workflows always asynchronous?**
494
+
495
+ No. While Conductor excels at asynchronous orchestration, it also supports synchronous workflow execution when immediate results are required.
496
+
497
+ **Do I need to use a Conductor-specific framework?**
498
+
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.
500
+
501
+ **Can I mix workers written in different languages?**
502
+
503
+ Yes. A single workflow can have workers written in Python, Java, Go, or any other supported language. Workers communicate through the Conductor server, not directly with each other.
504
+
505
+ **What Python versions are supported?**
506
+
507
+ Python 3.9 and above.
508
+
509
+ **Should I use `def` or `async def` for my workers?**
510
+
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.
512
+
513
+ **How do I run workers in production?**
514
+
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.
516
+
517
+ **How do I test workflows without running a full Conductor server?**
518
+
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.
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
+
528
+ ## License
529
+
530
+ Apache 2.0
531
+