orchestrator-core 4.5.1a1__tar.gz → 4.5.2__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 (388) hide show
  1. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/PKG-INFO +13 -11
  2. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/README.md +1 -1
  3. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/__init__.py +3 -12
  4. orchestrator_core-4.5.2/orchestrator/agentic_app.py +103 -0
  5. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/api.py +8 -6
  6. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/processes.py +2 -0
  7. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/search.py +26 -7
  8. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/main.py +2 -2
  9. orchestrator_core-4.5.2/orchestrator/cli/search/__init__.py +32 -0
  10. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/devtools/populator.py +16 -0
  11. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/domain/base.py +2 -7
  12. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/domain/lifecycle.py +24 -7
  13. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/llm_settings.py +9 -3
  14. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/log_config.py +1 -0
  15. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/helpers.py +7 -1
  16. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/search.py +13 -0
  17. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/workflow.py +1 -0
  18. orchestrator_core-4.5.2/orchestrator/search/agent/__init__.py +21 -0
  19. orchestrator_core-4.5.2/orchestrator/search/agent/agent.py +62 -0
  20. orchestrator_core-4.5.2/orchestrator/search/agent/prompts.py +100 -0
  21. orchestrator_core-4.5.2/orchestrator/search/agent/state.py +21 -0
  22. orchestrator_core-4.5.2/orchestrator/search/agent/tools.py +258 -0
  23. orchestrator_core-4.5.2/orchestrator/search/core/__init__.py +12 -0
  24. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/core/embedding.py +13 -4
  25. orchestrator_core-4.5.2/orchestrator/search/core/exceptions.py +36 -0
  26. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/core/types.py +15 -0
  27. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/core/validators.py +13 -0
  28. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/docs/running_local_text_embedding_inference.md +1 -0
  29. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/filters/__init__.py +13 -0
  30. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/filters/base.py +84 -61
  31. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/filters/date_filters.py +13 -0
  32. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/filters/definitions.py +16 -2
  33. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/filters/ltree_filters.py +16 -3
  34. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/filters/numeric_filter.py +13 -0
  35. orchestrator_core-4.5.2/orchestrator/search/indexing/__init__.py +16 -0
  36. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/indexing/indexer.py +14 -3
  37. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/indexing/registry.py +13 -0
  38. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/indexing/tasks.py +17 -1
  39. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/indexing/traverse.py +17 -5
  40. orchestrator_core-4.5.2/orchestrator/search/llm_migration.py +108 -0
  41. orchestrator_core-4.5.2/orchestrator/search/retrieval/__init__.py +16 -0
  42. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/retrieval/builder.py +23 -8
  43. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/retrieval/engine.py +36 -34
  44. orchestrator_core-4.5.2/orchestrator/search/retrieval/exceptions.py +90 -0
  45. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/retrieval/pagination.py +13 -0
  46. orchestrator_core-4.5.2/orchestrator/search/retrieval/retrievers/__init__.py +26 -0
  47. orchestrator_core-4.5.2/orchestrator/search/retrieval/retrievers/base.py +123 -0
  48. orchestrator_core-4.5.2/orchestrator/search/retrieval/retrievers/fuzzy.py +94 -0
  49. orchestrator_core-4.5.2/orchestrator/search/retrieval/retrievers/hybrid.py +277 -0
  50. orchestrator_core-4.5.2/orchestrator/search/retrieval/retrievers/semantic.py +94 -0
  51. orchestrator_core-4.5.2/orchestrator/search/retrieval/retrievers/structured.py +39 -0
  52. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/retrieval/utils.py +21 -7
  53. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/retrieval/validation.py +54 -76
  54. orchestrator_core-4.5.2/orchestrator/search/schemas/__init__.py +12 -0
  55. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/schemas/parameters.py +13 -0
  56. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/schemas/results.py +15 -1
  57. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/processes.py +2 -1
  58. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/settings.py +7 -0
  59. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/state.py +6 -1
  60. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/steps.py +16 -1
  61. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/pyproject.toml +10 -6
  62. orchestrator_core-4.5.1a1/orchestrator/agentic_app.py +0 -84
  63. orchestrator_core-4.5.1a1/orchestrator/migrations/versions/schema/2025-08-12_52b37b5b2714_search_index_model_for_llm_integration.py +0 -95
  64. orchestrator_core-4.5.1a1/orchestrator/search/agent/__init__.py +0 -8
  65. orchestrator_core-4.5.1a1/orchestrator/search/agent/agent.py +0 -47
  66. orchestrator_core-4.5.1a1/orchestrator/search/agent/prompts.py +0 -62
  67. orchestrator_core-4.5.1a1/orchestrator/search/agent/state.py +0 -8
  68. orchestrator_core-4.5.1a1/orchestrator/search/agent/tools.py +0 -121
  69. orchestrator_core-4.5.1a1/orchestrator/search/core/__init__.py +0 -0
  70. orchestrator_core-4.5.1a1/orchestrator/search/core/exceptions.py +0 -22
  71. orchestrator_core-4.5.1a1/orchestrator/search/indexing/__init__.py +0 -3
  72. orchestrator_core-4.5.1a1/orchestrator/search/retrieval/__init__.py +0 -3
  73. orchestrator_core-4.5.1a1/orchestrator/search/retrieval/retriever.py +0 -447
  74. orchestrator_core-4.5.1a1/orchestrator/search/schemas/__init__.py +0 -0
  75. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/LICENSE +0 -0
  76. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/__init__.py +0 -0
  77. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/__init__.py +0 -0
  78. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
  79. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/health.py +0 -0
  80. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
  81. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/products.py +0 -0
  82. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
  83. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
  84. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
  85. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
  86. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
  87. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/user.py +0 -0
  88. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
  89. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
  90. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/error_handling.py +0 -0
  91. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/helpers.py +0 -0
  92. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/api/models.py +0 -0
  93. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/app.py +0 -0
  94. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/__init__.py +0 -0
  95. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/database.py +0 -0
  96. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
  97. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
  98. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
  99. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
  100. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
  101. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
  102. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
  103. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generate.py +0 -0
  104. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/__init__.py +0 -0
  105. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/README +0 -0
  106. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
  107. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
  108. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
  109. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
  110. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
  111. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
  112. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
  113. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
  114. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
  115. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/__init__.py +0 -0
  116. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/enums.py +0 -0
  117. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/helpers.py +0 -0
  118. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/migration.py +0 -0
  119. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/product.py +0 -0
  120. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/product_block.py +0 -0
  121. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/settings.py +0 -0
  122. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/translations.py +0 -0
  123. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/unittest.py +0 -0
  124. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/validations.py +0 -0
  125. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/generator/workflow.py +0 -0
  126. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
  127. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
  128. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
  129. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
  130. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
  131. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
  132. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
  133. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
  134. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
  135. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
  136. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
  137. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
  138. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/enums.j2 +0 -0
  139. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
  140. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
  141. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/macros.j2 +0 -0
  142. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
  143. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
  144. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/product.j2 +0 -0
  145. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
  146. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
  147. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
  148. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
  149. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
  150. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
  151. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
  152. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
  153. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
  154. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
  155. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
  156. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/helpers/__init__.py +0 -0
  157. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/helpers/input_helpers.py +0 -0
  158. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/helpers/print_helpers.py +0 -0
  159. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/migrate_domain_models.py +0 -0
  160. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/migrate_tasks.py +0 -0
  161. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/migrate_workflows.py +0 -0
  162. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/migration_helpers.py +0 -0
  163. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/cli/scheduler.py +0 -0
  164. {orchestrator_core-4.5.1a1/orchestrator/cli → orchestrator_core-4.5.2/orchestrator/cli/search}/index_llm.py +0 -0
  165. {orchestrator_core-4.5.1a1/orchestrator/cli → orchestrator_core-4.5.2/orchestrator/cli/search}/resize_embedding.py +0 -0
  166. {orchestrator_core-4.5.1a1/orchestrator/cli → orchestrator_core-4.5.2/orchestrator/cli/search}/search_explore.py +0 -0
  167. {orchestrator_core-4.5.1a1/orchestrator/cli → orchestrator_core-4.5.2/orchestrator/cli/search}/speedtest.py +0 -0
  168. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/config/__init__.py +0 -0
  169. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/config/assignee.py +0 -0
  170. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/__init__.py +0 -0
  171. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/database.py +0 -0
  172. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/__init__.py +0 -0
  173. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/filters.py +0 -0
  174. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/process.py +0 -0
  175. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/product.py +0 -0
  176. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/product_block.py +0 -0
  177. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/resource_type.py +0 -0
  178. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/search_filters/__init__.py +0 -0
  179. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
  180. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/subscription.py +0 -0
  181. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/filters/workflow.py +0 -0
  182. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/helpers.py +0 -0
  183. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/listeners.py +0 -0
  184. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/loaders.py +0 -0
  185. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/models.py +0 -0
  186. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/queries/__init__.py +0 -0
  187. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/queries/subscription.py +0 -0
  188. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/queries/subscription_instance.py +0 -0
  189. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/range/__init__.py +0 -0
  190. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/range/range.py +0 -0
  191. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/sorting/__init__.py +0 -0
  192. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/sorting/process.py +0 -0
  193. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/sorting/product.py +0 -0
  194. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/sorting/product_block.py +0 -0
  195. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/sorting/resource_type.py +0 -0
  196. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/sorting/sorting.py +0 -0
  197. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/sorting/subscription.py +0 -0
  198. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/db/sorting/workflow.py +0 -0
  199. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/devtools/__init__.py +0 -0
  200. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/devtools/scripts/__init__.py +0 -0
  201. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/devtools/scripts/migrate_20.py +0 -0
  202. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/devtools/scripts/migrate_30.py +0 -0
  203. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/devtools/scripts/shared.py +0 -0
  204. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/distlock/__init__.py +0 -0
  205. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/distlock/distlock_manager.py +0 -0
  206. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/distlock/managers/__init__.py +0 -0
  207. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
  208. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
  209. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/domain/__init__.py +0 -0
  210. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/domain/context_cache.py +0 -0
  211. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/domain/customer_description.py +0 -0
  212. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/domain/helpers.py +0 -0
  213. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/domain/subscription_instance_transform.py +0 -0
  214. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/exception_handlers.py +0 -0
  215. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/forms/__init__.py +0 -0
  216. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/forms/validators/__init__.py +0 -0
  217. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/forms/validators/customer_contact_list.py +0 -0
  218. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/forms/validators/customer_id.py +0 -0
  219. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/forms/validators/display_subscription.py +0 -0
  220. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/forms/validators/network_type_validators.py +0 -0
  221. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/forms/validators/product_id.py +0 -0
  222. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/__init__.py +0 -0
  223. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/autoregistration.py +0 -0
  224. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/extensions/__init__.py +0 -0
  225. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/extensions/model_cache.py +0 -0
  226. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/extensions/stats.py +0 -0
  227. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/loaders/__init__.py +0 -0
  228. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/loaders/subscriptions.py +0 -0
  229. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/mutations/customer_description.py +0 -0
  230. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/mutations/start_process.py +0 -0
  231. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/pagination.py +0 -0
  232. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/__init__.py +0 -0
  233. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/customer.py +0 -0
  234. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/helpers.py +0 -0
  235. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/process.py +0 -0
  236. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/product.py +0 -0
  237. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/product_block.py +0 -0
  238. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/resource_type.py +0 -0
  239. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/scheduled_tasks.py +0 -0
  240. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/settings.py +0 -0
  241. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/subscription.py +0 -0
  242. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/version.py +0 -0
  243. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/resolvers/workflow.py +0 -0
  244. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schema.py +0 -0
  245. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/__init__.py +0 -0
  246. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/customer.py +0 -0
  247. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/customer_description.py +0 -0
  248. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/errors.py +0 -0
  249. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/fixed_input.py +0 -0
  250. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/helpers.py +0 -0
  251. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/process.py +0 -0
  252. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/product.py +0 -0
  253. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/product_block.py +0 -0
  254. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/resource_type.py +0 -0
  255. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/scheduled_task.py +0 -0
  256. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/settings.py +0 -0
  257. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
  258. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/subscription.py +0 -0
  259. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/version.py +0 -0
  260. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/schemas/workflow.py +0 -0
  261. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/types.py +0 -0
  262. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/utils/__init__.py +0 -0
  263. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
  264. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
  265. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
  266. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
  267. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
  268. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
  269. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/utils/override_class.py +0 -0
  270. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
  271. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/metrics/__init__.py +0 -0
  272. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/metrics/engine.py +0 -0
  273. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/metrics/init.py +0 -0
  274. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/metrics/processes.py +0 -0
  275. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/metrics/subscriptions.py +0 -0
  276. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/README +0 -0
  277. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/__init__.py +0 -0
  278. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/alembic.ini +0 -0
  279. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/env.py +0 -0
  280. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/script.py.mako +0 -0
  281. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
  282. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/templates/env.py.j2 +0 -0
  283. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
  284. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
  285. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
  286. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
  287. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
  288. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
  289. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
  290. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
  291. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
  292. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
  293. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
  294. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
  295. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
  296. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
  297. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
  298. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
  299. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
  300. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
  301. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
  302. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
  303. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
  304. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
  305. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +0 -0
  306. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
  307. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
  308. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
  309. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +0 -0
  310. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-07-01_93fc5834c7e5_changed_timestamping_fields_in_process_steps.py +0 -0
  311. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-07-04_4b58e336d1bf_deprecating_workflow_target_in_.py +0 -0
  312. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/migrations/versions/schema/2025-07-28_850dccac3b02_update_description_of_resume_workflows_.py +0 -0
  313. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/py.typed +0 -0
  314. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schedules/__init__.py +0 -0
  315. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schedules/resume_workflows.py +0 -0
  316. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schedules/scheduler.py +0 -0
  317. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schedules/scheduling.py +0 -0
  318. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schedules/task_vacuum.py +0 -0
  319. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schedules/validate_products.py +0 -0
  320. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schedules/validate_subscriptions.py +0 -0
  321. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/__init__.py +0 -0
  322. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/base.py +0 -0
  323. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/engine_settings.py +0 -0
  324. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/fixed_input.py +0 -0
  325. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/problem_detail.py +0 -0
  326. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/process.py +0 -0
  327. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/product.py +0 -0
  328. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/product_block.py +0 -0
  329. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/resource_type.py +0 -0
  330. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/subscription.py +0 -0
  331. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/schemas/subscription_descriptions.py +0 -0
  332. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/__init__.py +0 -0
  333. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/search/docs/index.md +0 -0
  334. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/security.py +0 -0
  335. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/__init__.py +0 -0
  336. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/executors/__init__.py +0 -0
  337. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/executors/celery.py +0 -0
  338. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/executors/threadpool.py +0 -0
  339. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/fixed_inputs.py +0 -0
  340. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/input_state.py +0 -0
  341. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/process_broadcast_thread.py +0 -0
  342. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/products.py +0 -0
  343. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/resource_types.py +0 -0
  344. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/settings.py +0 -0
  345. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/settings_env_variables.py +0 -0
  346. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/subscription_relations.py +0 -0
  347. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/subscriptions.py +0 -0
  348. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/tasks.py +0 -0
  349. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/translations.py +0 -0
  350. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/services/workflows.py +0 -0
  351. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/targets.py +0 -0
  352. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/types.py +0 -0
  353. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/__init__.py +0 -0
  354. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/auth.py +0 -0
  355. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/crypt.py +0 -0
  356. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/datetime.py +0 -0
  357. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/deprecation_logger.py +0 -0
  358. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/docs.py +0 -0
  359. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/enrich_process.py +0 -0
  360. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/errors.py +0 -0
  361. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/expose_settings.py +0 -0
  362. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/fixed_inputs.py +0 -0
  363. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/functional.py +0 -0
  364. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/get_subscription_dict.py +0 -0
  365. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/get_updated_properties.py +0 -0
  366. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/helpers.py +0 -0
  367. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/json.py +0 -0
  368. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/redis.py +0 -0
  369. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/redis_client.py +0 -0
  370. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/search_query.py +0 -0
  371. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/strings.py +0 -0
  372. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/utils/validate_data_version.py +0 -0
  373. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/version.py +0 -0
  374. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/websocket/__init__.py +0 -0
  375. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
  376. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
  377. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/websocket/websocket_manager.py +0 -0
  378. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflow.py +0 -0
  379. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/__init__.py +0 -0
  380. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/modify_note.py +0 -0
  381. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/removed_workflow.py +0 -0
  382. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/tasks/__init__.py +0 -0
  383. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
  384. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
  385. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/tasks/validate_product_type.py +0 -0
  386. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/tasks/validate_products.py +0 -0
  387. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/orchestrator/workflows/translations/en-GB.json +0 -0
  388. {orchestrator_core-4.5.1a1 → orchestrator_core-4.5.2}/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.1a1
3
+ Version: 4.5.2
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
@@ -36,20 +36,20 @@ Requires-Dist: apscheduler>=3.11.0
36
36
  Requires-Dist: click==8.*
37
37
  Requires-Dist: deepmerge==2.0
38
38
  Requires-Dist: deprecated>=1.2.18
39
- Requires-Dist: fastapi~=0.115.2
39
+ Requires-Dist: fastapi~=0.115.14
40
40
  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.0
44
+ Requires-Dist: nwa-stdlib~=1.9.2
45
45
  Requires-Dist: oauth2-lib>=2.4.1
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
49
49
  Requires-Dist: psycopg2-binary==2.9.10
50
- Requires-Dist: pydantic-forms>=1.4.0,<=2.1.0
50
+ Requires-Dist: pydantic-forms>=1.4.0
51
51
  Requires-Dist: pydantic-settings~=2.9.1
52
- Requires-Dist: pydantic[email]~=2.11.0
52
+ Requires-Dist: pydantic[email]~=2.11.7
53
53
  Requires-Dist: python-dateutil==2.8.2
54
54
  Requires-Dist: python-rapidjson>=1.18,<1.21
55
55
  Requires-Dist: pytz==2025.2
@@ -58,20 +58,22 @@ Requires-Dist: semver==3.0.4
58
58
  Requires-Dist: sentry-sdk[fastapi]~=2.29.1
59
59
  Requires-Dist: sqlalchemy==2.0.41
60
60
  Requires-Dist: sqlalchemy-utils==0.41.2
61
- Requires-Dist: strawberry-graphql>=0.246.2
61
+ Requires-Dist: strawberry-graphql>=0.281.0
62
62
  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"
67
+ Requires-Dist: ag-ui-protocol>=0.1.8 ; extra == "agent"
68
+ Requires-Dist: litellm>=1.75.7 ; extra == "agent"
66
69
  Requires-Dist: celery~=5.5.1 ; extra == "celery"
67
- Requires-Dist: pydantic-ai-slim ==0.7.0 ; extra == "llm"
68
- Requires-Dist: ag-ui-protocol>=0.1.8 ; extra == "llm"
69
- Requires-Dist: litellm>=1.75.7 ; extra == "llm"
70
+ Requires-Dist: litellm>=1.75.7 ; extra == "search"
70
71
  Project-URL: Documentation, https://workfloworchestrator.org/orchestrator-core
71
72
  Project-URL: Homepage, https://workfloworchestrator.org/orchestrator-core
72
73
  Project-URL: Source, https://github.com/workfloworchestrator/orchestrator-core
74
+ Provides-Extra: agent
73
75
  Provides-Extra: celery
74
- Provides-Extra: llm
76
+ Provides-Extra: search
75
77
 
76
78
  # Orchestrator-Core
77
79
 
@@ -79,7 +81,7 @@ Provides-Extra: llm
79
81
  [![codecov](https://codecov.io/gh/workfloworchestrator/orchestrator-core/branch/main/graph/badge.svg?token=5ANQFI2DHS)](https://codecov.io/gh/workfloworchestrator/orchestrator-core)
80
82
  [![pypi_version](https://img.shields.io/pypi/v/orchestrator-core?color=%2334D058&label=pypi%20package)](https://pypi.org/project/orchestrator-core)
81
83
  [![Supported python versions](https://img.shields.io/pypi/pyversions/orchestrator-core.svg?color=%2334D058)](https://pypi.org/project/orchestrator-core)
82
- ![Discord](https://img.shields.io/discord/1295834294270558280?style=flat&logo=discord&label=discord&link=https%3A%2F%2Fdiscord.gg%2FKNgF6gE8)
84
+ ![Discord](https://img.shields.io/discord/1295834294270558280?style=flat&logo=discord&label=discord&link=https%3A%2F%2Fdiscord.gg%fQkQn5ajFR)
83
85
 
84
86
  <p style="text-align: center"><em>Production ready Orchestration Framework to manage product lifecycle and workflows. Easy to use, built on top of FastAPI and Pydantic</em></p>
85
87
 
@@ -4,7 +4,7 @@
4
4
  [![codecov](https://codecov.io/gh/workfloworchestrator/orchestrator-core/branch/main/graph/badge.svg?token=5ANQFI2DHS)](https://codecov.io/gh/workfloworchestrator/orchestrator-core)
5
5
  [![pypi_version](https://img.shields.io/pypi/v/orchestrator-core?color=%2334D058&label=pypi%20package)](https://pypi.org/project/orchestrator-core)
6
6
  [![Supported python versions](https://img.shields.io/pypi/pyversions/orchestrator-core.svg?color=%2334D058)](https://pypi.org/project/orchestrator-core)
7
- ![Discord](https://img.shields.io/discord/1295834294270558280?style=flat&logo=discord&label=discord&link=https%3A%2F%2Fdiscord.gg%2FKNgF6gE8)
7
+ ![Discord](https://img.shields.io/discord/1295834294270558280?style=flat&logo=discord&label=discord&link=https%3A%2F%2Fdiscord.gg%fQkQn5ajFR)
8
8
 
9
9
  <p style="text-align: center"><em>Production ready Orchestration Framework to manage product lifecycle and workflows. Easy to use, built on top of FastAPI and Pydantic</em></p>
10
10
 
@@ -13,7 +13,7 @@
13
13
 
14
14
  """This is the orchestrator workflow engine."""
15
15
 
16
- __version__ = "4.5.1a1"
16
+ __version__ = "4.5.2"
17
17
 
18
18
 
19
19
  from structlog import get_logger
@@ -25,18 +25,9 @@ logger.info("Starting the orchestrator", version=__version__)
25
25
  from orchestrator.llm_settings import llm_settings
26
26
  from orchestrator.settings import app_settings
27
27
 
28
- if llm_settings.LLM_ENABLED:
29
- try:
30
- from importlib import import_module
28
+ if llm_settings.SEARCH_ENABLED or llm_settings.AGENT_ENABLED:
31
29
 
32
- import_module("pydantic_ai")
33
- from orchestrator.agentic_app import AgenticOrchestratorCore as OrchestratorCore
34
-
35
- except ImportError:
36
- logger.error(
37
- "Unable to import 'pydantic_ai' module, please install the orchestrator with llm dependencies. `pip install orchestrator-core[llm]",
38
- )
39
- exit(1)
30
+ from orchestrator.agentic_app import LLMOrchestratorCore as OrchestratorCore
40
31
  else:
41
32
  from orchestrator.app import OrchestratorCore # type: ignore[assignment]
42
33
 
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env python3
2
+ """The main application module.
3
+
4
+ This module contains the main `LLMOrchestratorCore` class for the `FastAPI` backend and
5
+ provides the ability to run the CLI with LLM features (search and/or agent).
6
+ """
7
+ # Copyright 2019-2025 SURF
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ from typing import TYPE_CHECKING, Any
20
+
21
+ import typer
22
+ from structlog import get_logger
23
+
24
+ from orchestrator.app import OrchestratorCore
25
+ from orchestrator.cli.main import app as cli_app
26
+ from orchestrator.llm_settings import LLMSettings, llm_settings
27
+
28
+ if TYPE_CHECKING:
29
+ from pydantic_ai.models.openai import OpenAIModel
30
+ from pydantic_ai.toolsets import FunctionToolset
31
+
32
+ logger = get_logger(__name__)
33
+
34
+
35
+ class LLMOrchestratorCore(OrchestratorCore):
36
+ def __init__(
37
+ self,
38
+ *args: Any,
39
+ llm_settings: LLMSettings = llm_settings,
40
+ agent_model: "OpenAIModel | str | None" = None,
41
+ agent_tools: "list[FunctionToolset] | None" = None,
42
+ **kwargs: Any,
43
+ ) -> None:
44
+ """Initialize the `LLMOrchestratorCore` class.
45
+
46
+ 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.
48
+
49
+ Args:
50
+ *args: All the normal arguments passed to the `OrchestratorCore` class.
51
+ llm_settings: A class of settings for the LLM
52
+ 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
+ **kwargs: Additional arguments passed to the `OrchestratorCore` class.
55
+
56
+ Returns:
57
+ None
58
+ """
59
+ self.llm_settings = llm_settings
60
+ self.agent_model = agent_model or llm_settings.AGENT_MODEL
61
+ self.agent_tools = agent_tools
62
+
63
+ super().__init__(*args, **kwargs)
64
+
65
+ # Run search migration if search or agent is enabled
66
+ if self.llm_settings.SEARCH_ENABLED or self.llm_settings.AGENT_ENABLED:
67
+ logger.info("Running search migration")
68
+ try:
69
+ from orchestrator.db import db
70
+ from orchestrator.search.llm_migration import run_migration
71
+
72
+ with db.engine.begin() as connection:
73
+ run_migration(connection)
74
+ except ImportError as e:
75
+ logger.error(
76
+ "Unable to run search migration. Please install search dependencies: "
77
+ "`pip install orchestrator-core[search]`",
78
+ error=str(e),
79
+ )
80
+ raise
81
+
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
+
99
+ main_typer_app = typer.Typer()
100
+ main_typer_app.add_typer(cli_app, name="orchestrator", help="The orchestrator CLI commands")
101
+
102
+ if __name__ == "__main__":
103
+ main_typer_app()
@@ -76,20 +76,22 @@ api_router.include_router(user.router, prefix="/user", tags=["Core", "User"], de
76
76
  api_router.include_router(
77
77
  settings.router, prefix="/settings", tags=["Core", "Settings"], dependencies=[Depends(authorize)]
78
78
  )
79
- api_router.include_router(settings.ws_router, prefix="/settings", tags=["Core", "Settings"])
79
+ api_router.include_router(
80
+ settings.ws_router, prefix="/settings", tags=["Core", "Settings"]
81
+ ) # Auth on the websocket is handled in the Websocket Manager
80
82
  api_router.include_router(health.router, prefix="/health", tags=["Core"])
81
83
  api_router.include_router(
82
84
  translations.router,
83
85
  prefix="/translations",
84
86
  tags=["Core", "Translations"],
85
87
  )
86
- api_router.include_router(ws.router, prefix="/ws", tags=["Core", "Events"])
88
+ api_router.include_router(
89
+ ws.router, prefix="/ws", tags=["Core", "Events"]
90
+ ) # Auth on the websocket is handled in the Websocket Manager
87
91
 
88
- if llm_settings.LLM_ENABLED:
92
+ if llm_settings.SEARCH_ENABLED:
89
93
  from orchestrator.api.api_v1.endpoints import search
90
94
 
91
95
  api_router.include_router(
92
- search.router,
93
- prefix="/search",
94
- tags=["Core", "Search"],
96
+ search.router, prefix="/search", tags=["Core", "Search"], dependencies=[Depends(authorize)]
95
97
  )
@@ -244,6 +244,8 @@ def continue_awaiting_process_endpoint(
244
244
  continue_awaiting_process(process, token=token, input_data=json_data, broadcast_func=broadcast_func)
245
245
  except AssertionError as e:
246
246
  raise_status(HTTPStatus.NOT_FOUND, str(e))
247
+ except ValueError as e:
248
+ raise_status(HTTPStatus.BAD_REQUEST, str(e))
247
249
 
248
250
 
249
251
  @router.post(
@@ -1,3 +1,16 @@
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
+
1
14
  from typing import Any, Literal, overload
2
15
 
3
16
  from fastapi import APIRouter, HTTPException, Query, status
@@ -11,6 +24,7 @@ from orchestrator.db import (
11
24
  db,
12
25
  )
13
26
  from orchestrator.domain.base import SubscriptionModel
27
+ from orchestrator.domain.context_cache import cache_subscription_models
14
28
  from orchestrator.schemas.search import (
15
29
  PageInfoSchema,
16
30
  PathsResponse,
@@ -179,17 +193,22 @@ async def search_subscriptions(
179
193
  page_info = PageInfoSchema(has_next_page=has_next_page, next_page_cursor=next_page_cursor)
180
194
 
181
195
  search_info_map = {res.entity_id: res for res in search_response.results}
182
- results_data = []
183
- for sub_id, search_info in search_info_map.items():
184
- subscription_model = SubscriptionModel.from_subscription(sub_id)
185
- sub_data = subscription_model.model_dump(exclude_unset=False)
186
- search_result_item = SubscriptionSearchResult(
187
- subscription=format_special_types(sub_data),
196
+
197
+ with cache_subscription_models():
198
+ subscriptions_data = {
199
+ sub_id: SubscriptionModel.from_subscription(sub_id).model_dump(exclude_unset=False)
200
+ for sub_id in search_info_map
201
+ }
202
+
203
+ results_data = [
204
+ SubscriptionSearchResult(
205
+ subscription=format_special_types(subscriptions_data[sub_id]),
188
206
  score=search_info.score,
189
207
  perfect_match=search_info.perfect_match,
190
208
  matching_field=search_info.matching_field,
191
209
  )
192
- results_data.append(search_result_item)
210
+ for sub_id, search_info in search_info_map.items()
211
+ ]
193
212
 
194
213
  return SearchResultsSchema(data=results_data, page_info=page_info, search_metadata=search_response.metadata)
195
214
 
@@ -25,8 +25,8 @@ app.add_typer(scheduler.app, name="scheduler", help="Access all the scheduler fu
25
25
  app.add_typer(database.app, name="db", help="Interact with the application database")
26
26
  app.add_typer(generate.app, name="generate", help="Generate products, workflows and other artifacts")
27
27
 
28
- if llm_settings.LLM_ENABLED:
29
- from orchestrator.cli import index_llm, resize_embedding, search_explore, speedtest
28
+ if llm_settings.SEARCH_ENABLED:
29
+ from orchestrator.cli.search import index_llm, resize_embedding, search_explore, speedtest
30
30
 
31
31
  app.add_typer(index_llm.app, name="index", help="(Re-)Index the search table.")
32
32
  app.add_typer(search_explore.app, name="search", help="Try out different search types.")
@@ -0,0 +1,32 @@
1
+ # Copyright 2019-2020 SURF.
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 typer
15
+
16
+ from orchestrator.cli.search import index_llm, resize_embedding, search_explore, speedtest
17
+
18
+
19
+ def register_commands(app: typer.Typer) -> None:
20
+ """Register all LLM/search related commands to the main app."""
21
+ app.add_typer(index_llm.app, name="index", help="(Re-)Index the search table.")
22
+ app.add_typer(search_explore.app, name="search", help="Try out different search types.")
23
+ app.add_typer(
24
+ resize_embedding.app,
25
+ name="embedding",
26
+ help="Resize the vector dimension of the embedding column in the search table.",
27
+ )
28
+ app.add_typer(
29
+ speedtest.app,
30
+ name="speedtest",
31
+ help="Search performance testing and analysis.",
32
+ )
@@ -371,6 +371,22 @@ class Populator:
371
371
  self.log.info("Started modify workflow")
372
372
  return self._start_workflow(workflow_name, subscription_id=subscription_id, **kwargs)
373
373
 
374
+ def start_reconcile_workflow(self, workflow_name: str, subscription_id: UUIDstr | UUID, **kwargs: Any) -> UUIDstr:
375
+ """Start a reconcile workflow for the provided name and subscription_id.
376
+
377
+ Args:
378
+ workflow_name: workflow name
379
+ subscription_id: uuid of the subscription you want to modify
380
+ kwargs: values to be used as form input
381
+
382
+ Returns: the process_id of the workflow process
383
+
384
+ """
385
+ subscription_id = str(subscription_id)
386
+ self.log = self.log.bind(subscription_id=subscription_id)
387
+ self.log.info("Started reconcile workflow")
388
+ return self._start_workflow(workflow_name, subscription_id=subscription_id, **kwargs)
389
+
374
390
  def start_verify_workflow(self, workflow_name: str, subscription_id: UUIDstr | UUID) -> UUIDstr:
375
391
  subscription_id = str(subscription_id)
376
392
  self.log = self.log.bind(subscription_id=subscription_id)
@@ -614,9 +614,7 @@ class ProductBlockModel(DomainModel):
614
614
  product_blocks_in_model = cls._get_depends_on_product_block_types()
615
615
  product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
616
616
 
617
- product_blocks_in_model = set(
618
- flatten(map(attrgetter("__names__"), product_blocks_types_in_model))
619
- ) # type: ignore
617
+ product_blocks_in_model = set(flatten(map(attrgetter("__names__"), product_blocks_types_in_model))) # type: ignore
620
618
 
621
619
  missing_product_blocks_in_db = product_blocks_in_model - product_blocks_in_db # type: ignore
622
620
  missing_product_blocks_in_model = product_blocks_in_db - product_blocks_in_model # type: ignore
@@ -1084,9 +1082,7 @@ class SubscriptionModel(DomainModel):
1084
1082
  product_blocks_in_model = cls._get_depends_on_product_block_types()
1085
1083
  product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
1086
1084
 
1087
- product_blocks_in_model = set(
1088
- flatten(map(attrgetter("__names__"), product_blocks_types_in_model))
1089
- ) # type: ignore
1085
+ product_blocks_in_model = set(flatten(map(attrgetter("__names__"), product_blocks_types_in_model))) # type: ignore
1090
1086
 
1091
1087
  missing_product_blocks_in_db = product_blocks_in_model - product_blocks_in_db # type: ignore
1092
1088
  missing_product_blocks_in_model = product_blocks_in_db - product_blocks_in_model # type: ignore
@@ -1294,7 +1290,6 @@ class SubscriptionModel(DomainModel):
1294
1290
  # Some common functions shared by from_other_product and from_subscription
1295
1291
  @classmethod
1296
1292
  def _get_subscription(cls: type[S], subscription_id: UUID | UUIDstr) -> SubscriptionTable | None:
1297
-
1298
1293
  if not isinstance(subscription_id, UUID | UUIDstr):
1299
1294
  raise TypeError(f"subscription_id is of type {type(subscription_id)} instead of UUID | UUIDstr")
1300
1295
 
@@ -16,11 +16,16 @@ from typing import TYPE_CHECKING, TypeVar
16
16
  import strawberry
17
17
  import structlog
18
18
 
19
+ from orchestrator.settings import LifecycleValidationMode, app_settings
19
20
  from orchestrator.types import SubscriptionLifecycle
20
21
  from pydantic_forms.types import strEnum
21
22
 
22
23
  if TYPE_CHECKING:
23
- from orchestrator.domain.base import DomainModel
24
+ from orchestrator.domain.base import DomainModel, SubscriptionModel
25
+ else:
26
+ SubscriptionModel = None
27
+ DomainModel = None
28
+ T = TypeVar("T", bound=SubscriptionModel)
24
29
 
25
30
  logger = structlog.get_logger(__name__)
26
31
 
@@ -71,9 +76,21 @@ def validate_lifecycle_status(
71
76
  )
72
77
 
73
78
 
74
- if TYPE_CHECKING:
75
- from orchestrator.domain.base import DomainModel, SubscriptionModel
76
- else:
77
- SubscriptionModel = None
78
- DomainModel = None
79
- T = TypeVar("T", bound=SubscriptionModel)
79
+ def validate_subscription_model_product_type(
80
+ subscription: SubscriptionModel,
81
+ validation_mode: LifecycleValidationMode = app_settings.LIFECYCLE_VALIDATION_MODE,
82
+ ) -> None:
83
+ """Validate that a subscription model has been instantiated with the correct product type class for its lifecycle status."""
84
+
85
+ actual_class = subscription.__class__
86
+ expected_class = lookup_specialized_type(actual_class, subscription.status)
87
+
88
+ if actual_class != expected_class:
89
+ msg = f"Subscription of type {actual_class} should use {expected_class} for lifecycle status '{subscription.status}'"
90
+ if validation_mode == LifecycleValidationMode.STRICT:
91
+ logger.error(msg)
92
+ raise ValueError(msg)
93
+ if validation_mode == LifecycleValidationMode.LOOSE:
94
+ logger.warning(msg)
95
+ elif validation_mode == LifecycleValidationMode.IGNORED:
96
+ pass
@@ -18,7 +18,10 @@ logger = get_logger(__name__)
18
18
 
19
19
 
20
20
  class LLMSettings(BaseSettings):
21
- LLM_ENABLED: bool = False # Default to false
21
+ # Feature flags for LLM functionality
22
+ SEARCH_ENABLED: bool = False # Enable search/indexing with embeddings
23
+ AGENT_ENABLED: bool = False # Enable agentic functionality
24
+
22
25
  # Pydantic-ai Agent settings
23
26
  AGENT_MODEL: str = "gpt-4o-mini" # See pydantic-ai docs for supported models.
24
27
  AGENT_MODEL_VERSION: str = "2025-01-01-preview"
@@ -30,16 +33,19 @@ class LLMSettings(BaseSettings):
30
33
  0.1, description="Safety margin as a percentage (e.g., 0.1 for 10%) for token budgeting.", ge=0, le=1
31
34
  )
32
35
 
33
- # The following settings are only needed for local models.
36
+ # The following settings are only needed for local models or system constraints.
34
37
  # By default, they are set conservative assuming a small model like All-MiniLM-L6-V2.
35
38
  OPENAI_BASE_URL: str | None = None
36
39
  EMBEDDING_FALLBACK_MAX_TOKENS: int | None = 512
37
- EMBEDDING_MAX_BATCH_SIZE: int | None = 32
40
+ EMBEDDING_MAX_BATCH_SIZE: int | None = None
38
41
 
39
42
  # General LiteLLM settings
40
43
  LLM_MAX_RETRIES: int = 3
41
44
  LLM_TIMEOUT: int = 30
42
45
 
46
+ # Toggle creation of extensions
47
+ LLM_FORCE_EXTENTION_MIGRATION: bool = False
48
+
43
49
  @field_validator("EMBEDDING_MODEL")
44
50
  def validate_embedding_model_format(cls, v: str) -> str:
45
51
  """Validate that embedding model is in 'vendor/model' format."""
@@ -44,5 +44,6 @@ LOGGER_OVERRIDES = dict(
44
44
  logger_config("orchestrator.graphql.autoregistration"),
45
45
  logger_config("sqlalchemy.engine", default_level="WARNING"),
46
46
  logger_config("uvicorn"),
47
+ logger_config("LiteLLM", default_level="WARNING"),
47
48
  ]
48
49
  )
@@ -155,7 +155,7 @@ def create_workflow(conn: sa.engine.Connection, workflow: dict) -> None:
155
155
  conn: DB connection as available in migration main file.
156
156
  workflow: Dict with data for a new workflow.
157
157
  name: Name of the workflow.
158
- target: Target of the workflow ("CREATE", "MODIFY", "TERMINATE", "SYSTEM")
158
+ target: Target of the workflow ("CREATE", "MODIFY", "RECONCILE", "TERMINATE", "SYSTEM")
159
159
  description: Description of the workflow.
160
160
  product_type: Product type to add the workflow to.
161
161
 
@@ -166,12 +166,16 @@ def create_workflow(conn: sa.engine.Connection, workflow: dict) -> None:
166
166
  "is_task": False,
167
167
  "description": "workflow description",
168
168
  "product_type": "product_type",
169
+ "product_tag": "product_tag",
169
170
  }
170
171
  >>> create_workflow(conn, workflow)
171
172
  """
172
173
  if not workflow.get("is_task", False):
173
174
  workflow["is_task"] = False
174
175
 
176
+ if not workflow.get("product_tag"):
177
+ workflow["product_tag"] = None
178
+
175
179
  if has_table_column(table_name="workflows", column_name="is_task", conn=conn):
176
180
  query = """
177
181
  WITH new_workflow AS (
@@ -186,6 +190,7 @@ def create_workflow(conn: sa.engine.Connection, workflow: dict) -> None:
186
190
  FROM products AS p
187
191
  CROSS JOIN new_workflow AS nw
188
192
  WHERE p.product_type = :product_type
193
+ AND (:product_tag IS NULL OR p.tag = :product_tag)
189
194
  ON CONFLICT DO NOTHING
190
195
  """
191
196
  else:
@@ -203,6 +208,7 @@ def create_workflow(conn: sa.engine.Connection, workflow: dict) -> None:
203
208
  FROM products AS p
204
209
  CROSS JOIN new_workflow AS nw
205
210
  WHERE p.product_type = :product_type
211
+ AND (:product_tag IS NULL OR p.tag = :product_tag)
206
212
  ON CONFLICT DO NOTHING
207
213
  """
208
214
 
@@ -1,3 +1,16 @@
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
+
1
14
  from datetime import datetime
2
15
  from typing import Any, Generic, TypeVar
3
16
  from uuid import UUID
@@ -60,6 +60,7 @@ class SubscriptionWorkflowListsSchema(OrchestratorBaseModel):
60
60
  modify: list[WorkflowListItemSchema]
61
61
  terminate: list[WorkflowListItemSchema]
62
62
  system: list[WorkflowListItemSchema]
63
+ reconcile: list[WorkflowListItemSchema]
63
64
  validate_: list[WorkflowListItemSchema] = Field(default_factory=list, alias="validate")
64
65
 
65
66
 
@@ -0,0 +1,21 @@
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
+ # This module requires: pydantic-ai==0.7.0, ag-ui-protocol>=0.1.8
15
+
16
+
17
+ from orchestrator.search.agent.agent import build_agent_router
18
+
19
+ __all__ = [
20
+ "build_agent_router",
21
+ ]
@@ -0,0 +1,62 @@
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 typing import Any
15
+
16
+ import structlog
17
+ from fastapi import APIRouter, HTTPException, Request
18
+ from pydantic_ai.ag_ui import StateDeps, handle_ag_ui_request
19
+ from pydantic_ai.agent import Agent
20
+ from pydantic_ai.models.openai import OpenAIModel
21
+ from pydantic_ai.settings import ModelSettings
22
+ from pydantic_ai.toolsets import FunctionToolset
23
+ from starlette.responses import Response
24
+
25
+ from orchestrator.search.agent.prompts import get_base_instructions, get_dynamic_instructions
26
+ from orchestrator.search.agent.state import SearchState
27
+ from orchestrator.search.agent.tools import search_toolset
28
+
29
+ logger = structlog.get_logger(__name__)
30
+
31
+
32
+ def build_agent_router(model: str | OpenAIModel, toolsets: list[FunctionToolset[Any]] | None = None) -> APIRouter:
33
+ router = APIRouter()
34
+
35
+ try:
36
+ toolsets = toolsets + [search_toolset] if toolsets else [search_toolset]
37
+
38
+ agent = Agent(
39
+ model=model,
40
+ deps_type=StateDeps[SearchState],
41
+ model_settings=ModelSettings(
42
+ parallel_tool_calls=False,
43
+ ), # https://github.com/pydantic/pydantic-ai/issues/562
44
+ toolsets=toolsets,
45
+ )
46
+ agent.instructions(get_base_instructions)
47
+ agent.instructions(get_dynamic_instructions)
48
+
49
+ @router.post("/")
50
+ async def agent_endpoint(request: Request) -> Response:
51
+ return await handle_ag_ui_request(agent, request, deps=StateDeps(SearchState()))
52
+
53
+ return router
54
+ except Exception as e:
55
+ logger.error("Agent init failed; serving disabled stub.", error=str(e))
56
+ error_msg = f"Agent disabled: {str(e)}"
57
+
58
+ @router.api_route("/{path:path}", methods=["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"])
59
+ async def _disabled(path: str) -> None:
60
+ raise HTTPException(status_code=503, detail=error_msg)
61
+
62
+ return router