orchestrator-core 4.4.1__tar.gz → 4.5.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.
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/PKG-INFO +15 -8
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/README.md +1 -1
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/__init__.py +17 -2
- orchestrator_core-4.5.0/orchestrator/agentic_app.py +103 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/api.py +14 -2
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/processes.py +2 -0
- orchestrator_core-4.5.0/orchestrator/api/api_v1/endpoints/search.py +296 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/app.py +32 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/main.py +22 -1
- orchestrator_core-4.5.0/orchestrator/cli/search/__init__.py +32 -0
- orchestrator_core-4.5.0/orchestrator/cli/search/index_llm.py +73 -0
- orchestrator_core-4.5.0/orchestrator/cli/search/resize_embedding.py +135 -0
- orchestrator_core-4.5.0/orchestrator/cli/search/search_explore.py +208 -0
- orchestrator_core-4.5.0/orchestrator/cli/search/speedtest.py +151 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/models.py +37 -1
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/devtools/populator.py +16 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/domain/base.py +2 -7
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/domain/lifecycle.py +24 -7
- orchestrator_core-4.5.0/orchestrator/llm_settings.py +57 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/log_config.py +1 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/helpers.py +7 -1
- orchestrator_core-4.5.0/orchestrator/schemas/search.py +130 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/workflow.py +1 -0
- orchestrator_core-4.5.0/orchestrator/search/__init__.py +12 -0
- orchestrator_core-4.5.0/orchestrator/search/agent/__init__.py +21 -0
- orchestrator_core-4.5.0/orchestrator/search/agent/agent.py +62 -0
- orchestrator_core-4.5.0/orchestrator/search/agent/prompts.py +100 -0
- orchestrator_core-4.5.0/orchestrator/search/agent/state.py +21 -0
- orchestrator_core-4.5.0/orchestrator/search/agent/tools.py +258 -0
- orchestrator_core-4.5.0/orchestrator/search/core/__init__.py +12 -0
- orchestrator_core-4.5.0/orchestrator/search/core/embedding.py +73 -0
- orchestrator_core-4.5.0/orchestrator/search/core/exceptions.py +36 -0
- orchestrator_core-4.5.0/orchestrator/search/core/types.py +296 -0
- orchestrator_core-4.5.0/orchestrator/search/core/validators.py +40 -0
- orchestrator_core-4.5.0/orchestrator/search/docs/index.md +37 -0
- orchestrator_core-4.5.0/orchestrator/search/docs/running_local_text_embedding_inference.md +46 -0
- orchestrator_core-4.5.0/orchestrator/search/filters/__init__.py +40 -0
- orchestrator_core-4.5.0/orchestrator/search/filters/base.py +295 -0
- orchestrator_core-4.5.0/orchestrator/search/filters/date_filters.py +88 -0
- orchestrator_core-4.5.0/orchestrator/search/filters/definitions.py +107 -0
- orchestrator_core-4.5.0/orchestrator/search/filters/ltree_filters.py +56 -0
- orchestrator_core-4.5.0/orchestrator/search/filters/numeric_filter.py +73 -0
- orchestrator_core-4.5.0/orchestrator/search/indexing/__init__.py +16 -0
- orchestrator_core-4.5.0/orchestrator/search/indexing/indexer.py +334 -0
- orchestrator_core-4.5.0/orchestrator/search/indexing/registry.py +101 -0
- orchestrator_core-4.5.0/orchestrator/search/indexing/tasks.py +69 -0
- orchestrator_core-4.5.0/orchestrator/search/indexing/traverse.py +334 -0
- orchestrator_core-4.5.0/orchestrator/search/llm_migration.py +108 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/__init__.py +16 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/builder.py +123 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/engine.py +154 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/exceptions.py +90 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/pagination.py +96 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/retrievers/__init__.py +26 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/retrievers/base.py +123 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/retrievers/fuzzy.py +94 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/retrievers/hybrid.py +277 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/retrievers/semantic.py +94 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/retrievers/structured.py +39 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/utils.py +120 -0
- orchestrator_core-4.5.0/orchestrator/search/retrieval/validation.py +152 -0
- orchestrator_core-4.5.0/orchestrator/search/schemas/__init__.py +12 -0
- orchestrator_core-4.5.0/orchestrator/search/schemas/parameters.py +129 -0
- orchestrator_core-4.5.0/orchestrator/search/schemas/results.py +77 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/processes.py +2 -1
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/settings_env_variables.py +2 -2
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/settings.py +8 -1
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/state.py +6 -1
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/steps.py +15 -1
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/tasks/validate_products.py +1 -1
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/pyproject.toml +16 -6
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/LICENSE +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/health.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/products.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/user.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/error_handling.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/models.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/database.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generate.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/README +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/enums.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/migration.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/product.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/product_block.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/settings.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/translations.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/unittest.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/validations.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/generator/workflow.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/enums.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/macros.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/product.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/helpers/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/helpers/input_helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/helpers/print_helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/migrate_domain_models.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/migrate_tasks.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/migrate_workflows.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/migration_helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/cli/scheduler.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/config/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/config/assignee.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/database.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/filters.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/process.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/product.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/product_block.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/resource_type.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/search_filters/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/subscription.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/filters/workflow.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/listeners.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/loaders.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/queries/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/queries/subscription.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/queries/subscription_instance.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/range/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/range/range.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/sorting/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/sorting/process.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/sorting/product.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/sorting/product_block.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/sorting/resource_type.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/sorting/sorting.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/sorting/subscription.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/db/sorting/workflow.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/devtools/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/devtools/scripts/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/devtools/scripts/migrate_20.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/devtools/scripts/migrate_30.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/devtools/scripts/shared.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/distlock/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/distlock/distlock_manager.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/distlock/managers/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/domain/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/domain/context_cache.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/domain/customer_description.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/domain/helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/domain/subscription_instance_transform.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/exception_handlers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/forms/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/forms/validators/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/forms/validators/customer_contact_list.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/forms/validators/customer_id.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/forms/validators/display_subscription.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/forms/validators/network_type_validators.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/forms/validators/product_id.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/autoregistration.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/extensions/model_cache.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/extensions/stats.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/loaders/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/loaders/subscriptions.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/mutations/customer_description.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/mutations/start_process.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/pagination.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/customer.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/process.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/product.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/product_block.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/resource_type.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/scheduled_tasks.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/settings.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/subscription.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/version.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/resolvers/workflow.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schema.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/customer.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/customer_description.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/errors.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/fixed_input.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/process.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/product.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/product_block.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/resource_type.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/scheduled_task.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/settings.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/subscription.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/version.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/schemas/workflow.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/types.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/utils/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/utils/override_class.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/metrics/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/metrics/engine.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/metrics/init.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/metrics/processes.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/metrics/subscriptions.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/README +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/alembic.ini +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/env.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/script.py.mako +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/templates/env.py.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-07-01_93fc5834c7e5_changed_timestamping_fields_in_process_steps.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-07-04_4b58e336d1bf_deprecating_workflow_target_in_.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/migrations/versions/schema/2025-07-28_850dccac3b02_update_description_of_resume_workflows_.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/py.typed +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schedules/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schedules/resume_workflows.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schedules/scheduler.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schedules/scheduling.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schedules/task_vacuum.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schedules/validate_products.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schedules/validate_subscriptions.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/base.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/engine_settings.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/fixed_input.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/problem_detail.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/process.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/product.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/product_block.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/resource_type.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/subscription.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/schemas/subscription_descriptions.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/security.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/executors/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/executors/celery.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/executors/threadpool.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/fixed_inputs.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/input_state.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/process_broadcast_thread.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/products.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/resource_types.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/settings.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/subscription_relations.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/subscriptions.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/tasks.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/translations.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/services/workflows.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/targets.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/types.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/auth.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/crypt.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/datetime.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/deprecation_logger.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/docs.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/enrich_process.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/errors.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/expose_settings.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/fixed_inputs.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/functional.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/get_updated_properties.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/helpers.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/json.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/redis.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/redis_client.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/search_query.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/strings.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/utils/validate_data_version.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/version.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/websocket/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/websocket/websocket_manager.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflow.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/modify_note.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/removed_workflow.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/tasks/validate_product_type.py +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/workflows/translations/en-GB.json +0 -0
- {orchestrator_core-4.4.1 → orchestrator_core-4.5.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.
|
|
3
|
+
Version: 4.5.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
|
|
@@ -36,19 +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.
|
|
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.
|
|
45
|
-
Requires-Dist: oauth2-lib
|
|
44
|
+
Requires-Dist: nwa-stdlib~=1.9.2
|
|
45
|
+
Requires-Dist: oauth2-lib>=2.4.1
|
|
46
46
|
Requires-Dist: orjson==3.10.18
|
|
47
|
+
Requires-Dist: pgvector>=0.4.1
|
|
47
48
|
Requires-Dist: prometheus-client==0.22.1
|
|
48
49
|
Requires-Dist: psycopg2-binary==2.9.10
|
|
49
|
-
Requires-Dist: pydantic-forms>=1.4.0
|
|
50
|
+
Requires-Dist: pydantic-forms>=1.4.0
|
|
50
51
|
Requires-Dist: pydantic-settings~=2.9.1
|
|
51
|
-
Requires-Dist: pydantic[email]~=2.
|
|
52
|
+
Requires-Dist: pydantic[email]~=2.11.7
|
|
52
53
|
Requires-Dist: python-dateutil==2.8.2
|
|
53
54
|
Requires-Dist: python-rapidjson>=1.18,<1.21
|
|
54
55
|
Requires-Dist: pytz==2025.2
|
|
@@ -57,16 +58,22 @@ Requires-Dist: semver==3.0.4
|
|
|
57
58
|
Requires-Dist: sentry-sdk[fastapi]~=2.29.1
|
|
58
59
|
Requires-Dist: sqlalchemy==2.0.41
|
|
59
60
|
Requires-Dist: sqlalchemy-utils==0.41.2
|
|
60
|
-
Requires-Dist: strawberry-graphql>=0.
|
|
61
|
+
Requires-Dist: strawberry-graphql>=0.281.0
|
|
61
62
|
Requires-Dist: structlog>=25.4.0
|
|
62
63
|
Requires-Dist: tabulate==0.9.0
|
|
63
64
|
Requires-Dist: typer==0.15.4
|
|
64
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"
|
|
65
69
|
Requires-Dist: celery~=5.5.1 ; extra == "celery"
|
|
70
|
+
Requires-Dist: litellm>=1.75.7 ; extra == "search"
|
|
66
71
|
Project-URL: Documentation, https://workfloworchestrator.org/orchestrator-core
|
|
67
72
|
Project-URL: Homepage, https://workfloworchestrator.org/orchestrator-core
|
|
68
73
|
Project-URL: Source, https://github.com/workfloworchestrator/orchestrator-core
|
|
74
|
+
Provides-Extra: agent
|
|
69
75
|
Provides-Extra: celery
|
|
76
|
+
Provides-Extra: search
|
|
70
77
|
|
|
71
78
|
# Orchestrator-Core
|
|
72
79
|
|
|
@@ -74,7 +81,7 @@ Provides-Extra: celery
|
|
|
74
81
|
[](https://codecov.io/gh/workfloworchestrator/orchestrator-core)
|
|
75
82
|
[](https://pypi.org/project/orchestrator-core)
|
|
76
83
|
[](https://pypi.org/project/orchestrator-core)
|
|
77
|
-

|
|
78
85
|
|
|
79
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>
|
|
80
87
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://codecov.io/gh/workfloworchestrator/orchestrator-core)
|
|
5
5
|
[](https://pypi.org/project/orchestrator-core)
|
|
6
6
|
[](https://pypi.org/project/orchestrator-core)
|
|
7
|
-

|
|
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,15 +13,30 @@
|
|
|
13
13
|
|
|
14
14
|
"""This is the orchestrator workflow engine."""
|
|
15
15
|
|
|
16
|
-
__version__ = "4.
|
|
16
|
+
__version__ = "4.5.0"
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
from structlog import get_logger
|
|
20
|
+
|
|
21
|
+
logger = get_logger(__name__)
|
|
22
|
+
|
|
23
|
+
logger.info("Starting the orchestrator", version=__version__)
|
|
24
|
+
|
|
25
|
+
from orchestrator.llm_settings import llm_settings
|
|
19
26
|
from orchestrator.settings import app_settings
|
|
27
|
+
|
|
28
|
+
if llm_settings.SEARCH_ENABLED or llm_settings.AGENT_ENABLED:
|
|
29
|
+
|
|
30
|
+
from orchestrator.agentic_app import LLMOrchestratorCore as OrchestratorCore
|
|
31
|
+
else:
|
|
32
|
+
from orchestrator.app import OrchestratorCore # type: ignore[assignment]
|
|
33
|
+
|
|
20
34
|
from orchestrator.workflow import begin, conditional, done, focussteps, inputstep, retrystep, step, steplens, workflow
|
|
21
35
|
|
|
22
36
|
__all__ = [
|
|
23
37
|
"OrchestratorCore",
|
|
24
38
|
"app_settings",
|
|
39
|
+
"llm_settings",
|
|
25
40
|
"step",
|
|
26
41
|
"inputstep",
|
|
27
42
|
"workflow",
|
|
@@ -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()
|
|
@@ -30,6 +30,7 @@ from orchestrator.api.api_v1.endpoints import (
|
|
|
30
30
|
workflows,
|
|
31
31
|
ws,
|
|
32
32
|
)
|
|
33
|
+
from orchestrator.llm_settings import llm_settings
|
|
33
34
|
from orchestrator.security import authorize
|
|
34
35
|
|
|
35
36
|
api_router = APIRouter()
|
|
@@ -75,11 +76,22 @@ api_router.include_router(user.router, prefix="/user", tags=["Core", "User"], de
|
|
|
75
76
|
api_router.include_router(
|
|
76
77
|
settings.router, prefix="/settings", tags=["Core", "Settings"], dependencies=[Depends(authorize)]
|
|
77
78
|
)
|
|
78
|
-
api_router.include_router(
|
|
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
|
|
79
82
|
api_router.include_router(health.router, prefix="/health", tags=["Core"])
|
|
80
83
|
api_router.include_router(
|
|
81
84
|
translations.router,
|
|
82
85
|
prefix="/translations",
|
|
83
86
|
tags=["Core", "Translations"],
|
|
84
87
|
)
|
|
85
|
-
api_router.include_router(
|
|
88
|
+
api_router.include_router(
|
|
89
|
+
ws.router, prefix="/ws", tags=["Core", "Events"]
|
|
90
|
+
) # Auth on the websocket is handled in the Websocket Manager
|
|
91
|
+
|
|
92
|
+
if llm_settings.SEARCH_ENABLED:
|
|
93
|
+
from orchestrator.api.api_v1.endpoints import search
|
|
94
|
+
|
|
95
|
+
api_router.include_router(
|
|
96
|
+
search.router, prefix="/search", tags=["Core", "Search"], dependencies=[Depends(authorize)]
|
|
97
|
+
)
|
{orchestrator_core-4.4.1 → orchestrator_core-4.5.0}/orchestrator/api/api_v1/endpoints/processes.py
RENAMED
|
@@ -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(
|
|
@@ -0,0 +1,296 @@
|
|
|
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, Literal, overload
|
|
15
|
+
|
|
16
|
+
from fastapi import APIRouter, HTTPException, Query, status
|
|
17
|
+
from sqlalchemy import case, select
|
|
18
|
+
from sqlalchemy.orm import selectinload
|
|
19
|
+
|
|
20
|
+
from orchestrator.db import (
|
|
21
|
+
ProcessTable,
|
|
22
|
+
ProductTable,
|
|
23
|
+
WorkflowTable,
|
|
24
|
+
db,
|
|
25
|
+
)
|
|
26
|
+
from orchestrator.domain.base import SubscriptionModel
|
|
27
|
+
from orchestrator.domain.context_cache import cache_subscription_models
|
|
28
|
+
from orchestrator.schemas.search import (
|
|
29
|
+
PageInfoSchema,
|
|
30
|
+
PathsResponse,
|
|
31
|
+
ProcessSearchResult,
|
|
32
|
+
ProcessSearchSchema,
|
|
33
|
+
ProductSearchResult,
|
|
34
|
+
ProductSearchSchema,
|
|
35
|
+
SearchResultsSchema,
|
|
36
|
+
SubscriptionSearchResult,
|
|
37
|
+
WorkflowSearchResult,
|
|
38
|
+
WorkflowSearchSchema,
|
|
39
|
+
)
|
|
40
|
+
from orchestrator.search.core.exceptions import InvalidCursorError
|
|
41
|
+
from orchestrator.search.core.types import EntityType, UIType
|
|
42
|
+
from orchestrator.search.filters.definitions import generate_definitions
|
|
43
|
+
from orchestrator.search.indexing.registry import ENTITY_CONFIG_REGISTRY
|
|
44
|
+
from orchestrator.search.retrieval import execute_search
|
|
45
|
+
from orchestrator.search.retrieval.builder import build_paths_query, create_path_autocomplete_lquery, process_path_rows
|
|
46
|
+
from orchestrator.search.retrieval.pagination import (
|
|
47
|
+
create_next_page_cursor,
|
|
48
|
+
process_pagination_cursor,
|
|
49
|
+
)
|
|
50
|
+
from orchestrator.search.retrieval.validation import is_lquery_syntactically_valid
|
|
51
|
+
from orchestrator.search.schemas.parameters import (
|
|
52
|
+
BaseSearchParameters,
|
|
53
|
+
ProcessSearchParameters,
|
|
54
|
+
ProductSearchParameters,
|
|
55
|
+
SubscriptionSearchParameters,
|
|
56
|
+
WorkflowSearchParameters,
|
|
57
|
+
)
|
|
58
|
+
from orchestrator.search.schemas.results import SearchResult, TypeDefinition
|
|
59
|
+
from orchestrator.services.subscriptions import format_special_types
|
|
60
|
+
|
|
61
|
+
router = APIRouter()
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _create_search_result_item(
|
|
65
|
+
entity: WorkflowTable | ProductTable | ProcessTable, entity_type: EntityType, search_info: SearchResult
|
|
66
|
+
) -> WorkflowSearchResult | ProductSearchResult | ProcessSearchResult | None:
|
|
67
|
+
match entity_type:
|
|
68
|
+
case EntityType.WORKFLOW:
|
|
69
|
+
workflow_data = WorkflowSearchSchema.model_validate(entity)
|
|
70
|
+
return WorkflowSearchResult(
|
|
71
|
+
workflow=workflow_data,
|
|
72
|
+
score=search_info.score,
|
|
73
|
+
perfect_match=search_info.perfect_match,
|
|
74
|
+
matching_field=search_info.matching_field,
|
|
75
|
+
)
|
|
76
|
+
case EntityType.PRODUCT:
|
|
77
|
+
product_data = ProductSearchSchema.model_validate(entity)
|
|
78
|
+
return ProductSearchResult(
|
|
79
|
+
product=product_data,
|
|
80
|
+
score=search_info.score,
|
|
81
|
+
perfect_match=search_info.perfect_match,
|
|
82
|
+
matching_field=search_info.matching_field,
|
|
83
|
+
)
|
|
84
|
+
case EntityType.PROCESS:
|
|
85
|
+
process_data = ProcessSearchSchema.model_validate(entity)
|
|
86
|
+
return ProcessSearchResult(
|
|
87
|
+
process=process_data,
|
|
88
|
+
score=search_info.score,
|
|
89
|
+
perfect_match=search_info.perfect_match,
|
|
90
|
+
matching_field=search_info.matching_field,
|
|
91
|
+
)
|
|
92
|
+
case _:
|
|
93
|
+
return None
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@overload
|
|
97
|
+
async def _perform_search_and_fetch(
|
|
98
|
+
search_params: BaseSearchParameters,
|
|
99
|
+
entity_type: Literal[EntityType.WORKFLOW],
|
|
100
|
+
eager_loads: list[Any],
|
|
101
|
+
cursor: str | None = None,
|
|
102
|
+
) -> SearchResultsSchema[WorkflowSearchResult]: ...
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
@overload
|
|
106
|
+
async def _perform_search_and_fetch(
|
|
107
|
+
search_params: BaseSearchParameters,
|
|
108
|
+
entity_type: Literal[EntityType.PRODUCT],
|
|
109
|
+
eager_loads: list[Any],
|
|
110
|
+
cursor: str | None = None,
|
|
111
|
+
) -> SearchResultsSchema[ProductSearchResult]: ...
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
@overload
|
|
115
|
+
async def _perform_search_and_fetch(
|
|
116
|
+
search_params: BaseSearchParameters,
|
|
117
|
+
entity_type: Literal[EntityType.PROCESS],
|
|
118
|
+
eager_loads: list[Any],
|
|
119
|
+
cursor: str | None = None,
|
|
120
|
+
) -> SearchResultsSchema[ProcessSearchResult]: ...
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
async def _perform_search_and_fetch(
|
|
124
|
+
search_params: BaseSearchParameters,
|
|
125
|
+
entity_type: EntityType,
|
|
126
|
+
eager_loads: list[Any],
|
|
127
|
+
cursor: str | None = None,
|
|
128
|
+
) -> SearchResultsSchema[Any]:
|
|
129
|
+
try:
|
|
130
|
+
pagination_params = await process_pagination_cursor(cursor, search_params)
|
|
131
|
+
except InvalidCursorError:
|
|
132
|
+
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid pagination cursor")
|
|
133
|
+
|
|
134
|
+
search_response = await execute_search(
|
|
135
|
+
search_params=search_params,
|
|
136
|
+
db_session=db.session,
|
|
137
|
+
pagination_params=pagination_params,
|
|
138
|
+
)
|
|
139
|
+
if not search_response.results:
|
|
140
|
+
return SearchResultsSchema(search_metadata=search_response.metadata)
|
|
141
|
+
|
|
142
|
+
next_page_cursor = create_next_page_cursor(search_response.results, pagination_params, search_params.limit)
|
|
143
|
+
has_next_page = next_page_cursor is not None
|
|
144
|
+
page_info = PageInfoSchema(has_next_page=has_next_page, next_page_cursor=next_page_cursor)
|
|
145
|
+
|
|
146
|
+
config = ENTITY_CONFIG_REGISTRY[entity_type]
|
|
147
|
+
entity_ids = [res.entity_id for res in search_response.results]
|
|
148
|
+
pk_column = getattr(config.table, config.pk_name)
|
|
149
|
+
ordering_case = case({entity_id: i for i, entity_id in enumerate(entity_ids)}, value=pk_column)
|
|
150
|
+
|
|
151
|
+
stmt = select(config.table).options(*eager_loads).filter(pk_column.in_(entity_ids)).order_by(ordering_case)
|
|
152
|
+
entities = db.session.scalars(stmt).all()
|
|
153
|
+
|
|
154
|
+
search_info_map = {res.entity_id: res for res in search_response.results}
|
|
155
|
+
data = []
|
|
156
|
+
for entity in entities:
|
|
157
|
+
entity_id = getattr(entity, config.pk_name)
|
|
158
|
+
search_info = search_info_map.get(str(entity_id))
|
|
159
|
+
if not search_info:
|
|
160
|
+
continue
|
|
161
|
+
|
|
162
|
+
search_result_item = _create_search_result_item(entity, entity_type, search_info)
|
|
163
|
+
if search_result_item:
|
|
164
|
+
data.append(search_result_item)
|
|
165
|
+
|
|
166
|
+
return SearchResultsSchema(data=data, page_info=page_info, search_metadata=search_response.metadata)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@router.post(
|
|
170
|
+
"/subscriptions",
|
|
171
|
+
response_model=SearchResultsSchema[SubscriptionSearchResult],
|
|
172
|
+
)
|
|
173
|
+
async def search_subscriptions(
|
|
174
|
+
search_params: SubscriptionSearchParameters,
|
|
175
|
+
cursor: str | None = None,
|
|
176
|
+
) -> SearchResultsSchema[SubscriptionSearchResult]:
|
|
177
|
+
try:
|
|
178
|
+
pagination_params = await process_pagination_cursor(cursor, search_params)
|
|
179
|
+
except InvalidCursorError:
|
|
180
|
+
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid pagination cursor")
|
|
181
|
+
|
|
182
|
+
search_response = await execute_search(
|
|
183
|
+
search_params=search_params,
|
|
184
|
+
db_session=db.session,
|
|
185
|
+
pagination_params=pagination_params,
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
if not search_response.results:
|
|
189
|
+
return SearchResultsSchema(search_metadata=search_response.metadata)
|
|
190
|
+
|
|
191
|
+
next_page_cursor = create_next_page_cursor(search_response.results, pagination_params, search_params.limit)
|
|
192
|
+
has_next_page = next_page_cursor is not None
|
|
193
|
+
page_info = PageInfoSchema(has_next_page=has_next_page, next_page_cursor=next_page_cursor)
|
|
194
|
+
|
|
195
|
+
search_info_map = {res.entity_id: res for res in search_response.results}
|
|
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]),
|
|
206
|
+
score=search_info.score,
|
|
207
|
+
perfect_match=search_info.perfect_match,
|
|
208
|
+
matching_field=search_info.matching_field,
|
|
209
|
+
)
|
|
210
|
+
for sub_id, search_info in search_info_map.items()
|
|
211
|
+
]
|
|
212
|
+
|
|
213
|
+
return SearchResultsSchema(data=results_data, page_info=page_info, search_metadata=search_response.metadata)
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
@router.post("/workflows", response_model=SearchResultsSchema[WorkflowSearchResult])
|
|
217
|
+
async def search_workflows(
|
|
218
|
+
search_params: WorkflowSearchParameters,
|
|
219
|
+
cursor: str | None = None,
|
|
220
|
+
) -> SearchResultsSchema[WorkflowSearchResult]:
|
|
221
|
+
return await _perform_search_and_fetch(
|
|
222
|
+
search_params=search_params,
|
|
223
|
+
entity_type=EntityType.WORKFLOW,
|
|
224
|
+
eager_loads=[selectinload(WorkflowTable.products)],
|
|
225
|
+
cursor=cursor,
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
@router.post("/products", response_model=SearchResultsSchema[ProductSearchResult])
|
|
230
|
+
async def search_products(
|
|
231
|
+
search_params: ProductSearchParameters,
|
|
232
|
+
cursor: str | None = None,
|
|
233
|
+
) -> SearchResultsSchema[ProductSearchResult]:
|
|
234
|
+
return await _perform_search_and_fetch(
|
|
235
|
+
search_params=search_params,
|
|
236
|
+
entity_type=EntityType.PRODUCT,
|
|
237
|
+
eager_loads=[
|
|
238
|
+
selectinload(ProductTable.workflows),
|
|
239
|
+
selectinload(ProductTable.fixed_inputs),
|
|
240
|
+
selectinload(ProductTable.product_blocks),
|
|
241
|
+
],
|
|
242
|
+
cursor=cursor,
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
@router.post("/processes", response_model=SearchResultsSchema[ProcessSearchResult])
|
|
247
|
+
async def search_processes(
|
|
248
|
+
search_params: ProcessSearchParameters,
|
|
249
|
+
cursor: str | None = None,
|
|
250
|
+
) -> SearchResultsSchema[ProcessSearchResult]:
|
|
251
|
+
return await _perform_search_and_fetch(
|
|
252
|
+
search_params=search_params,
|
|
253
|
+
entity_type=EntityType.PROCESS,
|
|
254
|
+
eager_loads=[
|
|
255
|
+
selectinload(ProcessTable.workflow),
|
|
256
|
+
],
|
|
257
|
+
cursor=cursor,
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
@router.get(
|
|
262
|
+
"/paths",
|
|
263
|
+
response_model=PathsResponse,
|
|
264
|
+
response_model_exclude_none=True,
|
|
265
|
+
)
|
|
266
|
+
async def list_paths(
|
|
267
|
+
prefix: str = Query("", min_length=0),
|
|
268
|
+
q: str | None = Query(None, description="Query for path suggestions"),
|
|
269
|
+
entity_type: EntityType = Query(EntityType.SUBSCRIPTION),
|
|
270
|
+
limit: int = Query(10, ge=1, le=10),
|
|
271
|
+
) -> PathsResponse:
|
|
272
|
+
|
|
273
|
+
if prefix:
|
|
274
|
+
lquery_pattern = create_path_autocomplete_lquery(prefix)
|
|
275
|
+
|
|
276
|
+
if not is_lquery_syntactically_valid(lquery_pattern, db.session):
|
|
277
|
+
raise HTTPException(
|
|
278
|
+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
|
279
|
+
detail=f"Prefix '{prefix}' creates an invalid search pattern.",
|
|
280
|
+
)
|
|
281
|
+
stmt = build_paths_query(entity_type=entity_type, prefix=prefix, q=q)
|
|
282
|
+
stmt = stmt.limit(limit)
|
|
283
|
+
rows = db.session.execute(stmt).all()
|
|
284
|
+
|
|
285
|
+
leaves, components = process_path_rows(rows)
|
|
286
|
+
return PathsResponse(leaves=leaves, components=components)
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
@router.get(
|
|
290
|
+
"/definitions",
|
|
291
|
+
response_model=dict[UIType, TypeDefinition],
|
|
292
|
+
response_model_exclude_none=True,
|
|
293
|
+
)
|
|
294
|
+
async def get_definitions() -> dict[UIType, TypeDefinition]:
|
|
295
|
+
"""Provide a static definition of operators and schemas for each UI type."""
|
|
296
|
+
return generate_definitions()
|
|
@@ -90,6 +90,22 @@ class OrchestratorCore(FastAPI):
|
|
|
90
90
|
base_settings: AppSettings = app_settings,
|
|
91
91
|
**kwargs: Any,
|
|
92
92
|
) -> None:
|
|
93
|
+
"""Initialize the Orchestrator.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
title: Name of the application.
|
|
97
|
+
description: Description of the application.
|
|
98
|
+
openapi_url: Location of the OpenAPI endpoint.
|
|
99
|
+
docs_url: Location of the docs endpoint.
|
|
100
|
+
redoc_url: Location of the redoc endpoint.
|
|
101
|
+
version: Version of the application.
|
|
102
|
+
default_response_class: Override the default response class.
|
|
103
|
+
base_settings: Settings for the application.
|
|
104
|
+
**kwargs: Any additional keyword arguments are sent to the
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
None
|
|
108
|
+
"""
|
|
93
109
|
initialise_logging(LOGGER_OVERRIDES)
|
|
94
110
|
init_model_loaders()
|
|
95
111
|
if base_settings.ENABLE_GRAPHQL_STATS_EXTENSION:
|
|
@@ -163,6 +179,22 @@ class OrchestratorCore(FastAPI):
|
|
|
163
179
|
release: str | None = GIT_COMMIT_HASH,
|
|
164
180
|
**sentry_kwargs: Any,
|
|
165
181
|
) -> None:
|
|
182
|
+
"""Register sentry to your application.
|
|
183
|
+
|
|
184
|
+
Sentry is an application monitoring toolkit.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
sentry_dsn: The location where sentry traces are posted to.
|
|
188
|
+
trace_sample_rate: The sample rate
|
|
189
|
+
server_name: The name of the application
|
|
190
|
+
environment: Production or development
|
|
191
|
+
release: Version of the application
|
|
192
|
+
**sentry_kwargs: Any sentry keyword arguments
|
|
193
|
+
|
|
194
|
+
Returns:
|
|
195
|
+
None
|
|
196
|
+
|
|
197
|
+
"""
|
|
166
198
|
logger.info("Adding Sentry middleware to app", app=self.title)
|
|
167
199
|
if self.base_settings.EXECUTOR == ExecutorType.WORKER:
|
|
168
200
|
from sentry_sdk.integrations.celery import CeleryIntegration
|
|
@@ -13,13 +13,34 @@
|
|
|
13
13
|
|
|
14
14
|
import typer
|
|
15
15
|
|
|
16
|
-
from orchestrator.cli import
|
|
16
|
+
from orchestrator.cli import (
|
|
17
|
+
database,
|
|
18
|
+
generate,
|
|
19
|
+
scheduler,
|
|
20
|
+
)
|
|
21
|
+
from orchestrator.llm_settings import llm_settings
|
|
17
22
|
|
|
18
23
|
app = typer.Typer()
|
|
19
24
|
app.add_typer(scheduler.app, name="scheduler", help="Access all the scheduler functions")
|
|
20
25
|
app.add_typer(database.app, name="db", help="Interact with the application database")
|
|
21
26
|
app.add_typer(generate.app, name="generate", help="Generate products, workflows and other artifacts")
|
|
22
27
|
|
|
28
|
+
if llm_settings.SEARCH_ENABLED:
|
|
29
|
+
from orchestrator.cli.search import index_llm, resize_embedding, search_explore, speedtest
|
|
30
|
+
|
|
31
|
+
app.add_typer(index_llm.app, name="index", help="(Re-)Index the search table.")
|
|
32
|
+
app.add_typer(search_explore.app, name="search", help="Try out different search types.")
|
|
33
|
+
app.add_typer(
|
|
34
|
+
resize_embedding.app,
|
|
35
|
+
name="embedding",
|
|
36
|
+
help="Resize the vector dimension of the embedding column in the search table.",
|
|
37
|
+
)
|
|
38
|
+
app.add_typer(
|
|
39
|
+
speedtest.app,
|
|
40
|
+
name="speedtest",
|
|
41
|
+
help="Search performance testing and analysis.",
|
|
42
|
+
)
|
|
43
|
+
|
|
23
44
|
|
|
24
45
|
if __name__ == "__main__":
|
|
25
46
|
app()
|
|
@@ -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
|
+
)
|