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