orchestrator-core 4.7.0rc1__tar.gz → 4.7.1__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.7.0rc1 → orchestrator_core-4.7.1}/PKG-INFO +8 -8
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/__init__.py +1 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/app.py +34 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/scheduler.py +53 -10
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/process.py +2 -2
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/llm_settings.py +0 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +1 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +1 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-11-18_961eddbd4c13_create_linker_table_workflow_apscheduler.py +1 -1
- orchestrator_core-4.7.1/orchestrator/migrations/versions/schema/2025-12-10_9736496e3eba_set_is_task_true_on_certain_tasks.py +40 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schedules/__init__.py +3 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schedules/scheduling.py +5 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schedules/service.py +32 -3
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/search_requests.py +6 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/agent/prompts.py +10 -6
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/agent/tools.py +55 -15
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/aggregations/base.py +6 -2
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/core/types.py +13 -4
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/builder.py +75 -3
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/engine.py +65 -3
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/mixins.py +62 -2
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/queries.py +15 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/validation.py +43 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/settings.py +48 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/modify_note.py +10 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/removed_workflow.py +8 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/tasks/cleanup_tasks_log.py +9 -2
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/tasks/resume_workflows.py +4 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/tasks/validate_product_type.py +7 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/tasks/validate_products.py +9 -1
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/tasks/validate_subscriptions.py +11 -4
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/pyproject.toml +8 -7
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/LICENSE +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/README.md +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/agentic_app.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/api.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/agent.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/health.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/processes.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/products.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/schedules.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/search.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/user.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/error_handling.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/api/models.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/database.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generate.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/README +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/enums.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/migration.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/product.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/product_block.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/settings.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/translations.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/unittest.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/validations.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/generator/workflow.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/enums.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/macros.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/product.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/helpers/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/helpers/input_helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/helpers/print_helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/main.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/migrate_domain_models.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/migrate_tasks.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/migrate_workflows.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/migration_helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/search/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/search/display.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/search/index_llm.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/search/resize_embedding.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/search/search_explore.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/cli/search/speedtest.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/config/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/config/assignee.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/database.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/filters.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/process.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/product.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/product_block.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/resource_type.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/search_filters/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/subscription.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/filters/workflow.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/listeners.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/loaders.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/models.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/queries/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/queries/subscription.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/queries/subscription_instance.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/range/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/range/range.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/sorting/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/sorting/process.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/sorting/product.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/sorting/product_block.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/sorting/resource_type.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/sorting/sorting.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/sorting/subscription.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/db/sorting/workflow.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/devtools/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/devtools/populator.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/devtools/scripts/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/devtools/scripts/migrate_20.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/devtools/scripts/migrate_30.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/devtools/scripts/shared.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/distlock/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/distlock/distlock_manager.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/distlock/managers/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/domain/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/domain/base.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/domain/context_cache.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/domain/customer_description.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/domain/helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/domain/lifecycle.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/domain/subscription_instance_transform.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/exception_handlers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/forms/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/forms/validators/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/forms/validators/customer_contact_list.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/forms/validators/customer_id.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/forms/validators/display_subscription.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/forms/validators/network_type_validators.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/forms/validators/product_id.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/autoregistration.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/extensions/model_cache.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/extensions/stats.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/loaders/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/loaders/subscriptions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/mutations/customer_description.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/mutations/start_process.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/pagination.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/customer.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/process.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/product.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/product_block.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/resource_type.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/scheduled_tasks.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/settings.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/subscription.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/version.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/resolvers/workflow.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schema.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/customer.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/customer_description.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/errors.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/fixed_input.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/product.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/product_block.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/resource_type.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/scheduled_task.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/settings.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/subscription.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/version.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/workflow.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/types.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/utils/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/utils/override_class.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/log_config.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/metrics/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/metrics/engine.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/metrics/init.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/metrics/processes.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/metrics/subscriptions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/README +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/alembic.ini +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/env.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/script.py.mako +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/templates/env.py.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-07-01_93fc5834c7e5_changed_timestamping_fields_in_process_steps.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-07-04_4b58e336d1bf_deprecating_workflow_target_in_.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/migrations/versions/schema/2025-07-28_850dccac3b02_update_description_of_resume_workflows_.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/py.typed +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schedules/scheduler.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schedules/validate_products.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/base.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/engine_settings.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/fixed_input.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/problem_detail.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/process.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/product.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/product_block.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/resource_type.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/schedules.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/search.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/subscription.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/subscription_descriptions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/workflow.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/agent/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/agent/agent.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/agent/handlers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/agent/json_patch.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/agent/state.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/agent/validation.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/aggregations/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/core/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/core/embedding.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/core/exceptions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/core/validators.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/docs/index.md +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/docs/running_local_text_embedding_inference.md +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/filters/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/filters/base.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/filters/date_filters.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/filters/definitions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/filters/ltree_filters.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/filters/numeric_filter.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/indexing/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/indexing/indexer.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/indexing/registry.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/indexing/tasks.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/indexing/traverse.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/llm_migration.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/exceptions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/export.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/results.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/query/state.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/retrieval/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/retrieval/pagination.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/retrieval/retrievers/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/retrieval/retrievers/base.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/retrieval/retrievers/fuzzy.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/retrieval/retrievers/hybrid.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/retrieval/retrievers/process.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/retrieval/retrievers/semantic.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/retrieval/retrievers/structured.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/security.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/executors/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/executors/celery.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/executors/threadpool.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/fixed_inputs.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/input_state.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/process_broadcast_thread.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/processes.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/products.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/resource_types.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/settings.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/settings_env_variables.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/subscription_relations.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/subscriptions.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/tasks.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/translations.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/services/workflows.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/targets.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/types.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/auth.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/crypt.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/datetime.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/deprecation_logger.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/docs.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/enrich_process.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/errors.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/expose_settings.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/fixed_inputs.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/functional.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/get_updated_properties.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/helpers.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/json.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/redis.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/redis_client.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/search_query.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/state.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/strings.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/utils/validate_data_version.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/version.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/websocket/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/websocket/websocket_manager.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflow.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/steps.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/translations/en-GB.json +0 -0
- {orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/workflows/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: orchestrator-core
|
|
3
|
-
Version: 4.7.
|
|
3
|
+
Version: 4.7.1
|
|
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.15
|
|
@@ -31,13 +31,13 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
31
31
|
Classifier: Topic :: Software Development
|
|
32
32
|
Classifier: Typing :: Typed
|
|
33
33
|
License-File: LICENSE
|
|
34
|
-
Requires-Dist: alembic==1.
|
|
34
|
+
Requires-Dist: alembic==1.18.1
|
|
35
35
|
Requires-Dist: anyio>=3.7.0
|
|
36
36
|
Requires-Dist: apscheduler>=3.11.0
|
|
37
37
|
Requires-Dist: click==8.*
|
|
38
38
|
Requires-Dist: deepmerge==2.0
|
|
39
39
|
Requires-Dist: deprecated>=1.2.18
|
|
40
|
-
Requires-Dist: fastapi~=0.
|
|
40
|
+
Requires-Dist: fastapi~=0.128.0
|
|
41
41
|
Requires-Dist: fastapi-etag==0.4.0
|
|
42
42
|
Requires-Dist: itsdangerous>=2.2.0
|
|
43
43
|
Requires-Dist: jinja2==3.1.6
|
|
@@ -46,7 +46,7 @@ Requires-Dist: nwa-stdlib~=1.11.0
|
|
|
46
46
|
Requires-Dist: oauth2-lib>=2.5.0
|
|
47
47
|
Requires-Dist: orjson==3.11.5
|
|
48
48
|
Requires-Dist: pgvector>=0.4.1
|
|
49
|
-
Requires-Dist: prometheus-client==0.
|
|
49
|
+
Requires-Dist: prometheus-client==0.24.1
|
|
50
50
|
Requires-Dist: psycopg2-binary==2.9.11
|
|
51
51
|
Requires-Dist: pydantic-forms>=1.4.0
|
|
52
52
|
Requires-Dist: pydantic-settings~=2.12.0
|
|
@@ -57,13 +57,13 @@ Requires-Dist: pytz==2025.2
|
|
|
57
57
|
Requires-Dist: redis==7.1.0
|
|
58
58
|
Requires-Dist: semver==3.0.4
|
|
59
59
|
Requires-Dist: sentry-sdk[fastapi]>=2.29.1
|
|
60
|
-
Requires-Dist: sqlalchemy==2.0.
|
|
61
|
-
Requires-Dist: sqlalchemy-utils==0.42.
|
|
60
|
+
Requires-Dist: sqlalchemy==2.0.45
|
|
61
|
+
Requires-Dist: sqlalchemy-utils==0.42.1
|
|
62
62
|
Requires-Dist: strawberry-graphql>=0.281.0,<0.285.0
|
|
63
63
|
Requires-Dist: structlog>=25.4.0
|
|
64
64
|
Requires-Dist: tabulate==0.9.0
|
|
65
|
-
Requires-Dist: typer==0.
|
|
66
|
-
Requires-Dist: uvicorn[standard]~=0.
|
|
65
|
+
Requires-Dist: typer==0.21.1
|
|
66
|
+
Requires-Dist: uvicorn[standard]~=0.40.0
|
|
67
67
|
Requires-Dist: pydantic-ai-slim >=1.27.0 ; extra == "agent"
|
|
68
68
|
Requires-Dist: ag-ui-protocol>=0.1.10 ; extra == "agent"
|
|
69
69
|
Requires-Dist: litellm>=1.75.7 ; extra == "agent"
|
|
@@ -57,7 +57,8 @@ from orchestrator.graphql.types import ScalarOverrideType, StrawberryModelType
|
|
|
57
57
|
from orchestrator.log_config import LOGGER_OVERRIDES
|
|
58
58
|
from orchestrator.metrics import ORCHESTRATOR_METRICS_REGISTRY, initialize_default_metrics
|
|
59
59
|
from orchestrator.services.process_broadcast_thread import ProcessDataBroadcastThread
|
|
60
|
-
from orchestrator.settings import AppSettings, ExecutorType, app_settings
|
|
60
|
+
from orchestrator.settings import AppSettings, ExecutorType, app_settings, get_authorizers
|
|
61
|
+
from orchestrator.utils.auth import Authorizer
|
|
61
62
|
from orchestrator.version import GIT_COMMIT_HASH
|
|
62
63
|
from orchestrator.websocket import init_websocket_manager
|
|
63
64
|
from pydantic_forms.exception_handlers.fastapi import form_error_handler
|
|
@@ -311,6 +312,38 @@ class OrchestratorCore(FastAPI):
|
|
|
311
312
|
"""
|
|
312
313
|
self.auth_manager.graphql_authorization = graphql_authorization_instance
|
|
313
314
|
|
|
315
|
+
def register_internal_authorize_callback(self, callback: Authorizer) -> None:
|
|
316
|
+
"""Registers the authorize_callback for WFO's internal workflows and tasks.
|
|
317
|
+
|
|
318
|
+
Since RBAC policies are applied to workflows via decorator, this enables registration of callbacks
|
|
319
|
+
for workflows defined in orchestrator-core itself.
|
|
320
|
+
However, this assignment MUST be made before any workflows are run.
|
|
321
|
+
|
|
322
|
+
Args:
|
|
323
|
+
callback (Authorizer): The async Authorizer to run for the `authorize_callback` argument of internal workflows.
|
|
324
|
+
|
|
325
|
+
Returns:
|
|
326
|
+
None
|
|
327
|
+
"""
|
|
328
|
+
authorizers = get_authorizers()
|
|
329
|
+
authorizers.internal_authorize_callback = callback
|
|
330
|
+
|
|
331
|
+
def register_internal_retry_auth_callback(self, callback: Authorizer) -> None:
|
|
332
|
+
"""Registers the retry_auth_callback for WFO's internal workflows and tasks.
|
|
333
|
+
|
|
334
|
+
Since RBAC policies are applied to workflows via decorator, this enables registration of callbacks
|
|
335
|
+
for workflows defined in orchestrator-core itself.
|
|
336
|
+
However, this assignment MUST be made before any workflows are run.
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
callback (Authorizer): The async Authorizer to run for the `retry_auth_callback` argument of internal workflows.
|
|
340
|
+
|
|
341
|
+
Returns:
|
|
342
|
+
None
|
|
343
|
+
"""
|
|
344
|
+
authorizers = get_authorizers()
|
|
345
|
+
authorizers.internal_retry_auth_callback = callback
|
|
346
|
+
|
|
314
347
|
|
|
315
348
|
main_typer_app = typer.Typer()
|
|
316
349
|
main_typer_app.add_typer(cli_app, name="orchestrator", help="The orchestrator CLI commands")
|
|
@@ -23,7 +23,7 @@ from orchestrator.schedules.scheduler import (
|
|
|
23
23
|
)
|
|
24
24
|
from orchestrator.schedules.service import (
|
|
25
25
|
SCHEDULER_QUEUE,
|
|
26
|
-
|
|
26
|
+
add_unique_scheduled_task_to_queue,
|
|
27
27
|
workflow_scheduler_queue,
|
|
28
28
|
)
|
|
29
29
|
from orchestrator.schemas.schedules import APSchedulerJobCreate
|
|
@@ -36,7 +36,13 @@ app: typer.Typer = typer.Typer()
|
|
|
36
36
|
|
|
37
37
|
@app.command()
|
|
38
38
|
def run() -> None:
|
|
39
|
-
"""
|
|
39
|
+
"""Starts the scheduler in the foreground.
|
|
40
|
+
|
|
41
|
+
While running, this process will:
|
|
42
|
+
|
|
43
|
+
* Periodically wake up when the next schedule is due for execution, and run it
|
|
44
|
+
* Process schedule changes made through the schedule API
|
|
45
|
+
"""
|
|
40
46
|
|
|
41
47
|
def _get_scheduled_task_item_from_queue(redis_conn: Redis) -> tuple[str, bytes] | None:
|
|
42
48
|
"""Get an item from the Redis Queue for scheduler tasks."""
|
|
@@ -63,17 +69,45 @@ def run() -> None:
|
|
|
63
69
|
|
|
64
70
|
@app.command()
|
|
65
71
|
def show_schedule() -> None:
|
|
66
|
-
"""
|
|
72
|
+
"""The `show-schedule` command shows an overview of the scheduled jobs."""
|
|
73
|
+
from rich.console import Console
|
|
74
|
+
from rich.table import Table
|
|
67
75
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
76
|
+
from orchestrator.schedules.service import get_linker_entries_by_schedule_ids
|
|
77
|
+
|
|
78
|
+
console = Console()
|
|
79
|
+
|
|
80
|
+
table = Table(title="Scheduled Tasks")
|
|
81
|
+
table.add_column("id", no_wrap=True)
|
|
82
|
+
table.add_column("name")
|
|
83
|
+
table.add_column("source")
|
|
84
|
+
table.add_column("next run time")
|
|
85
|
+
table.add_column("trigger")
|
|
86
|
+
|
|
87
|
+
scheduled_tasks = get_all_scheduler_tasks()
|
|
88
|
+
_schedule_ids = [task.id for task in scheduled_tasks]
|
|
89
|
+
api_managed = {str(i.schedule_id) for i in get_linker_entries_by_schedule_ids(_schedule_ids)}
|
|
90
|
+
|
|
91
|
+
for task in scheduled_tasks:
|
|
92
|
+
source = "API" if task.id in api_managed else "decorator"
|
|
93
|
+
run_time = str(task.next_run_time.replace(microsecond=0))
|
|
94
|
+
table.add_row(task.id, task.name, source, str(run_time), str(task.trigger))
|
|
95
|
+
|
|
96
|
+
console.print(table)
|
|
72
97
|
|
|
73
98
|
|
|
74
99
|
@app.command()
|
|
75
100
|
def force(task_id: str) -> None:
|
|
76
|
-
"""Force the execution of (a) scheduler(s) based on a
|
|
101
|
+
"""Force the execution of (a) scheduler(s) based on a schedule ID.
|
|
102
|
+
|
|
103
|
+
Use the `show-schedule` command to determine the ID of the schedule to execute.
|
|
104
|
+
|
|
105
|
+
CLI Arguments:
|
|
106
|
+
```sh
|
|
107
|
+
Arguments:
|
|
108
|
+
SCHEDULE_ID ID of the schedule to execute
|
|
109
|
+
```
|
|
110
|
+
"""
|
|
77
111
|
task = get_scheduler_task(task_id)
|
|
78
112
|
|
|
79
113
|
if not task:
|
|
@@ -91,7 +125,16 @@ def force(task_id: str) -> None:
|
|
|
91
125
|
|
|
92
126
|
@app.command()
|
|
93
127
|
def load_initial_schedule() -> None:
|
|
94
|
-
"""
|
|
128
|
+
"""The `load-initial-schedule` command loads the initial schedule using the scheduler API.
|
|
129
|
+
|
|
130
|
+
The initial schedules are:
|
|
131
|
+
- Task Resume Workflows
|
|
132
|
+
- Task Clean Up Tasks
|
|
133
|
+
- Task Validate Subscriptions
|
|
134
|
+
|
|
135
|
+
This command is idempotent since 4.7.1 when the scheduler is running. The schedules are only
|
|
136
|
+
created when they do not already exist in the database.
|
|
137
|
+
"""
|
|
95
138
|
initial_schedules = [
|
|
96
139
|
{
|
|
97
140
|
"name": "Task Resume Workflows",
|
|
@@ -128,4 +171,4 @@ def load_initial_schedule() -> None:
|
|
|
128
171
|
schedule["workflow_id"] = workflow.workflow_id
|
|
129
172
|
|
|
130
173
|
typer.echo(f"Initial Schedule: {schedule}")
|
|
131
|
-
|
|
174
|
+
add_unique_scheduled_task_to_queue(APSchedulerJobCreate(**schedule)) # type: ignore
|
{orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/graphql/schemas/process.py
RENAMED
|
@@ -89,8 +89,8 @@ class ProcessType:
|
|
|
89
89
|
auth_resume, auth_retry = get_auth_callbacks(get_steps_to_evaluate_for_rbac(process), workflow)
|
|
90
90
|
|
|
91
91
|
return FormUserPermissionsType(
|
|
92
|
-
retryAllowed=bool(auth_retry and auth_retry(oidc_user)),
|
|
93
|
-
resumeAllowed=bool(auth_resume and auth_resume(oidc_user)),
|
|
92
|
+
retryAllowed=bool(auth_retry and await auth_retry(oidc_user)),
|
|
93
|
+
resumeAllowed=bool(auth_resume and await auth_resume(oidc_user)),
|
|
94
94
|
)
|
|
95
95
|
|
|
96
96
|
@authenticated_field(description="Returns list of subscriptions of the process") # type: ignore
|
|
@@ -17,6 +17,7 @@ down_revision = "c112305b07d3"
|
|
|
17
17
|
branch_labels = None
|
|
18
18
|
depends_on = None
|
|
19
19
|
|
|
20
|
+
# NOTE: this migration forgot to insert these workflows with is_task=true. Make sure to correct that if you copy this.
|
|
20
21
|
workflows = [
|
|
21
22
|
{"name": "modify_note", "description": "Modify Note", "workflow_id": uuid4(), "target": "MODIFY"},
|
|
22
23
|
{"name": "task_clean_up_tasks", "description": "Clean up old tasks", "workflow_id": uuid4(), "target": "SYSTEM"},
|
|
@@ -17,6 +17,7 @@ down_revision = "3323bcb934e7"
|
|
|
17
17
|
branch_labels = None
|
|
18
18
|
depends_on = None
|
|
19
19
|
|
|
20
|
+
# NOTE: this migration forgot to insert these workflows with is_task=true. Make sure to correct that if you copy this.
|
|
20
21
|
workflows = [
|
|
21
22
|
{"name": "task_validate_products", "description": "Validate products", "workflow_id": uuid4(), "target": "SYSTEM"},
|
|
22
23
|
]
|
|
@@ -17,7 +17,7 @@ down_revision = "850dccac3b02"
|
|
|
17
17
|
branch_labels = None
|
|
18
18
|
depends_on = None
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
# NOTE: this migration forgot to insert these workflows with is_task=true. Make sure to correct that if you copy this.
|
|
21
21
|
workflows = [
|
|
22
22
|
{
|
|
23
23
|
"name": "task_validate_subscriptions",
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Set is_task=true on certain tasks.
|
|
2
|
+
|
|
3
|
+
This is required to make them appear in the completed tasks in the UI, and for the cleanup task to be able to
|
|
4
|
+
remove them.
|
|
5
|
+
|
|
6
|
+
Revision ID: 9736496e3eba
|
|
7
|
+
Revises: 961eddbd4c13
|
|
8
|
+
Create Date: 2025-12-10 16:42:29.060382
|
|
9
|
+
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import sqlalchemy as sa
|
|
13
|
+
from alembic import op
|
|
14
|
+
|
|
15
|
+
# revision identifiers, used by Alembic.
|
|
16
|
+
revision = "9736496e3eba"
|
|
17
|
+
down_revision = "961eddbd4c13"
|
|
18
|
+
branch_labels = None
|
|
19
|
+
depends_on = None
|
|
20
|
+
|
|
21
|
+
task_names = [
|
|
22
|
+
# Added in a76b9185b334
|
|
23
|
+
"task_clean_up_tasks",
|
|
24
|
+
"task_resume_workflows",
|
|
25
|
+
# Added in 3c8b9185c221
|
|
26
|
+
"task_validate_products",
|
|
27
|
+
# Added in 961eddbd4c13
|
|
28
|
+
"task_validate_subscriptions",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def upgrade() -> None:
|
|
33
|
+
conn = op.get_bind()
|
|
34
|
+
query = sa.text("UPDATE workflows SET is_task=true WHERE name = :task_name and is_task=false")
|
|
35
|
+
for task_name in task_names:
|
|
36
|
+
conn.execute(query, parameters={"task_name": task_name})
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def downgrade() -> None:
|
|
40
|
+
pass # Does not make sense to downgrade back to a 'bad' state.
|
|
@@ -15,7 +15,9 @@ import warnings
|
|
|
15
15
|
from orchestrator.schedules.validate_products import validate_products
|
|
16
16
|
|
|
17
17
|
warnings.warn(
|
|
18
|
-
"ALL_SCHEDULERS is deprecated
|
|
18
|
+
"ALL_SCHEDULERS is deprecated and will be removed in 5.0.0. "
|
|
19
|
+
"Scheduling tasks can now be handled entirely through the API. "
|
|
20
|
+
"For more details, please consult https://workfloworchestrator.org/orchestrator-core/guides/upgrading/4.7/",
|
|
19
21
|
DeprecationWarning,
|
|
20
22
|
stacklevel=2,
|
|
21
23
|
)
|
|
@@ -23,7 +23,11 @@ F = TypeVar("F", bound=Callable[..., object])
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
@deprecated(
|
|
26
|
-
reason=
|
|
26
|
+
reason=(
|
|
27
|
+
"Scheduling tasks with a decorator is deprecated in favor of using the API. "
|
|
28
|
+
"This decorator will be removed in 5.0.0. "
|
|
29
|
+
"For more details, please consult https://workfloworchestrator.org/orchestrator-core/guides/upgrading/4.7/"
|
|
30
|
+
)
|
|
27
31
|
)
|
|
28
32
|
def scheduler(
|
|
29
33
|
name: str,
|
|
@@ -66,17 +66,46 @@ def deserialize_payload(bytes_dump: bytes) -> APSchedulerJobs:
|
|
|
66
66
|
def add_scheduled_task_to_queue(payload: APSchedulerJobs) -> None:
|
|
67
67
|
"""Create a scheduled task service function.
|
|
68
68
|
|
|
69
|
-
We need to create
|
|
70
|
-
the linker table workflows_apscheduler_jobs.
|
|
69
|
+
We need to create, update or delete an apscheduler job, and put the
|
|
70
|
+
workflow and schedule_id in the linker table workflows_apscheduler_jobs.
|
|
71
|
+
This is done by adding a job to a redis queue which will be executed
|
|
72
|
+
when the scheduler runs.
|
|
71
73
|
|
|
72
74
|
Args:
|
|
73
|
-
payload:
|
|
75
|
+
payload: APSchedulerJobs The scheduled task to create, update or delete
|
|
74
76
|
"""
|
|
75
77
|
bytes_dump = serialize_payload(payload)
|
|
76
78
|
redis_connection.lpush(SCHEDULER_QUEUE, bytes_dump)
|
|
77
79
|
logger.info("Added scheduled task to queue.")
|
|
78
80
|
|
|
79
81
|
|
|
82
|
+
def add_unique_scheduled_task_to_queue(payload: APSchedulerJobCreate) -> bool:
|
|
83
|
+
"""Create a unique scheduled task service function.
|
|
84
|
+
|
|
85
|
+
Checks if the workflow is already scheduled before creating an apscheduler
|
|
86
|
+
job, and putting the workflow and schedule_id in the linker table
|
|
87
|
+
workflows_apscheduler_jobs.
|
|
88
|
+
This is done by adding a job to a redis queue which will be executed
|
|
89
|
+
when the scheduler runs.
|
|
90
|
+
|
|
91
|
+
This function is not safe for concurrent usage and when the scheduler is not
|
|
92
|
+
running, as there might be a race condition between adding a job and checking
|
|
93
|
+
if it already exists in the database.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
payload: APSchedulerJobCreate The scheduled task to create.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
True when the scheduled task was added to the queue
|
|
100
|
+
False when the scheduled task was not added to the queue
|
|
101
|
+
"""
|
|
102
|
+
if db.session.query(WorkflowApschedulerJob).filter_by(workflow_id=payload.workflow_id).all():
|
|
103
|
+
logger.info(f"Not adding existing workflow {payload.workflow_name} as scheduled task.")
|
|
104
|
+
return False
|
|
105
|
+
add_scheduled_task_to_queue(payload)
|
|
106
|
+
return True
|
|
107
|
+
|
|
108
|
+
|
|
80
109
|
def get_linker_entries_by_schedule_ids(schedule_ids: list[str]) -> list[WorkflowApschedulerJob]:
|
|
81
110
|
"""Get linker table entries for multiple schedule IDs in a single query.
|
|
82
111
|
|
{orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/schemas/search_requests.py
RENAMED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
from pydantic import BaseModel, ConfigDict, Field
|
|
16
16
|
|
|
17
|
-
from orchestrator.search.core.types import EntityType
|
|
17
|
+
from orchestrator.search.core.types import EntityType, RetrieverType
|
|
18
18
|
from orchestrator.search.filters import FilterTree
|
|
19
19
|
from orchestrator.search.query.queries import SelectQuery
|
|
20
20
|
|
|
@@ -39,6 +39,10 @@ class SearchRequest(BaseModel):
|
|
|
39
39
|
le=SelectQuery.MAX_LIMIT,
|
|
40
40
|
description="Maximum number of search results to return.",
|
|
41
41
|
)
|
|
42
|
+
retriever: RetrieverType | None = Field(
|
|
43
|
+
default=None,
|
|
44
|
+
description="Force a specific retriever type. If None, uses default routing logic.",
|
|
45
|
+
)
|
|
42
46
|
|
|
43
47
|
model_config = ConfigDict(extra="forbid")
|
|
44
48
|
|
|
@@ -56,4 +60,5 @@ class SearchRequest(BaseModel):
|
|
|
56
60
|
filters=self.filters,
|
|
57
61
|
query_text=self.query,
|
|
58
62
|
limit=self.limit,
|
|
63
|
+
retriever=self.retriever,
|
|
59
64
|
)
|
|
@@ -26,7 +26,7 @@ logger = structlog.get_logger(__name__)
|
|
|
26
26
|
|
|
27
27
|
async def get_base_instructions() -> str:
|
|
28
28
|
return dedent(
|
|
29
|
-
"""
|
|
29
|
+
f"""
|
|
30
30
|
You are an expert assistant designed to find relevant information by building and running database queries.
|
|
31
31
|
|
|
32
32
|
---
|
|
@@ -50,17 +50,21 @@ async def get_base_instructions() -> str:
|
|
|
50
50
|
|
|
51
51
|
Follow these steps:
|
|
52
52
|
|
|
53
|
-
1. **Set Context**: Call `start_new_search` with appropriate entity_type and action
|
|
53
|
+
1. **Set Context**: Call `start_new_search` with appropriate entity_type and action:
|
|
54
|
+
- `action={ActionType.SELECT.value}` for finding/searching entities
|
|
55
|
+
- `action={ActionType.COUNT.value}` for counting (e.g., "how many", "count by status", "monthly growth")
|
|
56
|
+
- `action={ActionType.AGGREGATE.value}` for numeric operations (SUM, AVG, MIN, MAX of specific fields)
|
|
54
57
|
2. **Set Filters** (if needed): Discover paths, build FilterTree, call `set_filter_tree`
|
|
55
58
|
- IMPORTANT: Temporal constraints like "in 2025", "in January", "between X and Y" require filters on datetime fields
|
|
56
59
|
- Filters restrict WHICH records to include; grouping controls HOW to aggregate them
|
|
57
|
-
3. **Set Grouping/Aggregations** (for COUNT/AGGREGATE):
|
|
60
|
+
3. **Set Grouping/Aggregations** (for {ActionType.COUNT.value}/{ActionType.AGGREGATE.value}):
|
|
58
61
|
- For temporal grouping (per month, per year, per day, etc.): Use `set_temporal_grouping`
|
|
59
62
|
- For regular grouping (by status, by name, etc.): Use `set_grouping`
|
|
60
|
-
- For
|
|
63
|
+
- For {ActionType.AGGREGATE.value} action ONLY: Use `set_aggregations` to specify what to compute (SUM, AVG, etc.)
|
|
64
|
+
- For {ActionType.COUNT.value} action: Do NOT call `set_aggregations` (counting is automatic)
|
|
61
65
|
4. **Execute**:
|
|
62
|
-
- For SELECT action: Call `run_search()`
|
|
63
|
-
- For COUNT/AGGREGATE actions: Call `run_aggregation()`
|
|
66
|
+
- For {ActionType.SELECT.value} action: Call `run_search()`
|
|
67
|
+
- For {ActionType.COUNT.value}/{ActionType.AGGREGATE.value} actions: Call `run_aggregation()`
|
|
64
68
|
|
|
65
69
|
After search execution, follow the dynamic instructions based on the current state.
|
|
66
70
|
|
|
@@ -16,6 +16,7 @@ from typing import Any, cast
|
|
|
16
16
|
|
|
17
17
|
import structlog
|
|
18
18
|
from ag_ui.core import EventType, StateSnapshotEvent
|
|
19
|
+
from pydantic import ValidationError
|
|
19
20
|
from pydantic_ai import RunContext
|
|
20
21
|
from pydantic_ai.ag_ui import StateDeps
|
|
21
22
|
from pydantic_ai.exceptions import ModelRetry
|
|
@@ -39,13 +40,15 @@ from orchestrator.search.filters import FilterTree
|
|
|
39
40
|
from orchestrator.search.query import engine
|
|
40
41
|
from orchestrator.search.query.exceptions import PathNotFoundError, QueryValidationError
|
|
41
42
|
from orchestrator.search.query.export import fetch_export_data
|
|
43
|
+
from orchestrator.search.query.mixins import OrderBy
|
|
42
44
|
from orchestrator.search.query.queries import AggregateQuery, CountQuery, Query, SelectQuery
|
|
43
45
|
from orchestrator.search.query.results import AggregationResponse, AggregationResult, ExportData, VisualizationType
|
|
44
46
|
from orchestrator.search.query.state import QueryState
|
|
45
47
|
from orchestrator.search.query.validation import (
|
|
46
48
|
validate_aggregation_field,
|
|
47
|
-
validate_filter_path,
|
|
48
49
|
validate_filter_tree,
|
|
50
|
+
validate_grouping_fields,
|
|
51
|
+
validate_order_by_fields,
|
|
49
52
|
validate_temporal_grouping_field,
|
|
50
53
|
)
|
|
51
54
|
from orchestrator.settings import app_settings
|
|
@@ -404,20 +407,30 @@ async def prepare_export(
|
|
|
404
407
|
async def set_grouping(
|
|
405
408
|
ctx: RunContext[StateDeps[SearchState]],
|
|
406
409
|
group_by_paths: list[str],
|
|
410
|
+
order_by: list[OrderBy] | None = None,
|
|
407
411
|
) -> StateSnapshotEvent:
|
|
408
412
|
"""Set which field paths to group results by for aggregation.
|
|
409
413
|
|
|
410
414
|
Only used with COUNT or AGGREGATE actions. Paths must exist in the schema; use discover_filter_paths to verify.
|
|
415
|
+
Optionally specify ordering for the grouped results.
|
|
416
|
+
|
|
417
|
+
For order_by: You can order by grouping field paths OR aggregation aliases (e.g., 'count').
|
|
418
|
+
Grouping field paths will be validated; aggregation aliases cannot be validated until execution.
|
|
411
419
|
"""
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
f"Use discover_filter_paths(['{path.split('.')[-1]}']) to find valid paths."
|
|
418
|
-
)
|
|
420
|
+
try:
|
|
421
|
+
validate_grouping_fields(group_by_paths)
|
|
422
|
+
validate_order_by_fields(order_by)
|
|
423
|
+
except PathNotFoundError as e:
|
|
424
|
+
raise ModelRetry(f"{str(e)} Use discover_filter_paths to find valid paths.")
|
|
419
425
|
|
|
420
|
-
|
|
426
|
+
update_dict: dict[str, Any] = {"group_by": group_by_paths}
|
|
427
|
+
if order_by is not None:
|
|
428
|
+
update_dict["order_by"] = order_by
|
|
429
|
+
|
|
430
|
+
try:
|
|
431
|
+
ctx.deps.state.query = cast(Query, ctx.deps.state.query).model_copy(update=update_dict)
|
|
432
|
+
except ValidationError as e:
|
|
433
|
+
raise ModelRetry(str(e))
|
|
421
434
|
|
|
422
435
|
return StateSnapshotEvent(
|
|
423
436
|
type=EventType.STATE_SNAPSHOT,
|
|
@@ -434,16 +447,26 @@ async def set_aggregations(
|
|
|
434
447
|
"""Define what aggregations to compute over the matching records.
|
|
435
448
|
|
|
436
449
|
Only used with AGGREGATE action. See Aggregation model (CountAggregation, FieldAggregation) for structure and field requirements.
|
|
450
|
+
|
|
437
451
|
"""
|
|
438
452
|
# Validate field paths for FieldAggregations
|
|
439
453
|
try:
|
|
440
454
|
for agg in aggregations:
|
|
441
455
|
if isinstance(agg, FieldAggregation):
|
|
442
456
|
validate_aggregation_field(agg.type, agg.field)
|
|
443
|
-
except
|
|
444
|
-
raise ModelRetry(
|
|
457
|
+
except PathNotFoundError as e:
|
|
458
|
+
raise ModelRetry(
|
|
459
|
+
f"{str(e)} "
|
|
460
|
+
f"You MUST call discover_filter_paths first to find valid fields. "
|
|
461
|
+
f"If the field truly doesn't exist, inform the user that this data is not available."
|
|
462
|
+
)
|
|
463
|
+
except QueryValidationError as e:
|
|
464
|
+
raise ModelRetry(f"{str(e)}")
|
|
445
465
|
|
|
446
|
-
|
|
466
|
+
try:
|
|
467
|
+
ctx.deps.state.query = cast(Query, ctx.deps.state.query).model_copy(update={"aggregations": aggregations})
|
|
468
|
+
except ValidationError as e:
|
|
469
|
+
raise ModelRetry(str(e))
|
|
447
470
|
|
|
448
471
|
return StateSnapshotEvent(
|
|
449
472
|
type=EventType.STATE_SNAPSHOT,
|
|
@@ -456,19 +479,36 @@ async def set_aggregations(
|
|
|
456
479
|
async def set_temporal_grouping(
|
|
457
480
|
ctx: RunContext[StateDeps[SearchState]],
|
|
458
481
|
temporal_groups: list[TemporalGrouping],
|
|
482
|
+
cumulative: bool = False,
|
|
483
|
+
order_by: list[OrderBy] | None = None,
|
|
459
484
|
) -> StateSnapshotEvent:
|
|
460
485
|
"""Set temporal grouping to group datetime fields by time periods.
|
|
461
486
|
|
|
462
487
|
Only used with COUNT or AGGREGATE actions. See TemporalGrouping model for structure, periods, and examples.
|
|
488
|
+
Optionally enable cumulative aggregations (running totals) and specify ordering.
|
|
489
|
+
|
|
490
|
+
For order_by: You can order by temporal field paths OR aggregation aliases (e.g., 'count').
|
|
491
|
+
Temporal field paths will be validated; aggregation aliases cannot be validated until execution.
|
|
463
492
|
"""
|
|
464
|
-
# Validate that fields exist and are datetime types
|
|
465
493
|
try:
|
|
466
494
|
for tg in temporal_groups:
|
|
467
495
|
validate_temporal_grouping_field(tg.field)
|
|
468
|
-
|
|
496
|
+
validate_order_by_fields(order_by)
|
|
497
|
+
except PathNotFoundError as e:
|
|
498
|
+
raise ModelRetry(f"{str(e)} Use discover_filter_paths to find valid paths.")
|
|
499
|
+
except QueryValidationError as e:
|
|
469
500
|
raise ModelRetry(f"{str(e)} Use discover_filter_paths to find datetime fields.")
|
|
470
501
|
|
|
471
|
-
|
|
502
|
+
update_dict: dict[str, Any] = {"temporal_group_by": temporal_groups}
|
|
503
|
+
if cumulative:
|
|
504
|
+
update_dict["cumulative"] = cumulative
|
|
505
|
+
if order_by is not None:
|
|
506
|
+
update_dict["order_by"] = order_by
|
|
507
|
+
|
|
508
|
+
try:
|
|
509
|
+
ctx.deps.state.query = cast(Query, ctx.deps.state.query).model_copy(update=update_dict)
|
|
510
|
+
except ValidationError as e:
|
|
511
|
+
raise ModelRetry(str(e))
|
|
472
512
|
|
|
473
513
|
return StateSnapshotEvent(
|
|
474
514
|
type=EventType.STATE_SNAPSHOT,
|
{orchestrator_core-4.7.0rc1 → orchestrator_core-4.7.1}/orchestrator/search/aggregations/base.py
RENAMED
|
@@ -61,6 +61,11 @@ class TemporalGrouping(BaseModel):
|
|
|
61
61
|
},
|
|
62
62
|
)
|
|
63
63
|
|
|
64
|
+
@property
|
|
65
|
+
def alias(self) -> str:
|
|
66
|
+
"""Return the SQL-friendly alias for this temporal grouping."""
|
|
67
|
+
return f"{BaseAggregation.field_to_alias(self.field)}_{self.period.value}"
|
|
68
|
+
|
|
64
69
|
def get_pivot_fields(self) -> list[str]:
|
|
65
70
|
"""Return fields that need to be pivoted for this temporal grouping."""
|
|
66
71
|
return [self.field]
|
|
@@ -83,8 +88,7 @@ class TemporalGrouping(BaseModel):
|
|
|
83
88
|
col = getattr(pivot_cte_columns, field_alias)
|
|
84
89
|
truncated_col = func.date_trunc(self.period.value, cast(col, TIMESTAMP(timezone=True)))
|
|
85
90
|
|
|
86
|
-
|
|
87
|
-
col_name = f"{field_alias}_{self.period.value}"
|
|
91
|
+
col_name = self.alias
|
|
88
92
|
select_col = truncated_col.label(col_name)
|
|
89
93
|
return select_col, truncated_col, col_name
|
|
90
94
|
|
|
@@ -40,27 +40,28 @@ class SearchMetadata:
|
|
|
40
40
|
@classmethod
|
|
41
41
|
def structured(cls) -> "SearchMetadata":
|
|
42
42
|
return cls(
|
|
43
|
-
search_type="structured",
|
|
43
|
+
search_type="structured",
|
|
44
|
+
description="This search performs a filter-based search using structured queries.",
|
|
44
45
|
)
|
|
45
46
|
|
|
46
47
|
@classmethod
|
|
47
48
|
def fuzzy(cls) -> "SearchMetadata":
|
|
48
49
|
return cls(
|
|
49
|
-
search_type=
|
|
50
|
+
search_type=RetrieverType.FUZZY.value,
|
|
50
51
|
description="This search performs a trigram similarity search.",
|
|
51
52
|
)
|
|
52
53
|
|
|
53
54
|
@classmethod
|
|
54
55
|
def semantic(cls) -> "SearchMetadata":
|
|
55
56
|
return cls(
|
|
56
|
-
search_type=
|
|
57
|
+
search_type=RetrieverType.SEMANTIC.value,
|
|
57
58
|
description="This search performs a vector similarity search, using L2 distance on embeddings with minimum distance scoring (normalized).",
|
|
58
59
|
)
|
|
59
60
|
|
|
60
61
|
@classmethod
|
|
61
62
|
def hybrid(cls) -> "SearchMetadata":
|
|
62
63
|
return cls(
|
|
63
|
-
search_type=
|
|
64
|
+
search_type=RetrieverType.HYBRID.value,
|
|
64
65
|
description="This search performs reciprocal rank fusion combining trigram similarity, word_similarity, and L2 vector distance.",
|
|
65
66
|
)
|
|
66
67
|
|
|
@@ -109,6 +110,14 @@ class ActionType(str, Enum):
|
|
|
109
110
|
AGGREGATE = "aggregate" # Compute aggregations (sum, avg, etc.) over matching records.
|
|
110
111
|
|
|
111
112
|
|
|
113
|
+
class RetrieverType(str, Enum):
|
|
114
|
+
"""Defines available retriever types for search operations."""
|
|
115
|
+
|
|
116
|
+
FUZZY = "fuzzy"
|
|
117
|
+
SEMANTIC = "semantic"
|
|
118
|
+
HYBRID = "hybrid"
|
|
119
|
+
|
|
120
|
+
|
|
112
121
|
class UIType(str, Enum):
|
|
113
122
|
STRING = "string"
|
|
114
123
|
NUMBER = "number"
|