orchestrator-core 4.6.0rc2__py3-none-any.whl → 4.6.0rc3__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.
orchestrator/__init__.py CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  """This is the orchestrator workflow engine."""
15
15
 
16
- __version__ = "4.6.0rc2"
16
+ __version__ = "4.6.0rc3"
17
17
 
18
18
 
19
19
  from structlog import get_logger
@@ -26,7 +26,7 @@ from orchestrator.cli.main import app as cli_app
26
26
  from orchestrator.llm_settings import LLMSettings, llm_settings
27
27
 
28
28
  if TYPE_CHECKING:
29
- from pydantic_ai.models.openai import OpenAIModel
29
+ from pydantic_ai.models.openai import OpenAIChatModel
30
30
 
31
31
  logger = get_logger(__name__)
32
32
 
@@ -36,7 +36,7 @@ class LLMOrchestratorCore(OrchestratorCore):
36
36
  self,
37
37
  *args: Any,
38
38
  llm_settings: LLMSettings = llm_settings,
39
- agent_model: "OpenAIModel | str | None" = None,
39
+ agent_model: "OpenAIChatModel | str | None" = None,
40
40
  **kwargs: Any,
41
41
  ) -> None:
42
42
  """Initialize the `LLMOrchestratorCore` class.
@@ -20,7 +20,6 @@ from pydantic_ai.agent import Agent
20
20
  from starlette.responses import Response
21
21
  from structlog import get_logger
22
22
 
23
- from orchestrator.llm_settings import llm_settings
24
23
  from orchestrator.search.agent import build_agent_instance
25
24
  from orchestrator.search.agent.state import SearchState
26
25
 
@@ -29,12 +28,12 @@ logger = get_logger(__name__)
29
28
 
30
29
 
31
30
  @cache
32
- def get_agent() -> Agent[StateDeps[SearchState], str]:
31
+ def get_agent(request: Request) -> Agent[StateDeps[SearchState], str]:
33
32
  """Dependency to provide the agent instance.
34
33
 
35
34
  The agent is built once and cached for the lifetime of the application.
36
35
  """
37
- return build_agent_instance(llm_settings.AGENT_MODEL)
36
+ return build_agent_instance(request.app.agent_model)
38
37
 
39
38
 
40
39
  @router.post("/")
@@ -10,14 +10,31 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
+ from typing import Annotated
14
+
13
15
  from pydantic import Field, field_validator
14
16
  from pydantic_settings import BaseSettings
15
17
  from structlog import get_logger
16
18
 
17
19
  logger = get_logger(__name__)
18
20
 
21
+ EMBEDDING_DIMENSION_MIN = 200
22
+ EMBEDDING_DIMENSION_MAX = 2000
23
+ EMBEDDING_DIMENSION_DEFAULT = 1536
24
+
25
+ EMBEDDING_DIMENSION_FIELD = Annotated[
26
+ int,
27
+ Field(
28
+ ge=EMBEDDING_DIMENSION_MIN,
29
+ le=EMBEDDING_DIMENSION_MAX,
30
+ default=EMBEDDING_DIMENSION_DEFAULT,
31
+ description="Embedding dimension: when embeddings are generated at a higher resolution than this setting, the least significant numbers will be truncated",
32
+ ),
33
+ ]
34
+
19
35
 
20
36
  class LLMSettings(BaseSettings):
37
+
21
38
  # Feature flags for LLM functionality
22
39
  SEARCH_ENABLED: bool = False # Enable search/indexing with embeddings
23
40
  AGENT_ENABLED: bool = False # Enable agentic functionality
@@ -27,7 +44,7 @@ class LLMSettings(BaseSettings):
27
44
  AGENT_MODEL_VERSION: str = "2025-01-01-preview"
28
45
  OPENAI_API_KEY: str = "" # Change per provider (Azure, etc).
29
46
  # Embedding settings
30
- EMBEDDING_DIMENSION: int = 1536
47
+ EMBEDDING_DIMENSION: EMBEDDING_DIMENSION_FIELD = 1536
31
48
  EMBEDDING_MODEL: str = "openai/text-embedding-3-small" # See litellm docs for supported models.
32
49
  EMBEDDING_SAFE_MARGIN_PERCENT: float = Field(
33
50
  0.1, description="Safety margin as a percentage (e.g., 0.1 for 10%) for token budgeting.", ge=0, le=1
@@ -16,7 +16,7 @@ from typing import Any
16
16
  import structlog
17
17
  from pydantic_ai.ag_ui import StateDeps
18
18
  from pydantic_ai.agent import Agent
19
- from pydantic_ai.models.openai import OpenAIModel
19
+ from pydantic_ai.models.openai import OpenAIChatModel
20
20
  from pydantic_ai.settings import ModelSettings
21
21
  from pydantic_ai.toolsets import FunctionToolset
22
22
 
@@ -28,12 +28,12 @@ logger = structlog.get_logger(__name__)
28
28
 
29
29
 
30
30
  def build_agent_instance(
31
- model: str | OpenAIModel, agent_tools: list[FunctionToolset[Any]] | None = None
31
+ model: str | OpenAIChatModel, agent_tools: list[FunctionToolset[Any]] | None = None
32
32
  ) -> Agent[StateDeps[SearchState], str]:
33
33
  """Build and configure the search agent instance.
34
34
 
35
35
  Args:
36
- model: The LLM model to use (string or OpenAIModel instance)
36
+ model: The LLM model to use (string or OpenAIChatModel instance)
37
37
  agent_tools: Optional list of additional toolsets to include
38
38
 
39
39
  Returns:
@@ -42,7 +42,7 @@ class EmbeddingIndexer:
42
42
  max_retries=llm_settings.LLM_MAX_RETRIES,
43
43
  )
44
44
  data = sorted(resp.data, key=lambda e: e["index"])
45
- return [row["embedding"] for row in data]
45
+ return [row["embedding"][: llm_settings.EMBEDDING_DIMENSION] for row in data]
46
46
  except (llm_exc.APIError, llm_exc.APIConnectionError, llm_exc.RateLimitError, llm_exc.Timeout) as e:
47
47
  logger.error("Embedding request failed", error=str(e))
48
48
  return [[] for _ in texts]
@@ -67,7 +67,7 @@ class QueryEmbedder:
67
67
  timeout=5.0,
68
68
  max_retries=0, # No retries, prioritize speed.
69
69
  )
70
- return resp.data[0]["embedding"]
70
+ return resp.data[0]["embedding"][: llm_settings.EMBEDDING_DIMENSION]
71
71
  except Exception as e:
72
72
  logger.error("Async embedding generation failed", error=str(e))
73
73
  return []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orchestrator-core
3
- Version: 4.6.0rc2
3
+ Version: 4.6.0rc3
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
@@ -1,8 +1,8 @@
1
- orchestrator/__init__.py,sha256=5uPIbvZOqPTKQJ_tm9IcleuirD5gawR8uclr2-asW9Q,1450
2
- orchestrator/agentic_app.py,sha256=6C_-pbw4xLJah8--CPcopz6dym4V7AfX2DtAYIGljmk,3020
1
+ orchestrator/__init__.py,sha256=4xARck_KGcUMZ2sp8i379W7wwCUi1Fhs333T_FD2L0M,1450
2
+ orchestrator/agentic_app.py,sha256=ouiyyZiS4uS6Lox2DtbGGRnb2njJBMSHpSAGe-T5rX0,3028
3
3
  orchestrator/app.py,sha256=UPKQuDpg8MWNC6r3SRRbp6l9RBzwb00IMIaGRk-jbCU,13203
4
4
  orchestrator/exception_handlers.py,sha256=UsW3dw8q0QQlNLcV359bIotah8DYjMsj2Ts1LfX4ClY,1268
5
- orchestrator/llm_settings.py,sha256=UDehiEVXkRMfmPSfCTHQX8dtH2gLCGtZK_wQTU3yISg,2316
5
+ orchestrator/llm_settings.py,sha256=dU6fHcInyP3UzFlr3h4b-P7WyHdm04NM7ZDu1XnLAsQ,2816
6
6
  orchestrator/log_config.py,sha256=1cPl_OXT4tEUyNxG8cwIWXrmadUm1E81vq0mdtrV-v4,1912
7
7
  orchestrator/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  orchestrator/security.py,sha256=iXFxGxab54aav7oHEKLAVkTgrQMJGHy6IYLojEnD7gI,2422
@@ -18,7 +18,7 @@ orchestrator/api/models.py,sha256=z9BDBx7uI4KBHWbD_LVrLsqNQ0_w-Mg9Qiy7PR_rZhk,59
18
18
  orchestrator/api/api_v1/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
19
19
  orchestrator/api/api_v1/api.py,sha256=1qQRsIxKXLW3kcmSV5u3_v1TZk5RcNWb4ZOyLguhTKY,3488
20
20
  orchestrator/api/api_v1/endpoints/__init__.py,sha256=GyHNfEFCGKQwRiN6rQmvSRH2iYX7npjMZn97n8XzmLU,571
21
- orchestrator/api/api_v1/endpoints/agent.py,sha256=BmsW0UDn9Cr2CBJTGfqrvYAmgZj0VNHk3WiPFFSilEU,1768
21
+ orchestrator/api/api_v1/endpoints/agent.py,sha256=9_s3nchTr9ua_1Sxs0kJl2mH_20o-DlUaaQPmY4vRMk,1732
22
22
  orchestrator/api/api_v1/endpoints/health.py,sha256=iaxs1XX1_250_gKNsspuULCV2GEMBjbtjsmfQTOvMAI,1284
23
23
  orchestrator/api/api_v1/endpoints/processes.py,sha256=OVbt6FgFnJ4aHaYGIg0cPoim8mxDpdzJ4TGAyfB_kPw,16269
24
24
  orchestrator/api/api_v1/endpoints/product_blocks.py,sha256=kZ6ywIOsS_S2qGq7RvZ4KzjvaS1LmwbGWR37AKRvWOw,2146
@@ -280,13 +280,13 @@ orchestrator/search/__init__.py,sha256=2uhTQexKx-cdBP1retV3CYSNCs02s8WL3fhGvupRG
280
280
  orchestrator/search/export.py,sha256=_0ncVpTqN6AoQfW3WX0fWnDQX3hBz6ZGC31Beu4PVwQ,6678
281
281
  orchestrator/search/llm_migration.py,sha256=tJAfAoykMFIROQrKBKpAbDaGYDLKcmevKWjYrsBmuAY,6703
282
282
  orchestrator/search/agent/__init__.py,sha256=_O4DN0MSTUtr4olhyE0-2hsb7x3f_KURMCYjg8jV4QA,756
283
- orchestrator/search/agent/agent.py,sha256=EFhbv7tRTcdk2i9iFzuiGFjcu0N-j8yZprhbwc5oBeM,2063
283
+ orchestrator/search/agent/agent.py,sha256=iWa4_achqh5zRIfcJvjmY3hmDuFVGpV_PxjgttLdokU,2075
284
284
  orchestrator/search/agent/json_patch.py,sha256=_Z5ULhLyeuOuy-Gr_DJR4eA-wo9F78qySKUt5F_SQvQ,1892
285
285
  orchestrator/search/agent/prompts.py,sha256=6EPubiSLFyICIeinfVUF6miU1nS2QTAhqgzm-l5O3PI,5810
286
286
  orchestrator/search/agent/state.py,sha256=WhvZu7N0NhD1DD5mfZSUAzYN4mu8dDyvQ4Tz9I-hLtg,1364
287
287
  orchestrator/search/agent/tools.py,sha256=m4Krtb-Qmep-JkbJ9-RC7QqKa0CuQJM6-Z6_PN-b8HU,14706
288
288
  orchestrator/search/core/__init__.py,sha256=q5G0z3nKjIHKFs1PkEG3nvTUy3Wp4kCyBtCbqUITj3A,579
289
- orchestrator/search/core/embedding.py,sha256=ESeI5Vcobb__CRRZE_RP-m4eAz8JUP8S16aGLJh4uAY,2751
289
+ orchestrator/search/core/embedding.py,sha256=n16H5fZRlfn91wI8PfZPa1R39HwQd8T1nwlDOzcOUBU,2823
290
290
  orchestrator/search/core/exceptions.py,sha256=S_ZMEhrqsQBVqJ559FQ5J6tZU6BYLiU65AGWgSvgv_k,1159
291
291
  orchestrator/search/core/types.py,sha256=0U_m4ZmPwvL77hIx9yk7UyvkE8HoiRvEnGdY4mDLzCo,8853
292
292
  orchestrator/search/core/validators.py,sha256=zktY5A3RTBmfdARJoxoz9rnnyTZj7L30Kbmh9UTQz2o,1204
@@ -373,7 +373,7 @@ orchestrator/workflows/tasks/resume_workflows.py,sha256=T3iobSJjVgiupe0rClD34kUZ
373
373
  orchestrator/workflows/tasks/validate_product_type.py,sha256=lo2TX_MZOfcOmYFjLyD82FrJ5AAN3HOsE6BhDVFuy9Q,3210
374
374
  orchestrator/workflows/tasks/validate_products.py,sha256=GZJBoFF-WMphS7ghMs2-gqvV2iL1F0POhk0uSNt93n0,8510
375
375
  orchestrator/workflows/translations/en-GB.json,sha256=ST53HxkphFLTMjFHonykDBOZ7-P_KxksktZU3GbxLt0,846
376
- orchestrator_core-4.6.0rc2.dist-info/licenses/LICENSE,sha256=b-aA5OZQuuBATmLKo_mln8CQrDPPhg3ghLzjPjLn4Tg,11409
377
- orchestrator_core-4.6.0rc2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
378
- orchestrator_core-4.6.0rc2.dist-info/METADATA,sha256=otV2lyDTZ_ytfz5miako0btSnzsGdxbMZRxkSEDBtIs,6253
379
- orchestrator_core-4.6.0rc2.dist-info/RECORD,,
376
+ orchestrator_core-4.6.0rc3.dist-info/licenses/LICENSE,sha256=b-aA5OZQuuBATmLKo_mln8CQrDPPhg3ghLzjPjLn4Tg,11409
377
+ orchestrator_core-4.6.0rc3.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
378
+ orchestrator_core-4.6.0rc3.dist-info/METADATA,sha256=yl83UYnpanmL7aawkE34ZHG0uBALcvgHh2MBHoY7Oq8,6253
379
+ orchestrator_core-4.6.0rc3.dist-info/RECORD,,