orchestrator-core 4.5.3__tar.gz → 4.6.0__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 (385) hide show
  1. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/PKG-INFO +16 -11
  2. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/README.md +12 -7
  3. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/__init__.py +2 -2
  4. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/agentic_app.py +3 -23
  5. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/api.py +5 -0
  6. orchestrator_core-4.6.0/orchestrator/api/api_v1/endpoints/agent.py +49 -0
  7. orchestrator_core-4.6.0/orchestrator/api/api_v1/endpoints/search.py +215 -0
  8. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/app.py +1 -1
  9. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/database.py +3 -0
  10. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generate.py +11 -4
  11. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/migration.py +7 -3
  12. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/main.py +1 -1
  13. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/scheduler.py +15 -22
  14. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/search/resize_embedding.py +28 -22
  15. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/search/speedtest.py +4 -6
  16. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/__init__.py +6 -0
  17. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/models.py +75 -0
  18. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/llm_settings.py +18 -1
  19. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/helpers.py +47 -39
  20. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schedules/scheduler.py +32 -15
  21. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schedules/validate_products.py +1 -1
  22. orchestrator_core-4.6.0/orchestrator/schemas/search.py +53 -0
  23. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/agent/__init__.py +2 -2
  24. orchestrator_core-4.6.0/orchestrator/search/agent/agent.py +58 -0
  25. orchestrator_core-4.6.0/orchestrator/search/agent/json_patch.py +51 -0
  26. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/agent/prompts.py +35 -9
  27. orchestrator_core-4.6.0/orchestrator/search/agent/state.py +47 -0
  28. orchestrator_core-4.6.0/orchestrator/search/agent/tools.py +397 -0
  29. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/core/embedding.py +2 -2
  30. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/core/exceptions.py +6 -0
  31. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/core/types.py +1 -0
  32. orchestrator_core-4.6.0/orchestrator/search/export.py +199 -0
  33. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/indexing/indexer.py +13 -4
  34. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/indexing/registry.py +14 -1
  35. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/llm_migration.py +55 -0
  36. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/__init__.py +3 -2
  37. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/builder.py +5 -1
  38. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/engine.py +66 -23
  39. orchestrator_core-4.6.0/orchestrator/search/retrieval/pagination.py +86 -0
  40. orchestrator_core-4.6.0/orchestrator/search/retrieval/query_state.py +61 -0
  41. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/retrievers/base.py +26 -40
  42. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/retrievers/fuzzy.py +10 -9
  43. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/retrievers/hybrid.py +11 -8
  44. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/retrievers/semantic.py +9 -8
  45. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/retrievers/structured.py +6 -6
  46. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/schemas/parameters.py +17 -13
  47. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/schemas/results.py +4 -1
  48. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/settings.py +1 -0
  49. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/auth.py +3 -2
  50. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflow.py +23 -6
  51. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/pyproject.toml +5 -3
  52. orchestrator_core-4.5.3/orchestrator/api/api_v1/endpoints/search.py +0 -296
  53. orchestrator_core-4.5.3/orchestrator/schemas/search.py +0 -130
  54. orchestrator_core-4.5.3/orchestrator/search/agent/agent.py +0 -62
  55. orchestrator_core-4.5.3/orchestrator/search/agent/state.py +0 -21
  56. orchestrator_core-4.5.3/orchestrator/search/agent/tools.py +0 -258
  57. orchestrator_core-4.5.3/orchestrator/search/retrieval/pagination.py +0 -96
  58. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/LICENSE +0 -0
  59. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/__init__.py +0 -0
  60. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/__init__.py +0 -0
  61. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
  62. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/health.py +0 -0
  63. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/processes.py +0 -0
  64. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
  65. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/products.py +0 -0
  66. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
  67. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
  68. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
  69. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
  70. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
  71. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/user.py +0 -0
  72. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
  73. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
  74. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/error_handling.py +0 -0
  75. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/helpers.py +0 -0
  76. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/api/models.py +0 -0
  77. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/__init__.py +0 -0
  78. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
  79. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
  80. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
  81. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
  82. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
  83. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
  84. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
  85. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/__init__.py +0 -0
  86. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/README +0 -0
  87. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
  88. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
  89. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
  90. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
  91. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
  92. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
  93. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
  94. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
  95. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
  96. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/__init__.py +0 -0
  97. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/enums.py +0 -0
  98. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/helpers.py +0 -0
  99. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/product.py +0 -0
  100. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/product_block.py +0 -0
  101. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/settings.py +0 -0
  102. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/translations.py +0 -0
  103. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/unittest.py +0 -0
  104. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/validations.py +0 -0
  105. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/generator/workflow.py +0 -0
  106. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
  107. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
  108. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
  109. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
  110. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
  111. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
  112. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
  113. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
  114. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
  115. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
  116. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
  117. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
  118. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/enums.j2 +0 -0
  119. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
  120. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
  121. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/macros.j2 +0 -0
  122. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
  123. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
  124. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/product.j2 +0 -0
  125. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
  126. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
  127. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
  128. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
  129. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
  130. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
  131. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
  132. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
  133. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
  134. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
  135. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
  136. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/helpers/__init__.py +0 -0
  137. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/helpers/input_helpers.py +0 -0
  138. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/helpers/print_helpers.py +0 -0
  139. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/migrate_domain_models.py +0 -0
  140. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/migrate_tasks.py +0 -0
  141. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/migrate_workflows.py +0 -0
  142. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/migration_helpers.py +0 -0
  143. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/search/__init__.py +0 -0
  144. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/search/index_llm.py +0 -0
  145. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/cli/search/search_explore.py +0 -0
  146. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/config/__init__.py +0 -0
  147. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/config/assignee.py +0 -0
  148. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/database.py +0 -0
  149. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/__init__.py +0 -0
  150. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/filters.py +0 -0
  151. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/process.py +0 -0
  152. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/product.py +0 -0
  153. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/product_block.py +0 -0
  154. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/resource_type.py +0 -0
  155. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/search_filters/__init__.py +0 -0
  156. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
  157. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/subscription.py +0 -0
  158. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/filters/workflow.py +0 -0
  159. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/helpers.py +0 -0
  160. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/listeners.py +0 -0
  161. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/loaders.py +0 -0
  162. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/queries/__init__.py +0 -0
  163. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/queries/subscription.py +0 -0
  164. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/queries/subscription_instance.py +0 -0
  165. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/range/__init__.py +0 -0
  166. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/range/range.py +0 -0
  167. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/sorting/__init__.py +0 -0
  168. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/sorting/process.py +0 -0
  169. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/sorting/product.py +0 -0
  170. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/sorting/product_block.py +0 -0
  171. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/sorting/resource_type.py +0 -0
  172. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/sorting/sorting.py +0 -0
  173. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/sorting/subscription.py +0 -0
  174. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/db/sorting/workflow.py +0 -0
  175. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/devtools/__init__.py +0 -0
  176. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/devtools/populator.py +0 -0
  177. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/devtools/scripts/__init__.py +0 -0
  178. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/devtools/scripts/migrate_20.py +0 -0
  179. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/devtools/scripts/migrate_30.py +0 -0
  180. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/devtools/scripts/shared.py +0 -0
  181. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/distlock/__init__.py +0 -0
  182. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/distlock/distlock_manager.py +0 -0
  183. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/distlock/managers/__init__.py +0 -0
  184. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
  185. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
  186. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/domain/__init__.py +0 -0
  187. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/domain/base.py +0 -0
  188. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/domain/context_cache.py +0 -0
  189. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/domain/customer_description.py +0 -0
  190. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/domain/helpers.py +0 -0
  191. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/domain/lifecycle.py +0 -0
  192. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/domain/subscription_instance_transform.py +0 -0
  193. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/exception_handlers.py +0 -0
  194. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/forms/__init__.py +0 -0
  195. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/forms/validators/__init__.py +0 -0
  196. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/forms/validators/customer_contact_list.py +0 -0
  197. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/forms/validators/customer_id.py +0 -0
  198. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/forms/validators/display_subscription.py +0 -0
  199. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/forms/validators/network_type_validators.py +0 -0
  200. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/forms/validators/product_id.py +0 -0
  201. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/__init__.py +0 -0
  202. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/autoregistration.py +0 -0
  203. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/extensions/__init__.py +0 -0
  204. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/extensions/model_cache.py +0 -0
  205. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/extensions/stats.py +0 -0
  206. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/loaders/__init__.py +0 -0
  207. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/loaders/subscriptions.py +0 -0
  208. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/mutations/customer_description.py +0 -0
  209. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/mutations/start_process.py +0 -0
  210. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/pagination.py +0 -0
  211. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/__init__.py +0 -0
  212. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/customer.py +0 -0
  213. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/helpers.py +0 -0
  214. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/process.py +0 -0
  215. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/product.py +0 -0
  216. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/product_block.py +0 -0
  217. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/resource_type.py +0 -0
  218. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/scheduled_tasks.py +0 -0
  219. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/settings.py +0 -0
  220. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/subscription.py +0 -0
  221. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/version.py +0 -0
  222. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/resolvers/workflow.py +0 -0
  223. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schema.py +0 -0
  224. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/__init__.py +0 -0
  225. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/customer.py +0 -0
  226. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/customer_description.py +0 -0
  227. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/errors.py +0 -0
  228. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/fixed_input.py +0 -0
  229. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/helpers.py +0 -0
  230. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/process.py +0 -0
  231. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/product.py +0 -0
  232. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/product_block.py +0 -0
  233. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/resource_type.py +0 -0
  234. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/scheduled_task.py +0 -0
  235. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/settings.py +0 -0
  236. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
  237. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/subscription.py +0 -0
  238. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/version.py +0 -0
  239. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/schemas/workflow.py +0 -0
  240. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/types.py +0 -0
  241. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/utils/__init__.py +0 -0
  242. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
  243. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
  244. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
  245. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
  246. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
  247. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
  248. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/utils/override_class.py +0 -0
  249. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
  250. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/log_config.py +0 -0
  251. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/metrics/__init__.py +0 -0
  252. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/metrics/engine.py +0 -0
  253. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/metrics/init.py +0 -0
  254. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/metrics/processes.py +0 -0
  255. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/metrics/subscriptions.py +0 -0
  256. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/README +0 -0
  257. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/__init__.py +0 -0
  258. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/alembic.ini +0 -0
  259. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/env.py +0 -0
  260. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/script.py.mako +0 -0
  261. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
  262. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/templates/env.py.j2 +0 -0
  263. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
  264. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
  265. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
  266. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
  267. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
  268. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
  269. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
  270. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
  271. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
  272. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
  273. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
  274. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
  275. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
  276. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
  277. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
  278. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
  279. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
  280. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
  281. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
  282. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
  283. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
  284. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
  285. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +0 -0
  286. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
  287. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
  288. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
  289. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +0 -0
  290. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-07-01_93fc5834c7e5_changed_timestamping_fields_in_process_steps.py +0 -0
  291. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-07-04_4b58e336d1bf_deprecating_workflow_target_in_.py +0 -0
  292. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/migrations/versions/schema/2025-07-28_850dccac3b02_update_description_of_resume_workflows_.py +0 -0
  293. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/py.typed +0 -0
  294. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schedules/__init__.py +0 -0
  295. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schedules/resume_workflows.py +0 -0
  296. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schedules/scheduling.py +0 -0
  297. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schedules/task_vacuum.py +0 -0
  298. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schedules/validate_subscriptions.py +0 -0
  299. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/__init__.py +0 -0
  300. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/base.py +0 -0
  301. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/engine_settings.py +0 -0
  302. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/fixed_input.py +0 -0
  303. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/problem_detail.py +0 -0
  304. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/process.py +0 -0
  305. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/product.py +0 -0
  306. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/product_block.py +0 -0
  307. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/resource_type.py +0 -0
  308. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/subscription.py +0 -0
  309. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/subscription_descriptions.py +0 -0
  310. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/schemas/workflow.py +0 -0
  311. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/__init__.py +0 -0
  312. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/core/__init__.py +0 -0
  313. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/core/validators.py +0 -0
  314. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/docs/index.md +0 -0
  315. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/docs/running_local_text_embedding_inference.md +0 -0
  316. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/filters/__init__.py +0 -0
  317. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/filters/base.py +0 -0
  318. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/filters/date_filters.py +0 -0
  319. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/filters/definitions.py +0 -0
  320. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/filters/ltree_filters.py +0 -0
  321. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/filters/numeric_filter.py +0 -0
  322. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/indexing/__init__.py +0 -0
  323. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/indexing/tasks.py +0 -0
  324. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/indexing/traverse.py +0 -0
  325. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/exceptions.py +0 -0
  326. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/retrievers/__init__.py +0 -0
  327. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/utils.py +0 -0
  328. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/retrieval/validation.py +0 -0
  329. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/search/schemas/__init__.py +0 -0
  330. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/security.py +0 -0
  331. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/__init__.py +0 -0
  332. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/executors/__init__.py +0 -0
  333. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/executors/celery.py +0 -0
  334. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/executors/threadpool.py +0 -0
  335. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/fixed_inputs.py +0 -0
  336. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/input_state.py +0 -0
  337. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/process_broadcast_thread.py +0 -0
  338. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/processes.py +0 -0
  339. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/products.py +0 -0
  340. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/resource_types.py +0 -0
  341. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/settings.py +0 -0
  342. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/settings_env_variables.py +0 -0
  343. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/subscription_relations.py +0 -0
  344. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/subscriptions.py +0 -0
  345. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/tasks.py +0 -0
  346. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/translations.py +0 -0
  347. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/services/workflows.py +0 -0
  348. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/targets.py +0 -0
  349. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/types.py +0 -0
  350. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/__init__.py +0 -0
  351. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/crypt.py +0 -0
  352. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/datetime.py +0 -0
  353. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/deprecation_logger.py +0 -0
  354. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/docs.py +0 -0
  355. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/enrich_process.py +0 -0
  356. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/errors.py +0 -0
  357. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/expose_settings.py +0 -0
  358. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/fixed_inputs.py +0 -0
  359. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/functional.py +0 -0
  360. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/get_subscription_dict.py +0 -0
  361. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/get_updated_properties.py +0 -0
  362. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/helpers.py +0 -0
  363. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/json.py +0 -0
  364. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/redis.py +0 -0
  365. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/redis_client.py +0 -0
  366. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/search_query.py +0 -0
  367. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/state.py +0 -0
  368. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/strings.py +0 -0
  369. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/utils/validate_data_version.py +0 -0
  370. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/version.py +0 -0
  371. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/websocket/__init__.py +0 -0
  372. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
  373. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
  374. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/websocket/websocket_manager.py +0 -0
  375. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/__init__.py +0 -0
  376. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/modify_note.py +0 -0
  377. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/removed_workflow.py +0 -0
  378. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/steps.py +0 -0
  379. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/tasks/__init__.py +0 -0
  380. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
  381. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
  382. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/tasks/validate_product_type.py +0 -0
  383. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/tasks/validate_products.py +0 -0
  384. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/translations/en-GB.json +0 -0
  385. {orchestrator_core-4.5.3 → orchestrator_core-4.6.0}/orchestrator/workflows/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orchestrator-core
3
- Version: 4.5.3
3
+ Version: 4.6.0
4
4
  Summary: This is the orchestrator workflow engine.
5
5
  Author-email: SURF <automation-beheer@surf.nl>
6
6
  Requires-Python: >=3.11,<3.14
@@ -41,8 +41,8 @@ Requires-Dist: fastapi-etag==0.4.0
41
41
  Requires-Dist: itsdangerous>=2.2.0
42
42
  Requires-Dist: jinja2==3.1.6
43
43
  Requires-Dist: more-itertools~=10.7.0
44
- Requires-Dist: nwa-stdlib~=1.9.2
45
- Requires-Dist: oauth2-lib>=2.4.1
44
+ Requires-Dist: nwa-stdlib~=1.10.3
45
+ Requires-Dist: oauth2-lib>=2.5.0
46
46
  Requires-Dist: orjson==3.10.18
47
47
  Requires-Dist: pgvector>=0.4.1
48
48
  Requires-Dist: prometheus-client==0.22.1
@@ -63,7 +63,7 @@ Requires-Dist: structlog>=25.4.0
63
63
  Requires-Dist: tabulate==0.9.0
64
64
  Requires-Dist: typer==0.15.4
65
65
  Requires-Dist: uvicorn[standard]~=0.34.0
66
- Requires-Dist: pydantic-ai-slim ==0.7.0 ; extra == "agent"
66
+ Requires-Dist: pydantic-ai-slim >=1.3.0 ; extra == "agent"
67
67
  Requires-Dist: ag-ui-protocol>=0.1.8 ; extra == "agent"
68
68
  Requires-Dist: litellm>=1.75.7 ; extra == "agent"
69
69
  Requires-Dist: celery~=5.5.1 ; extra == "celery"
@@ -119,21 +119,26 @@ Configure the database URI in your local environment:
119
119
  export DATABASE_URI=postgresql://nwa:nwa@localhost:5432/orchestrator-core
120
120
  ```
121
121
 
122
- ### Step 3 - Create main.py
122
+ ### Step 3 - Create main.py and wsgi.py
123
123
 
124
- Create a `main.py` file.
124
+ Create a `main.py` file for running the CLI.
125
125
 
126
126
  ```python
127
- from orchestrator import OrchestratorCore
128
127
  from orchestrator.cli.main import app as core_cli
129
- from orchestrator.settings import AppSettings
130
-
131
- app = OrchestratorCore(base_settings=AppSettings())
132
128
 
133
129
  if __name__ == "__main__":
134
130
  core_cli()
135
131
  ```
136
132
 
133
+ Create a `wsgi.py` file for running the web server.
134
+
135
+ ```python
136
+ from orchestrator import OrchestratorCore
137
+ from orchestrator.settings import AppSettings
138
+
139
+ app = OrchestratorCore(base_settings=AppSettings())
140
+ ```
141
+
137
142
  ### Step 4 - Run the database migrations
138
143
 
139
144
  Initialize the migration environment and database tables.
@@ -147,7 +152,7 @@ python main.py db upgrade heads
147
152
 
148
153
  ```shell
149
154
  export OAUTH2_ACTIVE=False
150
- uvicorn --reload --host 127.0.0.1 --port 8080 main:app
155
+ uvicorn --reload --host 127.0.0.1 --port 8080 wsgi:app
151
156
  ```
152
157
 
153
158
  Visit the [ReDoc](http://127.0.0.1:8080/api/redoc) or [OpenAPI](http://127.0.0.1:8080/api/docs) page to view and interact with the API.
@@ -42,21 +42,26 @@ Configure the database URI in your local environment:
42
42
  export DATABASE_URI=postgresql://nwa:nwa@localhost:5432/orchestrator-core
43
43
  ```
44
44
 
45
- ### Step 3 - Create main.py
45
+ ### Step 3 - Create main.py and wsgi.py
46
46
 
47
- Create a `main.py` file.
47
+ Create a `main.py` file for running the CLI.
48
48
 
49
49
  ```python
50
- from orchestrator import OrchestratorCore
51
50
  from orchestrator.cli.main import app as core_cli
52
- from orchestrator.settings import AppSettings
53
-
54
- app = OrchestratorCore(base_settings=AppSettings())
55
51
 
56
52
  if __name__ == "__main__":
57
53
  core_cli()
58
54
  ```
59
55
 
56
+ Create a `wsgi.py` file for running the web server.
57
+
58
+ ```python
59
+ from orchestrator import OrchestratorCore
60
+ from orchestrator.settings import AppSettings
61
+
62
+ app = OrchestratorCore(base_settings=AppSettings())
63
+ ```
64
+
60
65
  ### Step 4 - Run the database migrations
61
66
 
62
67
  Initialize the migration environment and database tables.
@@ -70,7 +75,7 @@ python main.py db upgrade heads
70
75
 
71
76
  ```shell
72
77
  export OAUTH2_ACTIVE=False
73
- uvicorn --reload --host 127.0.0.1 --port 8080 main:app
78
+ uvicorn --reload --host 127.0.0.1 --port 8080 wsgi:app
74
79
  ```
75
80
 
76
81
  Visit the [ReDoc](http://127.0.0.1:8080/api/redoc) or [OpenAPI](http://127.0.0.1:8080/api/docs) page to view and interact with the API.
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2025 SURF, GÉANT.
1
+ # Copyright 2019-2025 SURF, GÉANT, ESnet.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -13,7 +13,7 @@
13
13
 
14
14
  """This is the orchestrator workflow engine."""
15
15
 
16
- __version__ = "4.5.3"
16
+ __version__ = "4.6.0"
17
17
 
18
18
 
19
19
  from structlog import get_logger
@@ -26,8 +26,7 @@ from orchestrator.cli.main import app as cli_app
26
26
  from orchestrator.llm_settings import LLMSettings, llm_settings
27
27
 
28
28
  if TYPE_CHECKING:
29
- from pydantic_ai.models.openai import OpenAIModel
30
- from pydantic_ai.toolsets import FunctionToolset
29
+ from pydantic_ai.models.openai import OpenAIChatModel
31
30
 
32
31
  logger = get_logger(__name__)
33
32
 
@@ -37,20 +36,18 @@ class LLMOrchestratorCore(OrchestratorCore):
37
36
  self,
38
37
  *args: Any,
39
38
  llm_settings: LLMSettings = llm_settings,
40
- agent_model: "OpenAIModel | str | None" = None,
41
- agent_tools: "list[FunctionToolset] | None" = None,
39
+ agent_model: "OpenAIChatModel | str | None" = None,
42
40
  **kwargs: Any,
43
41
  ) -> None:
44
42
  """Initialize the `LLMOrchestratorCore` class.
45
43
 
46
44
  This class extends `OrchestratorCore` with LLM features (search and agent).
47
- It runs the search migration and mounts the agent endpoint based on feature flags.
45
+ It runs the search migration based on feature flags.
48
46
 
49
47
  Args:
50
48
  *args: All the normal arguments passed to the `OrchestratorCore` class.
51
49
  llm_settings: A class of settings for the LLM
52
50
  agent_model: Override the agent model (defaults to llm_settings.AGENT_MODEL)
53
- agent_tools: A list of tools that can be used by the agent
54
51
  **kwargs: Additional arguments passed to the `OrchestratorCore` class.
55
52
 
56
53
  Returns:
@@ -58,7 +55,6 @@ class LLMOrchestratorCore(OrchestratorCore):
58
55
  """
59
56
  self.llm_settings = llm_settings
60
57
  self.agent_model = agent_model or llm_settings.AGENT_MODEL
61
- self.agent_tools = agent_tools
62
58
 
63
59
  super().__init__(*args, **kwargs)
64
60
 
@@ -79,22 +75,6 @@ class LLMOrchestratorCore(OrchestratorCore):
79
75
  )
80
76
  raise
81
77
 
82
- # Mount agent endpoint if agent is enabled
83
- if self.llm_settings.AGENT_ENABLED:
84
- logger.info("Initializing agent features", model=self.agent_model)
85
- try:
86
- from orchestrator.search.agent import build_agent_router
87
-
88
- agent_app = build_agent_router(self.agent_model, self.agent_tools)
89
- self.mount("/agent", agent_app)
90
- except ImportError as e:
91
- logger.error(
92
- "Unable to initialize agent features. Please install agent dependencies: "
93
- "`pip install orchestrator-core[agent]`",
94
- error=str(e),
95
- )
96
- raise
97
-
98
78
 
99
79
  main_typer_app = typer.Typer()
100
80
  main_typer_app.add_typer(cli_app, name="orchestrator", help="The orchestrator CLI commands")
@@ -95,3 +95,8 @@ if llm_settings.SEARCH_ENABLED:
95
95
  api_router.include_router(
96
96
  search.router, prefix="/search", tags=["Core", "Search"], dependencies=[Depends(authorize)]
97
97
  )
98
+
99
+ if llm_settings.AGENT_ENABLED:
100
+ from orchestrator.api.api_v1.endpoints import agent
101
+
102
+ api_router.include_router(agent.router, prefix="/agent", tags=["Core", "Agent"], dependencies=[Depends(authorize)])
@@ -0,0 +1,49 @@
1
+ # Copyright 2019-2025 SURF, GÉANT.
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+
14
+ from functools import cache
15
+ from typing import Annotated
16
+
17
+ from fastapi import APIRouter, Depends, Request
18
+ from pydantic_ai.ag_ui import StateDeps, handle_ag_ui_request
19
+ from pydantic_ai.agent import Agent
20
+ from starlette.responses import Response
21
+ from structlog import get_logger
22
+
23
+ from orchestrator.search.agent import build_agent_instance
24
+ from orchestrator.search.agent.state import SearchState
25
+
26
+ router = APIRouter()
27
+ logger = get_logger(__name__)
28
+
29
+
30
+ @cache
31
+ def get_agent(request: Request) -> Agent[StateDeps[SearchState], str]:
32
+ """Dependency to provide the agent instance.
33
+
34
+ The agent is built once and cached for the lifetime of the application.
35
+ """
36
+ return build_agent_instance(request.app.agent_model)
37
+
38
+
39
+ @router.post("/")
40
+ async def agent_conversation(
41
+ request: Request,
42
+ agent: Annotated[Agent[StateDeps[SearchState], str], Depends(get_agent)],
43
+ ) -> Response:
44
+ """Agent conversation endpoint using pydantic-ai ag_ui protocol.
45
+
46
+ This endpoint handles the interactive agent conversation for search.
47
+ """
48
+ initial_state = SearchState()
49
+ return await handle_ag_ui_request(agent, request, deps=StateDeps(initial_state))
@@ -0,0 +1,215 @@
1
+ # Copyright 2019-2025 SURF, GÉANT.
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+
14
+ import structlog
15
+ from fastapi import APIRouter, HTTPException, Query, status
16
+
17
+ from orchestrator.db import db
18
+ from orchestrator.schemas.search import (
19
+ ExportResponse,
20
+ PageInfoSchema,
21
+ PathsResponse,
22
+ SearchResultsSchema,
23
+ )
24
+ from orchestrator.search.core.exceptions import InvalidCursorError, QueryStateNotFoundError
25
+ from orchestrator.search.core.types import EntityType, UIType
26
+ from orchestrator.search.filters.definitions import generate_definitions
27
+ from orchestrator.search.retrieval import SearchQueryState, execute_search, execute_search_for_export
28
+ from orchestrator.search.retrieval.builder import build_paths_query, create_path_autocomplete_lquery, process_path_rows
29
+ from orchestrator.search.retrieval.pagination import PageCursor, encode_next_page_cursor
30
+ from orchestrator.search.retrieval.validation import is_lquery_syntactically_valid
31
+ from orchestrator.search.schemas.parameters import (
32
+ ProcessSearchParameters,
33
+ ProductSearchParameters,
34
+ SearchParameters,
35
+ SubscriptionSearchParameters,
36
+ WorkflowSearchParameters,
37
+ )
38
+ from orchestrator.search.schemas.results import SearchResult, TypeDefinition
39
+
40
+ router = APIRouter()
41
+ logger = structlog.get_logger(__name__)
42
+
43
+
44
+ async def _perform_search_and_fetch(
45
+ search_params: SearchParameters | None = None,
46
+ cursor: str | None = None,
47
+ query_id: str | None = None,
48
+ ) -> SearchResultsSchema[SearchResult]:
49
+ """Execute search with optional pagination.
50
+
51
+ Args:
52
+ search_params: Search parameters for new search
53
+ cursor: Pagination cursor (loads saved query state)
54
+ query_id: Saved query ID to retrieve and execute
55
+
56
+ Returns:
57
+ Search results with entity_id, score, and matching_field.
58
+ """
59
+ try:
60
+ page_cursor: PageCursor | None = None
61
+
62
+ if cursor:
63
+ page_cursor = PageCursor.decode(cursor)
64
+ query_state = SearchQueryState.load_from_id(page_cursor.query_id)
65
+ elif query_id:
66
+ query_state = SearchQueryState.load_from_id(query_id)
67
+ elif search_params:
68
+ query_state = SearchQueryState(parameters=search_params, query_embedding=None)
69
+ else:
70
+ raise HTTPException(
71
+ status_code=status.HTTP_400_BAD_REQUEST,
72
+ detail="Either search_params, cursor, or query_id must be provided",
73
+ )
74
+
75
+ search_response = await execute_search(
76
+ query_state.parameters, db.session, page_cursor, query_state.query_embedding
77
+ )
78
+ if not search_response.results:
79
+ return SearchResultsSchema(search_metadata=search_response.metadata)
80
+
81
+ next_page_cursor = encode_next_page_cursor(search_response, page_cursor, query_state.parameters)
82
+ has_next_page = next_page_cursor is not None
83
+ page_info = PageInfoSchema(has_next_page=has_next_page, next_page_cursor=next_page_cursor)
84
+
85
+ return SearchResultsSchema(
86
+ data=search_response.results, page_info=page_info, search_metadata=search_response.metadata
87
+ )
88
+ except (InvalidCursorError, ValueError) as e:
89
+ raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=str(e))
90
+ except QueryStateNotFoundError as e:
91
+ raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(e))
92
+ except Exception as e:
93
+ raise HTTPException(
94
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
95
+ detail=f"Search failed: {str(e)}",
96
+ )
97
+
98
+
99
+ @router.post("/subscriptions", response_model=SearchResultsSchema[SearchResult])
100
+ async def search_subscriptions(
101
+ search_params: SubscriptionSearchParameters,
102
+ cursor: str | None = None,
103
+ ) -> SearchResultsSchema[SearchResult]:
104
+ return await _perform_search_and_fetch(search_params, cursor)
105
+
106
+
107
+ @router.post("/workflows", response_model=SearchResultsSchema[SearchResult])
108
+ async def search_workflows(
109
+ search_params: WorkflowSearchParameters,
110
+ cursor: str | None = None,
111
+ ) -> SearchResultsSchema[SearchResult]:
112
+ return await _perform_search_and_fetch(search_params, cursor)
113
+
114
+
115
+ @router.post("/products", response_model=SearchResultsSchema[SearchResult])
116
+ async def search_products(
117
+ search_params: ProductSearchParameters,
118
+ cursor: str | None = None,
119
+ ) -> SearchResultsSchema[SearchResult]:
120
+ return await _perform_search_and_fetch(search_params, cursor)
121
+
122
+
123
+ @router.post("/processes", response_model=SearchResultsSchema[SearchResult])
124
+ async def search_processes(
125
+ search_params: ProcessSearchParameters,
126
+ cursor: str | None = None,
127
+ ) -> SearchResultsSchema[SearchResult]:
128
+ return await _perform_search_and_fetch(search_params, cursor)
129
+
130
+
131
+ @router.get(
132
+ "/paths",
133
+ response_model=PathsResponse,
134
+ response_model_exclude_none=True,
135
+ )
136
+ async def list_paths(
137
+ prefix: str = Query("", min_length=0),
138
+ q: str | None = Query(None, description="Query for path suggestions"),
139
+ entity_type: EntityType = Query(EntityType.SUBSCRIPTION),
140
+ limit: int = Query(10, ge=1, le=10),
141
+ ) -> PathsResponse:
142
+
143
+ if prefix:
144
+ lquery_pattern = create_path_autocomplete_lquery(prefix)
145
+
146
+ if not is_lquery_syntactically_valid(lquery_pattern, db.session):
147
+ raise HTTPException(
148
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
149
+ detail=f"Prefix '{prefix}' creates an invalid search pattern.",
150
+ )
151
+ stmt = build_paths_query(entity_type=entity_type, prefix=prefix, q=q)
152
+ stmt = stmt.limit(limit)
153
+ rows = db.session.execute(stmt).all()
154
+
155
+ leaves, components = process_path_rows(rows)
156
+ return PathsResponse(leaves=leaves, components=components)
157
+
158
+
159
+ @router.get(
160
+ "/definitions",
161
+ response_model=dict[UIType, TypeDefinition],
162
+ response_model_exclude_none=True,
163
+ )
164
+ async def get_definitions() -> dict[UIType, TypeDefinition]:
165
+ """Provide a static definition of operators and schemas for each UI type."""
166
+ return generate_definitions()
167
+
168
+
169
+ @router.get(
170
+ "/queries/{query_id}",
171
+ response_model=SearchResultsSchema[SearchResult],
172
+ summary="Retrieve saved search results by query_id",
173
+ )
174
+ async def get_by_query_id(
175
+ query_id: str,
176
+ cursor: str | None = None,
177
+ ) -> SearchResultsSchema[SearchResult]:
178
+ """Retrieve and execute a saved search by query_id."""
179
+ return await _perform_search_and_fetch(query_id=query_id, cursor=cursor)
180
+
181
+
182
+ @router.get(
183
+ "/queries/{query_id}/export",
184
+ summary="Export query results by query_id",
185
+ response_model=ExportResponse,
186
+ )
187
+ async def export_by_query_id(query_id: str) -> ExportResponse:
188
+ """Export search results using query_id.
189
+
190
+ The query is retrieved from the database, re-executed, and results are returned
191
+ as flattened records suitable for CSV download.
192
+
193
+ Args:
194
+ query_id: Query UUID
195
+
196
+ Returns:
197
+ ExportResponse containing 'page' with an array of flattened entity records.
198
+
199
+ Raises:
200
+ HTTPException: 404 if query not found, 400 if invalid data
201
+ """
202
+ try:
203
+ query_state = SearchQueryState.load_from_id(query_id)
204
+ export_records = await execute_search_for_export(query_state, db.session)
205
+ return ExportResponse(page=export_records)
206
+ except ValueError as e:
207
+ raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=str(e))
208
+ except QueryStateNotFoundError as e:
209
+ raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(e))
210
+ except Exception as e:
211
+ logger.error(e)
212
+ raise HTTPException(
213
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
214
+ detail=f"Error executing export: {str(e)}",
215
+ )
@@ -5,7 +5,7 @@ This module contains the main `OrchestratorCore` class for the `FastAPI` backend
5
5
  provides the ability to run the CLI.
6
6
  """
7
7
 
8
- # Copyright 2019-2020 SURF, ESnet, GÉANT.
8
+ # Copyright 2019-2025 SURF, ESnet, GÉANT.
9
9
  # Licensed under the Apache License, Version 2.0 (the "License");
10
10
  # you may not use this file except in compliance with the License.
11
11
  # You may obtain a copy of the License at
@@ -23,6 +23,8 @@ from structlog import get_logger
23
23
 
24
24
  import orchestrator.workflows
25
25
  from orchestrator.cli.domain_gen_helpers.types import ModelUpdates
26
+ from orchestrator.cli.generate import create_writer, get_template_environment
27
+ from orchestrator.cli.generator.generator.migration import create_data_head_if_not_exists
26
28
  from orchestrator.cli.helpers.print_helpers import COLOR, str_fmt
27
29
  from orchestrator.cli.migrate_domain_models import create_domain_models_migration_sql
28
30
  from orchestrator.cli.migrate_tasks import create_tasks_migration_wizard
@@ -223,6 +225,7 @@ def revision(
223
225
  --head TEXT Determine the head you need to add your migration to.
224
226
  ```
225
227
  """
228
+ create_data_head_if_not_exists({"writer": create_writer(), "environment": get_template_environment()})
226
229
  command.revision(alembic_cfg(), message, version_path=version_path, autogenerate=autogenerate, head=head)
227
230
 
228
231
 
@@ -14,6 +14,7 @@
14
14
  # ruff: noqa: S603
15
15
  import subprocess
16
16
  from pathlib import Path
17
+ from typing import Callable
17
18
 
18
19
  import structlog
19
20
  import typer
@@ -78,7 +79,7 @@ def ruff(content: str) -> str:
78
79
  return content
79
80
 
80
81
 
81
- def create_context(config_file: Path, dryrun: bool, force: bool, python_version: str, tdd: bool | None = False) -> dict:
82
+ def create_writer(dryrun: bool = False, force: bool = False) -> Callable[..., None]:
82
83
  def writer(path: Path, content: str, append: bool = False) -> None:
83
84
  content = ruff(content) if path.suffix == ".py" else content
84
85
  if dryrun:
@@ -88,9 +89,15 @@ def create_context(config_file: Path, dryrun: bool, force: bool, python_version:
88
89
  else:
89
90
  write_file(path, content, append=append, force=force)
90
91
 
92
+ return writer
93
+
94
+
95
+ def get_template_environment() -> Environment:
91
96
  search_path = (settings.CUSTOM_TEMPLATES, Path(__file__).parent / "generator" / "templates")
92
- environment = Environment(loader=FileSystemLoader(search_path), autoescape=True, keep_trailing_newline=True)
97
+ return Environment(loader=FileSystemLoader(search_path), autoescape=True, keep_trailing_newline=True)
93
98
 
99
+
100
+ def create_context(config_file: Path, dryrun: bool, force: bool, python_version: str, tdd: bool | None = False) -> dict:
94
101
  config = read_config(config_file)
95
102
  config["variable"] = get_variable(config)
96
103
  for pb in config["product_blocks"]:
@@ -98,10 +105,10 @@ def create_context(config_file: Path, dryrun: bool, force: bool, python_version:
98
105
 
99
106
  return {
100
107
  "config": config,
101
- "environment": environment,
108
+ "environment": get_template_environment(),
102
109
  "python_version": python_version,
103
110
  "tdd": tdd,
104
- "writer": writer,
111
+ "writer": create_writer(dryrun=dryrun, force=force),
105
112
  }
106
113
 
107
114
 
@@ -79,6 +79,12 @@ def create_data_head(context: dict, depends_on: str) -> None:
79
79
  writer(path, content)
80
80
 
81
81
 
82
+ def create_data_head_if_not_exists(context: dict) -> None:
83
+ heads = get_heads()
84
+ if "data" not in heads:
85
+ create_data_head(context=context, depends_on=heads["schema"])
86
+
87
+
82
88
  def extract_revision_info(content: list[str]) -> dict:
83
89
  def process() -> Generator:
84
90
  for line in content:
@@ -136,9 +142,7 @@ def generate_product_migration(context: dict) -> None:
136
142
  environment = context["environment"]
137
143
  writer = context["writer"]
138
144
 
139
- heads = get_heads()
140
- if "data" not in heads:
141
- create_data_head(context=context, depends_on=heads["schema"])
145
+ create_data_head_if_not_exists(context=context)
142
146
 
143
147
  if not (migration_file := create_migration_file(message=f"add {config['name']}", head="data")):
144
148
  logger.error("Could not create migration file")
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2025 SURF, ESnet, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -12,26 +12,23 @@
12
12
  # limitations under the License.
13
13
 
14
14
 
15
- import logging
16
15
  import time
17
16
 
18
17
  import typer
19
18
 
20
19
  from orchestrator.schedules.scheduler import (
21
- get_paused_scheduler,
20
+ get_all_scheduler_tasks,
21
+ get_scheduler,
22
+ get_scheduler_task,
22
23
  )
23
24
 
24
- log = logging.getLogger(__name__)
25
-
26
25
  app: typer.Typer = typer.Typer()
27
26
 
28
27
 
29
28
  @app.command()
30
29
  def run() -> None:
31
30
  """Start scheduler and loop eternally to keep thread alive."""
32
- with get_paused_scheduler() as scheduler:
33
- scheduler.resume()
34
-
31
+ with get_scheduler():
35
32
  while True:
36
33
  time.sleep(1)
37
34
 
@@ -42,27 +39,23 @@ def show_schedule() -> None:
42
39
 
43
40
  in cli underscore is replaced by a dash `show-schedule`
44
41
  """
45
- with get_paused_scheduler() as scheduler:
46
- jobs = scheduler.get_jobs()
47
-
48
- for job in jobs:
49
- typer.echo(f"[{job.id}] Next run: {job.next_run_time} | Trigger: {job.trigger}")
42
+ for task in get_all_scheduler_tasks():
43
+ typer.echo(f"[{task.id}] Next run: {task.next_run_time} | Trigger: {task.trigger}")
50
44
 
51
45
 
52
46
  @app.command()
53
- def force(job_id: str) -> None:
54
- """Force the execution of (a) scheduler(s) based on a job_id."""
55
- with get_paused_scheduler() as scheduler:
56
- job = scheduler.get_job(job_id)
47
+ def force(task_id: str) -> None:
48
+ """Force the execution of (a) scheduler(s) based on a task_id."""
49
+ task = get_scheduler_task(task_id)
57
50
 
58
- if not job:
59
- typer.echo(f"Job '{job_id}' not found.")
51
+ if not task:
52
+ typer.echo(f"Task '{task_id}' not found.")
60
53
  raise typer.Exit(code=1)
61
54
 
62
- typer.echo(f"Running job [{job.id}] now...")
55
+ typer.echo(f"Running Task [{task.id}] now...")
63
56
  try:
64
- job.func(*job.args or (), **job.kwargs or {})
65
- typer.echo("Job executed successfully.")
57
+ task.func(*task.args or (), **task.kwargs or {})
58
+ typer.echo("Task executed successfully.")
66
59
  except Exception as e:
67
- typer.echo(f"Job execution failed: {e}")
60
+ typer.echo(f"Task execution failed: {e}")
68
61
  raise typer.Exit(code=1)