orchestrator-core 4.4.2__py3-none-any.whl → 4.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. orchestrator/__init__.py +17 -2
  2. orchestrator/agentic_app.py +103 -0
  3. orchestrator/api/api_v1/api.py +14 -2
  4. orchestrator/api/api_v1/endpoints/search.py +296 -0
  5. orchestrator/app.py +32 -0
  6. orchestrator/cli/main.py +22 -1
  7. orchestrator/cli/search/__init__.py +32 -0
  8. orchestrator/cli/search/index_llm.py +73 -0
  9. orchestrator/cli/search/resize_embedding.py +135 -0
  10. orchestrator/cli/search/search_explore.py +208 -0
  11. orchestrator/cli/search/speedtest.py +151 -0
  12. orchestrator/db/models.py +37 -1
  13. orchestrator/devtools/populator.py +16 -0
  14. orchestrator/domain/base.py +2 -7
  15. orchestrator/domain/lifecycle.py +24 -7
  16. orchestrator/llm_settings.py +57 -0
  17. orchestrator/log_config.py +1 -0
  18. orchestrator/migrations/helpers.py +7 -1
  19. orchestrator/schemas/search.py +130 -0
  20. orchestrator/schemas/workflow.py +1 -0
  21. orchestrator/search/__init__.py +12 -0
  22. orchestrator/search/agent/__init__.py +21 -0
  23. orchestrator/search/agent/agent.py +62 -0
  24. orchestrator/search/agent/prompts.py +100 -0
  25. orchestrator/search/agent/state.py +21 -0
  26. orchestrator/search/agent/tools.py +258 -0
  27. orchestrator/search/core/__init__.py +12 -0
  28. orchestrator/search/core/embedding.py +73 -0
  29. orchestrator/search/core/exceptions.py +36 -0
  30. orchestrator/search/core/types.py +296 -0
  31. orchestrator/search/core/validators.py +40 -0
  32. orchestrator/search/docs/index.md +37 -0
  33. orchestrator/search/docs/running_local_text_embedding_inference.md +46 -0
  34. orchestrator/search/filters/__init__.py +40 -0
  35. orchestrator/search/filters/base.py +295 -0
  36. orchestrator/search/filters/date_filters.py +88 -0
  37. orchestrator/search/filters/definitions.py +107 -0
  38. orchestrator/search/filters/ltree_filters.py +56 -0
  39. orchestrator/search/filters/numeric_filter.py +73 -0
  40. orchestrator/search/indexing/__init__.py +16 -0
  41. orchestrator/search/indexing/indexer.py +334 -0
  42. orchestrator/search/indexing/registry.py +101 -0
  43. orchestrator/search/indexing/tasks.py +69 -0
  44. orchestrator/search/indexing/traverse.py +334 -0
  45. orchestrator/search/llm_migration.py +108 -0
  46. orchestrator/search/retrieval/__init__.py +16 -0
  47. orchestrator/search/retrieval/builder.py +123 -0
  48. orchestrator/search/retrieval/engine.py +154 -0
  49. orchestrator/search/retrieval/exceptions.py +90 -0
  50. orchestrator/search/retrieval/pagination.py +96 -0
  51. orchestrator/search/retrieval/retrievers/__init__.py +26 -0
  52. orchestrator/search/retrieval/retrievers/base.py +123 -0
  53. orchestrator/search/retrieval/retrievers/fuzzy.py +94 -0
  54. orchestrator/search/retrieval/retrievers/hybrid.py +277 -0
  55. orchestrator/search/retrieval/retrievers/semantic.py +94 -0
  56. orchestrator/search/retrieval/retrievers/structured.py +39 -0
  57. orchestrator/search/retrieval/utils.py +120 -0
  58. orchestrator/search/retrieval/validation.py +152 -0
  59. orchestrator/search/schemas/__init__.py +12 -0
  60. orchestrator/search/schemas/parameters.py +129 -0
  61. orchestrator/search/schemas/results.py +77 -0
  62. orchestrator/services/processes.py +1 -1
  63. orchestrator/services/settings_env_variables.py +2 -2
  64. orchestrator/settings.py +8 -1
  65. orchestrator/utils/state.py +6 -1
  66. orchestrator/workflows/steps.py +15 -1
  67. orchestrator/workflows/tasks/validate_products.py +1 -1
  68. {orchestrator_core-4.4.2.dist-info → orchestrator_core-4.5.0.dist-info}/METADATA +15 -8
  69. {orchestrator_core-4.4.2.dist-info → orchestrator_core-4.5.0.dist-info}/RECORD +71 -21
  70. {orchestrator_core-4.4.2.dist-info → orchestrator_core-4.5.0.dist-info}/WHEEL +0 -0
  71. {orchestrator_core-4.4.2.dist-info → orchestrator_core-4.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,12 @@
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.
@@ -0,0 +1,129 @@
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 uuid
15
+ from typing import Any, Literal
16
+
17
+ from pydantic import BaseModel, ConfigDict, Field
18
+
19
+ from orchestrator.search.core.types import ActionType, EntityType
20
+ from orchestrator.search.filters import FilterTree
21
+
22
+
23
+ class BaseSearchParameters(BaseModel):
24
+ """Base model with common search parameters."""
25
+
26
+ action: ActionType = Field(default=ActionType.SELECT, description="The action to perform.")
27
+ entity_type: EntityType
28
+
29
+ filters: FilterTree | None = Field(default=None, description="A list of structured filters to apply to the search.")
30
+
31
+ query: str | None = Field(
32
+ default=None, description="Unified search query - will be processed into vector_query and/or fuzzy_term"
33
+ )
34
+
35
+ limit: int = Field(default=10, ge=1, le=30, description="Maximum number of search results to return.")
36
+ model_config = ConfigDict(extra="forbid")
37
+
38
+ @classmethod
39
+ def create(cls, entity_type: EntityType, **kwargs: Any) -> "BaseSearchParameters":
40
+ try:
41
+ return PARAMETER_REGISTRY[entity_type](entity_type=entity_type, **kwargs)
42
+ except KeyError:
43
+ raise ValueError(f"No search parameter class found for entity type: {entity_type.value}")
44
+
45
+ @property
46
+ def vector_query(self) -> str | None:
47
+ """Extract vector query from unified query field."""
48
+ if not self.query:
49
+ return None
50
+ try:
51
+ uuid.UUID(self.query)
52
+ return None # It's a UUID, so disable vector search.
53
+ except ValueError:
54
+ return self.query
55
+
56
+ @property
57
+ def fuzzy_term(self) -> str | None:
58
+ """Extract fuzzy term from unified query field."""
59
+ if not self.query:
60
+ return None
61
+
62
+ words = self.query.split()
63
+ # Only use fuzzy for single words
64
+ # otherwise, trigram operator filters out too much.
65
+ return self.query if len(words) == 1 else None
66
+
67
+
68
+ class SubscriptionSearchParameters(BaseSearchParameters):
69
+ entity_type: Literal[EntityType.SUBSCRIPTION] = Field(
70
+ default=EntityType.SUBSCRIPTION, description="The type of entity to search."
71
+ )
72
+ model_config = ConfigDict(
73
+ json_schema_extra={
74
+ "title": "SearchSubscriptions",
75
+ "description": "Search subscriptions based on specific criteria.",
76
+ "examples": [
77
+ {
78
+ "filters": {
79
+ "op": "AND",
80
+ "children": [
81
+ {"path": "subscription.status", "condition": {"op": "eq", "value": "provisioning"}},
82
+ {"path": "subscription.end_date", "condition": {"op": "gte", "value": "2025-01-01"}},
83
+ ],
84
+ }
85
+ }
86
+ ],
87
+ }
88
+ )
89
+
90
+
91
+ class ProductSearchParameters(BaseSearchParameters):
92
+ entity_type: Literal[EntityType.PRODUCT] = Field(
93
+ default=EntityType.PRODUCT, description="The type of entity to search."
94
+ )
95
+ model_config = ConfigDict(
96
+ json_schema_extra={
97
+ "title": "SearchProducts",
98
+ "description": "Search products based on specific criteria.",
99
+ "examples": [
100
+ {
101
+ "filters": [
102
+ {"path": "product.product_type", "condition": {"op": "eq", "value": "Shop"}},
103
+ ]
104
+ }
105
+ ],
106
+ }
107
+ )
108
+
109
+
110
+ class WorkflowSearchParameters(BaseSearchParameters):
111
+ entity_type: Literal[EntityType.WORKFLOW] = Field(
112
+ default=EntityType.WORKFLOW, description="The type of entity to search."
113
+ )
114
+
115
+
116
+ class ProcessSearchParameters(BaseSearchParameters):
117
+ """Search parameters specifically for PROCESS entities."""
118
+
119
+ entity_type: Literal[EntityType.PROCESS] = Field(
120
+ default=EntityType.PROCESS, description="The type of entity to search."
121
+ )
122
+
123
+
124
+ PARAMETER_REGISTRY: dict[EntityType, type[BaseSearchParameters]] = {
125
+ EntityType.SUBSCRIPTION: SubscriptionSearchParameters,
126
+ EntityType.PRODUCT: ProductSearchParameters,
127
+ EntityType.WORKFLOW: WorkflowSearchParameters,
128
+ EntityType.PROCESS: ProcessSearchParameters,
129
+ }
@@ -0,0 +1,77 @@
1
+ # Copyright 2019-2025 SURF, GÉANT.
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+
14
+ from typing import Literal
15
+
16
+ from pydantic import BaseModel, ConfigDict
17
+
18
+ from orchestrator.search.core.types import FilterOp, SearchMetadata, UIType
19
+
20
+
21
+ class MatchingField(BaseModel):
22
+ """Contains the field that contributed most to the (fuzzy) search result."""
23
+
24
+ text: str
25
+ path: str
26
+ highlight_indices: list[tuple[int, int]] | None = None
27
+
28
+
29
+ class SearchResult(BaseModel):
30
+ """Represents a single search result item."""
31
+
32
+ entity_id: str
33
+ score: float
34
+ perfect_match: int = 0
35
+ matching_field: MatchingField | None = None
36
+
37
+
38
+ class SearchResponse(BaseModel):
39
+ """Response containing search results and metadata."""
40
+
41
+ results: list[SearchResult]
42
+ metadata: SearchMetadata
43
+
44
+
45
+ class ValueSchema(BaseModel):
46
+ kind: UIType | Literal["none", "object"] = UIType.STRING
47
+ fields: dict[str, "ValueSchema"] | None = None
48
+
49
+ model_config = ConfigDict(extra="forbid")
50
+
51
+
52
+ class LeafInfo(BaseModel):
53
+ name: str
54
+ ui_types: list[UIType]
55
+ paths: list[str]
56
+
57
+ model_config = ConfigDict(
58
+ extra="forbid",
59
+ use_enum_values=True,
60
+ )
61
+
62
+
63
+ class ComponentInfo(BaseModel):
64
+ name: str
65
+ ui_types: list[UIType]
66
+
67
+ model_config = ConfigDict(
68
+ extra="forbid",
69
+ use_enum_values=True,
70
+ )
71
+
72
+
73
+ class TypeDefinition(BaseModel):
74
+ operators: list[FilterOp]
75
+ value_schema: dict[FilterOp, ValueSchema]
76
+
77
+ model_config = ConfigDict(use_enum_values=True)
@@ -492,7 +492,7 @@ def start_process(
492
492
  process id
493
493
 
494
494
  """
495
- pstat = create_process(workflow_key, user_inputs=user_inputs, user=user)
495
+ pstat = create_process(workflow_key, user_inputs=user_inputs, user=user, user_model=user_model)
496
496
 
497
497
  start_func = get_execution_context()["start"]
498
498
  return start_func(pstat, user=user, user_model=user_model, broadcast_func=broadcast_func)
@@ -14,7 +14,7 @@
14
14
  from typing import Any, Dict, Type
15
15
 
16
16
  from pydantic import SecretStr as PydanticSecretStr
17
- from pydantic_core import MultiHostUrl, Url
17
+ from pydantic.networks import AnyUrl, _BaseMultiHostUrl
18
18
  from pydantic_settings import BaseSettings
19
19
 
20
20
  from orchestrator.utils.expose_settings import SecretStr as OrchSecretStr
@@ -34,7 +34,7 @@ def mask_value(key: str, value: Any) -> Any:
34
34
  key_lower = key.lower()
35
35
  is_sensitive_key = "secret" in key_lower or "password" in key_lower
36
36
 
37
- if is_sensitive_key or isinstance(value, (OrchSecretStr, PydanticSecretStr, MultiHostUrl, Url)):
37
+ if is_sensitive_key or isinstance(value, (OrchSecretStr, PydanticSecretStr, _BaseMultiHostUrl, AnyUrl)):
38
38
  return MASK
39
39
 
40
40
  return value
orchestrator/settings.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF, GÉANT.
1
+ # Copyright 2019-2025 SURF, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -30,6 +30,12 @@ class ExecutorType(strEnum):
30
30
  THREADPOOL = "threadpool"
31
31
 
32
32
 
33
+ class LifecycleValidationMode(strEnum):
34
+ STRICT = "strict"
35
+ LOOSE = "loose"
36
+ IGNORED = "ignored"
37
+
38
+
33
39
  class AppSettings(BaseSettings):
34
40
  TESTING: bool = True
35
41
  SESSION_SECRET: OrchSecretStr = "".join(secrets.choice(string.ascii_letters) for i in range(16)) # type: ignore
@@ -91,6 +97,7 @@ class AppSettings(BaseSettings):
91
97
  FILTER_BY_MODE: Literal["partial", "exact"] = "exact"
92
98
  EXPOSE_SETTINGS: bool = False
93
99
  EXPOSE_OAUTH_SETTINGS: bool = False
100
+ LIFECYCLE_VALIDATION_MODE: LifecycleValidationMode = LifecycleValidationMode.LOOSE
94
101
 
95
102
 
96
103
  app_settings = AppSettings()
@@ -19,6 +19,7 @@ from typing import Any, cast, get_args
19
19
  from uuid import UUID
20
20
 
21
21
  from orchestrator.domain.base import SubscriptionModel
22
+ from orchestrator.domain.lifecycle import validate_subscription_model_product_type
22
23
  from orchestrator.types import StepFunc, is_list_type, is_optional_type
23
24
  from orchestrator.utils.functional import logger
24
25
  from pydantic_forms.types import (
@@ -135,7 +136,7 @@ def _save_models(state: State) -> None:
135
136
  def _build_arguments(func: StepFunc | InputStepFunc, state: State) -> list: # noqa: C901
136
137
  """Build actual arguments based on step function signature and state.
137
138
 
138
- What the step function requests in its function signature it what this function retrieves from the state or DB.
139
+ What the step function requests in its function signature is what this function retrieves from the state or DB.
139
140
  Domain models are retrieved from the DB (after `subscription_id` lookup in the state). Everything else is
140
141
  retrieved from the state.
141
142
 
@@ -186,6 +187,7 @@ def _build_arguments(func: StepFunc | InputStepFunc, state: State) -> list: # n
186
187
  subscription_id = _get_sub_id(state.get(name))
187
188
  if subscription_id:
188
189
  sub_mod = param.annotation.from_subscription(subscription_id)
190
+ validate_subscription_model_product_type(sub_mod)
189
191
  arguments.append(sub_mod)
190
192
  else:
191
193
  logger.error("Could not find key in state.", key=name, state=state)
@@ -198,12 +200,15 @@ def _build_arguments(func: StepFunc | InputStepFunc, state: State) -> list: # n
198
200
  f"Step function argument '{param.name}' cannot be serialized from database with type 'Any'"
199
201
  )
200
202
  subscriptions = [actual_type.from_subscription(subscription_id) for subscription_id in subscription_ids]
203
+ for sub_mod in subscriptions:
204
+ validate_subscription_model_product_type(sub_mod)
201
205
  arguments.append(subscriptions)
202
206
  elif is_optional_type(param.annotation, SubscriptionModel):
203
207
  subscription_id = _get_sub_id(state.get(name))
204
208
  if subscription_id:
205
209
  # Actual type is first argument from optional type
206
210
  sub_mod = get_args(param.annotation)[0].from_subscription(subscription_id)
211
+ validate_subscription_model_product_type(sub_mod)
207
212
  arguments.append(sub_mod)
208
213
  else:
209
214
  arguments.append(None)
@@ -15,9 +15,12 @@ from copy import deepcopy
15
15
  import structlog
16
16
  from pydantic import ValidationError
17
17
 
18
+ from orchestrator import llm_settings
18
19
  from orchestrator.db import db
19
20
  from orchestrator.db.models import ProcessSubscriptionTable
20
21
  from orchestrator.domain.base import SubscriptionModel
22
+ from orchestrator.search.core.types import EntityType
23
+ from orchestrator.search.indexing import run_indexing_for_entity
21
24
  from orchestrator.services.settings import reset_search_index
22
25
  from orchestrator.services.subscriptions import get_subscription
23
26
  from orchestrator.targets import Target
@@ -141,9 +144,20 @@ def set_status(status: SubscriptionLifecycle) -> Step:
141
144
 
142
145
 
143
146
  @step("Refresh subscription search index")
144
- def refresh_subscription_search_index() -> State:
147
+ def refresh_subscription_search_index(subscription: SubscriptionModel | None) -> State:
148
+ """Refresh subscription search index.
149
+
150
+ Args:
151
+ subscription: Subscription to refresh search index.
152
+
153
+ Returns:
154
+ State of the workflow.
155
+
156
+ """
145
157
  try:
146
158
  reset_search_index()
159
+ if llm_settings.SEARCH_ENABLED and subscription:
160
+ run_indexing_for_entity(EntityType.SUBSCRIPTION, str(subscription.subscription_id))
147
161
  except Exception:
148
162
  # Don't fail workflow in case of unexpected error
149
163
  logger.warning("Error updated the subscriptions search index")
@@ -105,7 +105,7 @@ def check_that_products_have_create_modify_and_terminate_workflows() -> State:
105
105
  product_data = get_products(filters=[ProductTable.status == "active"])
106
106
 
107
107
  workflows_not_complete: list = []
108
- targets = ["CREATE", "TERMINATE", "MODIFY", "VALIDATE"]
108
+ targets = ["CREATE", "TERMINATE", "MODIFY", "RECONCILE", "VALIDATE"]
109
109
  for product in product_data:
110
110
  workflows = {c.target for c in product.workflows if c.target in targets and c.name != "modify_note"}
111
111
  if len(workflows) < len(targets):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orchestrator-core
3
- Version: 4.4.2
3
+ Version: 4.5.0
4
4
  Summary: This is the orchestrator workflow engine.
5
5
  Author-email: SURF <automation-beheer@surf.nl>
6
6
  Requires-Python: >=3.11,<3.14
@@ -36,19 +36,20 @@ Requires-Dist: apscheduler>=3.11.0
36
36
  Requires-Dist: click==8.*
37
37
  Requires-Dist: deepmerge==2.0
38
38
  Requires-Dist: deprecated>=1.2.18
39
- Requires-Dist: fastapi~=0.115.2
39
+ Requires-Dist: fastapi~=0.115.14
40
40
  Requires-Dist: fastapi-etag==0.4.0
41
41
  Requires-Dist: itsdangerous>=2.2.0
42
42
  Requires-Dist: jinja2==3.1.6
43
43
  Requires-Dist: more-itertools~=10.7.0
44
- Requires-Dist: nwa-stdlib~=1.9.0
45
- Requires-Dist: oauth2-lib~=2.4.0
44
+ Requires-Dist: nwa-stdlib~=1.9.2
45
+ Requires-Dist: oauth2-lib>=2.4.1
46
46
  Requires-Dist: orjson==3.10.18
47
+ Requires-Dist: pgvector>=0.4.1
47
48
  Requires-Dist: prometheus-client==0.22.1
48
49
  Requires-Dist: psycopg2-binary==2.9.10
49
- Requires-Dist: pydantic-forms>=1.4.0,<=2.1.0
50
+ Requires-Dist: pydantic-forms>=1.4.0
50
51
  Requires-Dist: pydantic-settings~=2.9.1
51
- Requires-Dist: pydantic[email]~=2.8.2
52
+ Requires-Dist: pydantic[email]~=2.11.7
52
53
  Requires-Dist: python-dateutil==2.8.2
53
54
  Requires-Dist: python-rapidjson>=1.18,<1.21
54
55
  Requires-Dist: pytz==2025.2
@@ -57,16 +58,22 @@ Requires-Dist: semver==3.0.4
57
58
  Requires-Dist: sentry-sdk[fastapi]~=2.29.1
58
59
  Requires-Dist: sqlalchemy==2.0.41
59
60
  Requires-Dist: sqlalchemy-utils==0.41.2
60
- Requires-Dist: strawberry-graphql>=0.246.2
61
+ Requires-Dist: strawberry-graphql>=0.281.0
61
62
  Requires-Dist: structlog>=25.4.0
62
63
  Requires-Dist: tabulate==0.9.0
63
64
  Requires-Dist: typer==0.15.4
64
65
  Requires-Dist: uvicorn[standard]~=0.34.0
66
+ Requires-Dist: pydantic-ai-slim ==0.7.0 ; extra == "agent"
67
+ Requires-Dist: ag-ui-protocol>=0.1.8 ; extra == "agent"
68
+ Requires-Dist: litellm>=1.75.7 ; extra == "agent"
65
69
  Requires-Dist: celery~=5.5.1 ; extra == "celery"
70
+ Requires-Dist: litellm>=1.75.7 ; extra == "search"
66
71
  Project-URL: Documentation, https://workfloworchestrator.org/orchestrator-core
67
72
  Project-URL: Homepage, https://workfloworchestrator.org/orchestrator-core
68
73
  Project-URL: Source, https://github.com/workfloworchestrator/orchestrator-core
74
+ Provides-Extra: agent
69
75
  Provides-Extra: celery
76
+ Provides-Extra: search
70
77
 
71
78
  # Orchestrator-Core
72
79
 
@@ -74,7 +81,7 @@ Provides-Extra: celery
74
81
  [![codecov](https://codecov.io/gh/workfloworchestrator/orchestrator-core/branch/main/graph/badge.svg?token=5ANQFI2DHS)](https://codecov.io/gh/workfloworchestrator/orchestrator-core)
75
82
  [![pypi_version](https://img.shields.io/pypi/v/orchestrator-core?color=%2334D058&label=pypi%20package)](https://pypi.org/project/orchestrator-core)
76
83
  [![Supported python versions](https://img.shields.io/pypi/pyversions/orchestrator-core.svg?color=%2334D058)](https://pypi.org/project/orchestrator-core)
77
- ![Discord](https://img.shields.io/discord/1295834294270558280?style=flat&logo=discord&label=discord&link=https%3A%2F%2Fdiscord.gg%2FKNgF6gE8)
84
+ ![Discord](https://img.shields.io/discord/1295834294270558280?style=flat&logo=discord&label=discord&link=https%3A%2F%2Fdiscord.gg%fQkQn5ajFR)
78
85
 
79
86
  <p style="text-align: center"><em>Production ready Orchestration Framework to manage product lifecycle and workflows. Easy to use, built on top of FastAPI and Pydantic</em></p>
80
87
 
@@ -1,10 +1,12 @@
1
- orchestrator/__init__.py,sha256=4uQUvXQsc7ZhtqX56K_xiz86ujWkznNh0wuJWqYSuj8,1063
2
- orchestrator/app.py,sha256=7UrXKjBKNSEaSSXAd5ww_RdMFhFqE4yvfj8faS2MzAA,12089
1
+ orchestrator/__init__.py,sha256=56DajAUnTXWDpnWP3zBCXTdjCpD1-fGjkq7IXrWP4H0,1447
2
+ orchestrator/agentic_app.py,sha256=op7osw7KJRww90iYuWBt_bB5qI-sAkpG0fyr0liubQw,3968
3
+ orchestrator/app.py,sha256=UPKQuDpg8MWNC6r3SRRbp6l9RBzwb00IMIaGRk-jbCU,13203
3
4
  orchestrator/exception_handlers.py,sha256=UsW3dw8q0QQlNLcV359bIotah8DYjMsj2Ts1LfX4ClY,1268
4
- orchestrator/log_config.py,sha256=1tPRX5q65e57a6a_zEii_PFK8SzWT0mnA5w2sKg4hh8,1853
5
+ orchestrator/llm_settings.py,sha256=UDehiEVXkRMfmPSfCTHQX8dtH2gLCGtZK_wQTU3yISg,2316
6
+ orchestrator/log_config.py,sha256=1cPl_OXT4tEUyNxG8cwIWXrmadUm1E81vq0mdtrV-v4,1912
5
7
  orchestrator/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
8
  orchestrator/security.py,sha256=iXFxGxab54aav7oHEKLAVkTgrQMJGHy6IYLojEnD7gI,2422
7
- orchestrator/settings.py,sha256=2Kgc6m3qUCcSM3Z_IVUeehfgO0QphMFkLrS0RC3sU-U,4365
9
+ orchestrator/settings.py,sha256=Xl6bXd2VtosBTOuv4PClgVv9KoVDItThYkhDzf4IYxc,4560
8
10
  orchestrator/targets.py,sha256=d7Fyh_mWIWPivA_E7DTNFpZID3xFW_K0JlZ5nksVX7k,830
9
11
  orchestrator/types.py,sha256=qzs7xx5AYRmKbpYRyJJP3wuDb0W0bcAzefCN0RWLAco,15459
10
12
  orchestrator/version.py,sha256=b58e08lxs47wUNXv0jXFO_ykpksmytuzEXD4La4W-NQ,1366
@@ -14,13 +16,14 @@ orchestrator/api/error_handling.py,sha256=YrPCxSa-DSa9KwqIMlXI-KGBGnbGIW5ukOPiik
14
16
  orchestrator/api/helpers.py,sha256=s0QRHYw8AvEmlkmRhuEzz9xixaZKUF3YuPzUVHkcoXk,6933
15
17
  orchestrator/api/models.py,sha256=z9BDBx7uI4KBHWbD_LVrLsqNQ0_w-Mg9Qiy7PR_rZhk,5996
16
18
  orchestrator/api/api_v1/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
17
- orchestrator/api/api_v1/api.py,sha256=m4iDktsSpzxUDaudkdgXeZ83a6B4wfc3pczQsa-Pb-8,2866
19
+ orchestrator/api/api_v1/api.py,sha256=bWsvWgLap7b6ltu1BvwZpW7X2dEE6cQ7-WY0HcY7Yoo,3279
18
20
  orchestrator/api/api_v1/endpoints/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
19
21
  orchestrator/api/api_v1/endpoints/health.py,sha256=iaxs1XX1_250_gKNsspuULCV2GEMBjbtjsmfQTOvMAI,1284
20
22
  orchestrator/api/api_v1/endpoints/processes.py,sha256=OVbt6FgFnJ4aHaYGIg0cPoim8mxDpdzJ4TGAyfB_kPw,16269
21
23
  orchestrator/api/api_v1/endpoints/product_blocks.py,sha256=kZ6ywIOsS_S2qGq7RvZ4KzjvaS1LmwbGWR37AKRvWOw,2146
22
24
  orchestrator/api/api_v1/endpoints/products.py,sha256=BfFtwu9dZXEQbtKxYj9icc73GKGvAGMR5ytyf41nQlQ,3081
23
25
  orchestrator/api/api_v1/endpoints/resource_types.py,sha256=gGyuaDyOD0TAVoeFGaGmjDGnQ8eQQArOxKrrk4MaDzA,2145
26
+ orchestrator/api/api_v1/endpoints/search.py,sha256=NooZcMXmlnD1NxdhFWlqF3jhmixF1DZYuUG8XtEVGjo,10885
24
27
  orchestrator/api/api_v1/endpoints/settings.py,sha256=5s-k169podZjgGHUbVDmSQwpY_3Cs_Bbf2PPtZIkBcw,6184
25
28
  orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py,sha256=1_6LtgQleoq3M6z_W-Qz__Bj3OFUweoPrUqHMwSH6AM,3288
26
29
  orchestrator/api/api_v1/endpoints/subscriptions.py,sha256=7KaodccUiMkcVnrFnK2azp_V_-hGudcIyhov5WwVGQY,9810
@@ -31,7 +34,7 @@ orchestrator/api/api_v1/endpoints/ws.py,sha256=1l7E0ag_sZ6UMfQPHlmew7ENwxjm6fflB
31
34
  orchestrator/cli/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
32
35
  orchestrator/cli/database.py,sha256=YkYAbCY2VPAa6mDW0PpNKG5wL4FuAQYD2CGl1_DQtEk,19595
33
36
  orchestrator/cli/generate.py,sha256=SBaYfRijXPF9r3VxarPKTiDzDcB6GBMMQvecQIb_ZLQ,7377
34
- orchestrator/cli/main.py,sha256=GC_kxa9OZ-Y0ig_klfWc6ysOQuPVTUmTmDRj3m8cJHA,983
37
+ orchestrator/cli/main.py,sha256=xGLc_cS2LoSIbK5qkMFE7GCnZoOi5kATgtmQDFNQU7E,1658
35
38
  orchestrator/cli/migrate_domain_models.py,sha256=WRXy_1OnziQwpsCFZXvjB30nDJtjj0ikVXy8YNLque4,20928
36
39
  orchestrator/cli/migrate_tasks.py,sha256=bju8XColjSZD0v3rS4kl-24dLr8En_H4-6enBmqd494,7255
37
40
  orchestrator/cli/migrate_workflows.py,sha256=nxUpx0vgEIc_8aJrjAyrw3E9Dt8JmaamTts8oiQ4vHY,8923
@@ -99,6 +102,11 @@ orchestrator/cli/generator/templates/validate_product.j2,sha256=_gPNYS8dGOSpRm2E
99
102
  orchestrator/cli/helpers/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
100
103
  orchestrator/cli/helpers/input_helpers.py,sha256=pv5GTMuIWLzBE_bKNhn1XD_gxoqB0s1ZN4cnKkIIu5I,1139
101
104
  orchestrator/cli/helpers/print_helpers.py,sha256=b3ePg6HfBLKPYBBVr5XOA__JnFEMI5HBjbjov3CP8Po,859
105
+ orchestrator/cli/search/__init__.py,sha256=K15_iW9ogR7xtX7qHDal4H09tmwVGnOBZWyPBLWhuzc,1274
106
+ orchestrator/cli/search/index_llm.py,sha256=RWPkFz5bxiznjpN1vMsSWeqcvYKB90DLL4pXQ92QJNI,2239
107
+ orchestrator/cli/search/resize_embedding.py,sha256=ds830T26ADOD9vZS7psRHJVF_u2xar2d4vvIH1AOlww,4216
108
+ orchestrator/cli/search/search_explore.py,sha256=SDn1DMN8a4roSPodIHl-KrNAvdHo5jTDUvMUFLVh1P4,8602
109
+ orchestrator/cli/search/speedtest.py,sha256=QkQ_YhKh7TnNRX4lKjgrmF7DyufU9teLqw4CWkm52ko,4972
102
110
  orchestrator/config/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
103
111
  orchestrator/config/assignee.py,sha256=9mFFe9hoi2NCkXFOKL2pU2aveBzcZhljSvqUnh55vrk,780
104
112
  orchestrator/db/__init__.py,sha256=41_v-oeX5SMnwH2uIeBzscoST3FRXdpkEFDE5AoQR1E,3498
@@ -106,7 +114,7 @@ orchestrator/db/database.py,sha256=MU_w_e95ho2dVb2JDnt_KFYholx___XDkiQXbc8wCkI,1
106
114
  orchestrator/db/helpers.py,sha256=L8kEdnSSNGnUpZhdeGx2arCodakWN8vSpKdfjoLuHdY,831
107
115
  orchestrator/db/listeners.py,sha256=UBPYcH0FE3a7aZQu_D0O_JMXpXIRYXC0gjSAvlv5GZo,1142
108
116
  orchestrator/db/loaders.py,sha256=ez6JzQ3IKVkC_oLAkVlIIiI8Do7hXbdcPKCvUSLxRog,7962
109
- orchestrator/db/models.py,sha256=9XOppPkXlbILM3M87wgaItsE8BKLNdnyyfeiSfYuYQ8,27502
117
+ orchestrator/db/models.py,sha256=bFyTiQGndaEMaNMl9GegPBj5018eBPvA8OMLcF94NIM,28530
110
118
  orchestrator/db/filters/__init__.py,sha256=RUj6P0XxEBhYj0SN5wH5-Vf_Wt_ilZR_n9DSar5m9oM,371
111
119
  orchestrator/db/filters/filters.py,sha256=55RtpQwM2rhrk4A6CCSeSXoo-BT9GnQoNTryA8CtLEg,5020
112
120
  orchestrator/db/filters/process.py,sha256=xvGhyfo_MZ1xhLvFC6yULjcT4mJk0fKc1glJIYgsWLE,4018
@@ -131,7 +139,7 @@ orchestrator/db/sorting/sorting.py,sha256=WpwImCDRKiOp4Tr54vovWpHkoJIov8SNQNPods
131
139
  orchestrator/db/sorting/subscription.py,sha256=uepBMyfRFLZz5yoYK4VK3mdRBvO1Gc-6jSQXQ41fR-8,1441
132
140
  orchestrator/db/sorting/workflow.py,sha256=6-JceMyB99M994Re58E0MX5uhlpnTW5OJCxmXopEfRU,576
133
141
  orchestrator/devtools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
- orchestrator/devtools/populator.py,sha256=-8i3KDDP1cRgwiDKuYmomwrSlbmcMhpAaEaDvhyIbk4,19688
142
+ orchestrator/devtools/populator.py,sha256=U7j5Gvu5mU8kvqx9jfno25aYyD5GFSk9ZQ2zYSagQOI,20399
135
143
  orchestrator/devtools/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
144
  orchestrator/devtools/scripts/migrate_20.py,sha256=8-qLiWfjYctu2kNl5MHtZvfeCdUs0YzRjepy4VYOUkc,4891
137
145
  orchestrator/devtools/scripts/migrate_30.py,sha256=pRnJQFvmliwTLgbbDSUGyS9sCWqQcTms-g_3yfUO5vQ,3030
@@ -142,11 +150,11 @@ orchestrator/distlock/managers/__init__.py,sha256=ImIkNsrXcyE7-NgRWqEhUXUuUzda9K
142
150
  orchestrator/distlock/managers/memory_distlock_manager.py,sha256=HWQafcVKBF-Cka_wukZZ1GM69AWPVOpJPje3quIebQ8,3114
143
151
  orchestrator/distlock/managers/redis_distlock_manager.py,sha256=DXtMhC8qtxiFO6xU9qYXHZQnCLjlmGBpeyfLA0vbRP0,3369
144
152
  orchestrator/domain/__init__.py,sha256=20DhXQPKY0g3rTgCkRlNDY58sLviToOVF8NPoex9WJc,936
145
- orchestrator/domain/base.py,sha256=jjMxJvt0GyaTff_z490lmkqDCtitkh0oA4GygB60n4s,69939
153
+ orchestrator/domain/base.py,sha256=8_f4zmaKHIy4JtyY_QgLoF8_-llgW9-7QOfqAJgacEw,69894
146
154
  orchestrator/domain/context_cache.py,sha256=vT1a01MBSBIaokoShK9KwjItd7abNmz7cXaF67VRZK8,2508
147
155
  orchestrator/domain/customer_description.py,sha256=RU_pcgCIZjjFfDsY45lfV0z6ATlS1NXtB0E7eH3UcYQ,3190
148
156
  orchestrator/domain/helpers.py,sha256=D9O2duhCAZGmm39u-9ggvU-X2JsCbIS607kF77-r8QM,2549
149
- orchestrator/domain/lifecycle.py,sha256=kGR0AFVOSUBlzdhgRr11CUnF26wbBYIjz8uKb_qPCg0,2922
157
+ orchestrator/domain/lifecycle.py,sha256=FO31mhgtHbq5H3Qr9vzA36PxSLu_icJqcuqFex0PQnk,3823
150
158
  orchestrator/domain/subscription_instance_transform.py,sha256=j_d49dFcSss0dl-BHS-ev2faLbE0y8hLvCfrzui6C74,4360
151
159
  orchestrator/forms/__init__.py,sha256=bw_1238HKy_T0gvfA5oEjJFwkALzvWU4O_VJ0xE8UyU,1168
152
160
  orchestrator/forms/validators/__init__.py,sha256=2T7w429dQhChsAbnQDeyp2BrM_iKj6-nkNrz27RZatY,1906
@@ -213,7 +221,7 @@ orchestrator/migrations/README,sha256=heMzebYwlGhnE8_4CWJ4LS74WoEZjBy-S-mIJRxAEK
213
221
  orchestrator/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
222
  orchestrator/migrations/alembic.ini,sha256=kMoADqhGeubU8xanILNaqm4oixLy9m4ngYtdGpZcc7I,873
215
223
  orchestrator/migrations/env.py,sha256=M_cPoAL2axuuup5fvMy8I_WTPHEw0RbPEHkhZ3QEGoE,3740
216
- orchestrator/migrations/helpers.py,sha256=CAGGKhxpmhyKGfYcO-SUCPfMTOCZPfEpkJrcm2MYfcE,47979
224
+ orchestrator/migrations/helpers.py,sha256=sgSNZzQFHGT9_nboxwp_ryP2CWQZsSqEg_0i4giIM2k,48248
217
225
  orchestrator/migrations/script.py.mako,sha256=607Zrgp-Z-m9WGLt4wewN1QDOmHeifxcePUdADkSZyM,510
218
226
  orchestrator/migrations/templates/alembic.ini.j2,sha256=8v7UbKvOiWEbEKQa-Au3uONKUuYx6aflulYanZX6r2I,883
219
227
  orchestrator/migrations/templates/env.py.j2,sha256=LIt0ildZTZvNEx3imhy4GNzfFi_rPZg-8H7rGgrBOP8,2717
@@ -263,18 +271,60 @@ orchestrator/schemas/process.py,sha256=UACBNt-4g4v9Y528u-gZ-Wk7YxwJHhnI4cEu5CtQm
263
271
  orchestrator/schemas/product.py,sha256=MhMCh058ZuS2RJq-wSmxIPUNlhQexxXIx3DSz2OmOh4,1570
264
272
  orchestrator/schemas/product_block.py,sha256=kCqvm6qadHpegMr9aWI_fYX-T7mS-5S-ldPxnGQZg7M,1519
265
273
  orchestrator/schemas/resource_type.py,sha256=VDju4XywcDDLxdpbWU62RTvR9QF8x_GRrpTlN_NE8uI,1064
274
+ orchestrator/schemas/search.py,sha256=Q89GAPrmHf2DnwTJiPMYog1xAIC3QMJ3IItFZdVVFXg,3417
266
275
  orchestrator/schemas/subscription.py,sha256=-jXyHZIed9Xlia18ksSDyenblNN6Q2yM2FlGELyJ458,3423
267
276
  orchestrator/schemas/subscription_descriptions.py,sha256=Ft_jw1U0bf9Z0U8O4OWfLlcl0mXCVT_qYVagBP3GbIQ,1262
268
- orchestrator/schemas/workflow.py,sha256=VqQ9XfV4fVd6MjY0LRRQzWBJHmlPsAamWfTwDx1cZkg,2102
277
+ orchestrator/schemas/workflow.py,sha256=StVoRGyNT2iIeq3z8BIlTPt0bcafzbeYxXRrCucR6LU,2146
278
+ orchestrator/search/__init__.py,sha256=2uhTQexKx-cdBP1retV3CYSNCs02s8WL3fhGvupRGZk,571
279
+ orchestrator/search/llm_migration.py,sha256=BklTa8xg85b26j4dadRji_tjaIWU3L0a9B3buwuld0E,4475
280
+ orchestrator/search/agent/__init__.py,sha256=_b7Q43peWSi2bb3-69CThAqt_sxgoaMbHeq6erLGR00,752
281
+ orchestrator/search/agent/agent.py,sha256=zhDyXwRf118vH96CmKRbo5O8GKl_mnLJTDNfWgvsKeE,2450
282
+ orchestrator/search/agent/prompts.py,sha256=-1VLYwPecC6xroKQTc9AE9MTtg_ffAUfHUi8ZATyUMg,4556
283
+ orchestrator/search/agent/state.py,sha256=1WHYol5UlYpq2QZz-BVsBFYrJZms5P18ohN2Ur8P2F4,783
284
+ orchestrator/search/agent/tools.py,sha256=4kvY0tG7i5-w8C-ZMuSabxb_sJmd_TpFl3F4xeGgzok,9513
285
+ orchestrator/search/core/__init__.py,sha256=q5G0z3nKjIHKFs1PkEG3nvTUy3Wp4kCyBtCbqUITj3A,579
286
+ orchestrator/search/core/embedding.py,sha256=ESeI5Vcobb__CRRZE_RP-m4eAz8JUP8S16aGLJh4uAY,2751
287
+ orchestrator/search/core/exceptions.py,sha256=qp7ZdyDvN5b2HD5_oZXMgoLJgy79krpClszKh3KPuAw,1029
288
+ orchestrator/search/core/types.py,sha256=Gaf77cKUqnE8vJNCpk-g3h2U5912axhIgZZnF_0_O48,8831
289
+ orchestrator/search/core/validators.py,sha256=zktY5A3RTBmfdARJoxoz9rnnyTZj7L30Kbmh9UTQz2o,1204
290
+ orchestrator/search/docs/index.md,sha256=zKzE2fbtHDfYTKaHg628wAsqCTOJ5yFUWV0ucFH3pAg,863
291
+ orchestrator/search/docs/running_local_text_embedding_inference.md,sha256=OR0NVZMb8DqpgXYxlwDUrJwfRk0bYOk1-LkDMqsV6bU,1327
292
+ orchestrator/search/filters/__init__.py,sha256=Yutr21lv8RtZf5OKaBozlYufgmmV2QHuzAPPjvUamLE,1222
293
+ orchestrator/search/filters/base.py,sha256=lUr0eW0zi4oIMVUHuRD3GAQ9xEbHiFUl_EfAI6ABPVo,12456
294
+ orchestrator/search/filters/date_filters.py,sha256=0a6nbUTK647_Qf4XXZMLDvBLVjF5Qqy9eJ-9SrTGaGg,3040
295
+ orchestrator/search/filters/definitions.py,sha256=wl2HiXlTWXQN4JmuSq2SBuhTMvyIeonTtUZoCrJAK6M,4093
296
+ orchestrator/search/filters/ltree_filters.py,sha256=1OOmM5K90NsGBQmTqyoDlphdAOGd9r2rmz1rNItm8yk,2341
297
+ orchestrator/search/filters/numeric_filter.py,sha256=lcOAOpPNTwA0SW8QPiMOs1oKTYZLwGDQSrwFydXgMUU,2774
298
+ orchestrator/search/indexing/__init__.py,sha256=Or78bizNPiuNOgwLGJQ0mspCF1G_gSe5C9Ap7qi0MZk,662
299
+ orchestrator/search/indexing/indexer.py,sha256=puYOL7IXyJi7A7huT1jQ_2G3YZimeivkQJF2BZR4apQ,14866
300
+ orchestrator/search/indexing/registry.py,sha256=zEOUmQDmZHJ4xzT63VSJzuuHWVTnuBSvhZg4l6lFTUU,3048
301
+ orchestrator/search/indexing/tasks.py,sha256=vmS1nnprPF74yitS0xGpP1dhSDis2nekMYF0v_jduDE,2478
302
+ orchestrator/search/indexing/traverse.py,sha256=NKkKSri-if1d1vwzTQlDCF0hvBdB2IbWWuMdPrQ78Jg,14330
303
+ orchestrator/search/retrieval/__init__.py,sha256=JP5WGYhmjd2RKXEExorvU6koMBLsTLdlDGCR_r1t8ug,645
304
+ orchestrator/search/retrieval/builder.py,sha256=70cEvbsWI1dj-4H-LJq4o6Q71e3WERd-V6bzlZhGtHw,4607
305
+ orchestrator/search/retrieval/engine.py,sha256=jHxKuULcsqkdTyh9NEzBCsOnBaZzlbvcGseJoJec1yw,6147
306
+ orchestrator/search/retrieval/exceptions.py,sha256=oHoLGLLxxmVcV-W36uK0V-Pn4vf_iw6hajpQbap3NqI,3588
307
+ orchestrator/search/retrieval/pagination.py,sha256=bRcXtWxxWvOhCQyhjwfJ7S6q_Dn3pYm8TCg7ofjVP44,3353
308
+ orchestrator/search/retrieval/utils.py,sha256=svhF9YfMClq2MVPArS3ir3pg5_e_bremquv_l6tTsOQ,4597
309
+ orchestrator/search/retrieval/validation.py,sha256=AjhttVJWlZDaT1_pUL_LaypQV11U21JpTCE4OwnpoqA,5849
310
+ orchestrator/search/retrieval/retrievers/__init__.py,sha256=1bGmbae0GYRM6e1vxf0ww79NaTSmfOMe9S0pPVmh3CM,897
311
+ orchestrator/search/retrieval/retrievers/base.py,sha256=Sp8h992lw_7vigE4s2QB0gqtqMACEOA8nDnhuXXHtxA,4570
312
+ orchestrator/search/retrieval/retrievers/fuzzy.py,sha256=U_WNAaxSUVUlVrmFrYFt-s0ebw9ift1Z2zBHG8TSPLE,3839
313
+ orchestrator/search/retrieval/retrievers/hybrid.py,sha256=YriY3gF6E7pQUumqdSDSyFJvYQbZZ6vSsMUhM5JHGpg,11102
314
+ orchestrator/search/retrieval/retrievers/semantic.py,sha256=oWNJ9DuqM16BXYXUwmRmkfDmp_2vQH2PySNMk8TcvVk,3961
315
+ orchestrator/search/retrieval/retrievers/structured.py,sha256=OHsHEjjLg1QwtEytQNeyWcCBQd8rJxHVf59HxvA9_vc,1452
316
+ orchestrator/search/schemas/__init__.py,sha256=q5G0z3nKjIHKFs1PkEG3nvTUy3Wp4kCyBtCbqUITj3A,579
317
+ orchestrator/search/schemas/parameters.py,sha256=aglbVvvM_gT-zTpVQh05wIUnfn2mD1JKIiWH_VaTqaM,4690
318
+ orchestrator/search/schemas/results.py,sha256=EsbYS8XJ8r5JoN17N4z1lHIShgg7RW973mi6yILcHOI,1987
269
319
  orchestrator/services/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
270
320
  orchestrator/services/fixed_inputs.py,sha256=kyz7s2HLzyDulvcq-ZqefTw1om86COvyvTjz0_5CmgI,876
271
321
  orchestrator/services/input_state.py,sha256=6BZOpb3cHpO18K-XG-3QUIV9pIM25_ufdODrp5CmXG4,2390
272
322
  orchestrator/services/process_broadcast_thread.py,sha256=D44YbjF8mRqGuznkRUV4SoRn1J0lfy_x1H508GnSVlU,4649
273
- orchestrator/services/processes.py,sha256=V-BHR8-9qw5cFHRuBJK8UkRQgCwQxFQbOnnwpKzJm0o,30599
323
+ orchestrator/services/processes.py,sha256=LpJbq13UJOrNUKorwYBTV4-MJj-XLXFv6LBk7iyQgl8,30622
274
324
  orchestrator/services/products.py,sha256=BP4KyE8zO-8z7Trrs5T6zKBOw53S9BfBJnHWI3p6u5Y,1943
275
325
  orchestrator/services/resource_types.py,sha256=_QBy_JOW_X3aSTqH0CuLrq4zBJL0p7Q-UDJUcuK2_qc,884
276
326
  orchestrator/services/settings.py,sha256=HEWfFulgoEDwgfxGEO__QTr5fDiwNBEj1UhAeTAdbLQ,3159
277
- orchestrator/services/settings_env_variables.py,sha256=iPErQjqPQCxKs0sPhefB16d8SBBVUi6eiRnFBK5bgqA,2196
327
+ orchestrator/services/settings_env_variables.py,sha256=6im2hB69KGRaqA2eskJfjgTIgfY405sHpZTnX_QQVJ4,2216
278
328
  orchestrator/services/subscription_relations.py,sha256=aIdyzwyyy58OFhwjRPCPgnQTUTmChu6SeSQRIleQoDE,13138
279
329
  orchestrator/services/subscriptions.py,sha256=XhJ5ygAAyWUIZHULhKyi1uU5DwkKZhzdxxn9vdQZYiA,27281
280
330
  orchestrator/services/tasks.py,sha256=mR3Fj1VsudltpanJKI2PvrxersyhVQ1skp8H7r3XnYI,5288
@@ -301,7 +351,7 @@ orchestrator/utils/json.py,sha256=7386sdqkrKYyy4sbn5NscwctH_v1hLyw5172P__rU3g,83
301
351
  orchestrator/utils/redis.py,sha256=BjUNmrKx8YVyJIucl2mhXubK6WV-49OnAU6rPMOZpM0,4469
302
352
  orchestrator/utils/redis_client.py,sha256=9rhsvedjK_CyClAjUicQyge0mVIViATqKFGZyjBY3XA,1384
303
353
  orchestrator/utils/search_query.py,sha256=ji5LHtrzohGz6b1IG41cnPdpWXzLEzz4SGWgHly_yfU,16205
304
- orchestrator/utils/state.py,sha256=RYKVlvKDBfsBdDk9wHjZKBTlQJbV4SqtCotAlTA2-bI,14021
354
+ orchestrator/utils/state.py,sha256=ELH08cxvpmpnJg_ae0sMi9m_QX6SqHxNzOFaJgyW9gM,14344
305
355
  orchestrator/utils/strings.py,sha256=N0gWjmQaMjE9_99VtRvRaU8IBLTKMgBKSXcTZ9TpWAg,1077
306
356
  orchestrator/utils/validate_data_version.py,sha256=3Eioy2wE2EWKSgkyMKcEKrkCAfUIAq-eb73iRcpgppw,184
307
357
  orchestrator/websocket/__init__.py,sha256=V79jskk1z3uPIYgu0Gt6JLzuqr7NGfNeAZ-hbBqoUv4,5745
@@ -311,15 +361,15 @@ orchestrator/websocket/managers/memory_websocket_manager.py,sha256=lF5EEx1iFMCGE
311
361
  orchestrator/workflows/__init__.py,sha256=NzIGGI-8SNAwCk2YqH6sHhEWbgAY457ntDwjO15N8v4,4131
312
362
  orchestrator/workflows/modify_note.py,sha256=eXt5KQvrkOXf-3YEXCn2XbBLP9N-n1pUYRW2t8Odupo,2150
313
363
  orchestrator/workflows/removed_workflow.py,sha256=V0Da5TEdfLdZZKD38ig-MTp3_IuE7VGqzHHzvPYQmLI,909
314
- orchestrator/workflows/steps.py,sha256=CZxfzkG5ANJYwuYTkQ4da2RpQqIjXCtey_Uy1ezRAZ4,6479
364
+ orchestrator/workflows/steps.py,sha256=teis7vHLOEAchMrzw_pvPPQ6pRFliKZRpe02vsv3AZY,6994
315
365
  orchestrator/workflows/utils.py,sha256=VUCDoIl5XAKtIeAJpVpyW2pCIg3PoVWfwGn28BYlYhA,15424
316
366
  orchestrator/workflows/tasks/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
317
367
  orchestrator/workflows/tasks/cleanup_tasks_log.py,sha256=BfWYbPXhnLAHUJ0mlODDnjZnQQAvKCZJDVTwbwOWI04,1624
318
368
  orchestrator/workflows/tasks/resume_workflows.py,sha256=T3iobSJjVgiupe0rClD34kUZ7KF4pL5yK2AVeRLZog8,4313
319
369
  orchestrator/workflows/tasks/validate_product_type.py,sha256=paG-NAY1bdde3Adt8zItkcBKf5Pxw6f5ngGW6an6dYU,3192
320
- orchestrator/workflows/tasks/validate_products.py,sha256=GZJBoFF-WMphS7ghMs2-gqvV2iL1F0POhk0uSNt93n0,8510
370
+ orchestrator/workflows/tasks/validate_products.py,sha256=kXBGZTkobfYH8e_crhdErT-ypdouH0a3_WLImmbKXcE,8523
321
371
  orchestrator/workflows/translations/en-GB.json,sha256=ST53HxkphFLTMjFHonykDBOZ7-P_KxksktZU3GbxLt0,846
322
- orchestrator_core-4.4.2.dist-info/licenses/LICENSE,sha256=b-aA5OZQuuBATmLKo_mln8CQrDPPhg3ghLzjPjLn4Tg,11409
323
- orchestrator_core-4.4.2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
324
- orchestrator_core-4.4.2.dist-info/METADATA,sha256=d_eBH7IDJyDV0WlfpxwHzzriuKoGhUAm7A5hxDvGi5o,5964
325
- orchestrator_core-4.4.2.dist-info/RECORD,,
372
+ orchestrator_core-4.5.0.dist-info/licenses/LICENSE,sha256=b-aA5OZQuuBATmLKo_mln8CQrDPPhg3ghLzjPjLn4Tg,11409
373
+ orchestrator_core-4.5.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
374
+ orchestrator_core-4.5.0.dist-info/METADATA,sha256=e0YOsOdZ6qAneyXj-ANE0fFlpOXkWDSfHPRBvnJNMRk,6250
375
+ orchestrator_core-4.5.0.dist-info/RECORD,,