plm-engine-core 1.0.2__tar.gz → 1.0.4__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.
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/PKG-INFO +1 -1
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/core_host/main.py +42 -12
- plm_engine_core-1.0.4/plm_engine_core/llm_catalog/model_list.yaml +57 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/llm_service.py +682 -682
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core.egg-info/PKG-INFO +1 -1
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core.egg-info/SOURCES.txt +1 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/pyproject.toml +13 -1
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_core_host_wave9_parity_smoke.py +260 -263
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/README.md +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/agent_runtime/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/agent_runtime/dispatcher.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/agent_runtime/selector.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/cli/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/cli/__main__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/cli/auth.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/_lint_fixtures/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/_lint_fixtures/violation_demo.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/capability_registry/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/capability_registry/errors.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/capability_registry/registry.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/connectors/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/connectors/dispatcher.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/connectors/runtime.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/dispatch.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/hitl/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/hitl/errors.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/hitl/gate.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/hitl/sql_store.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/identity/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/identity/middleware.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/identity/provider.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/identity/system_identity.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/identity/telemetry.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/knowledge/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/knowledge/curation_index.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/knowledge/envelope.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/knowledge/runtime.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/policies/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/policies/authorization.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/policies/autonomy_gating.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/policies/base.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/policies/cost_budget.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/policies/rate_limit.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/retry_policy.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/control_plane/run_task_tracker.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/core_host/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/core_host/__main__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/core_host/routers/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/core_host/routers/config.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/core_host/routers/health.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/core_host/settings.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/llm_catalog/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/llm_catalog/loader.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/mcp/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/mcp/asgi.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/mcp/errors.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/mcp/manifest.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/mcp/openapi.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/mcp/server.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/mcp/tools.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/agent_telemetry_service.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/database.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/database_service.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/default_bindings.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/invocation_context.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/invocation_lifecycle.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/invocation_telemetry.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/llm_env.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/plan_analysis_service.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/pricing_service.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/retry_orchestrator.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/retry_policy.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/run_task_tracker.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/scoped_state.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/token_estimator.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/runtime/workspace_port.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/studio/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/studio/readers/__init__.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core/studio/readers/mcrc_v1.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core.egg-info/dependency_links.txt +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core.egg-info/entry_points.txt +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core.egg-info/requires.txt +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/plm_engine_core.egg-info/top_level.txt +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/setup.cfg +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_authorization_policy.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_autonomy_gating_policy.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_capability_registry.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_cli_auth.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_connector_dispatcher.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_core_host_build_app.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_cost_budget_policy.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_error_code_mirror.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_hitl_gate.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_identity_middleware.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_identity_provider.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_import_linter.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_imports.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_knowledge_curation_index.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_knowledge_envelope.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_knowledge_runtime_adapter.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_mcp_asgi.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_mcp_server.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_mcrc_v1_reader.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_openapi.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_policy_pipeline_order.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_rate_limit_policy.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_retry_policy.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_run_task_tracker.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_skill_selector.py +0 -0
- {plm_engine_core-1.0.2 → plm_engine_core-1.0.4}/tests/test_system_identity.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plm-engine-core
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
4
4
|
Summary: TracePulse PLM Engine Core — control_plane (governance, autonomy, HITL, run lifecycle, trace propagation) + agent_runtime (selector, dispatcher, retry, escalation). US-CR.1 scaffold; behaviour lands in US-CR.0+. Internal one-way import contract: control_plane MUST NOT import from agent_runtime (mechanical enforcement in US-CR.2).
|
|
5
5
|
Author: TracePulse
|
|
6
6
|
License: Proprietary
|
|
@@ -59,6 +59,7 @@ from __future__ import annotations
|
|
|
59
59
|
import argparse
|
|
60
60
|
import logging
|
|
61
61
|
import os
|
|
62
|
+
from pathlib import Path
|
|
62
63
|
from typing import List, Optional
|
|
63
64
|
|
|
64
65
|
from fastapi import FastAPI
|
|
@@ -170,17 +171,6 @@ def _maybe_load_knowledge(host_settings: EngineHostSettings) -> None:
|
|
|
170
171
|
# wire_default_bindings).
|
|
171
172
|
from plm_shared.protocols.services.settings import settings
|
|
172
173
|
|
|
173
|
-
corpus_path = (
|
|
174
|
-
host_settings.engine_host_dictionnaries_path
|
|
175
|
-
or getattr(settings, "dictionnaries_path", "")
|
|
176
|
-
)
|
|
177
|
-
if not corpus_path:
|
|
178
|
-
raise RuntimeError(
|
|
179
|
-
"engine_host_knowledge: settings.dictionnaries_path is empty; "
|
|
180
|
-
"set ENGINE_HOST_DICTIONNARIES_PATH or configure dictionnaries_path "
|
|
181
|
-
"on the registered Settings instance."
|
|
182
|
-
)
|
|
183
|
-
|
|
184
174
|
try:
|
|
185
175
|
from plm_knowledge.knowledge_pack_loader import KnowledgePackLoader
|
|
186
176
|
from plm_knowledge.knowledge_search_engine import (
|
|
@@ -192,7 +182,47 @@ def _maybe_load_knowledge(host_settings: EngineHostSettings) -> None:
|
|
|
192
182
|
f"engine_host_knowledge: import failure — {exc!r}"
|
|
193
183
|
) from exc
|
|
194
184
|
|
|
195
|
-
|
|
185
|
+
# Wave 11+ — corpus resolution chain:
|
|
186
|
+
# 1. host_settings.engine_host_dictionnaries_path (env
|
|
187
|
+
# ENGINE_HOST_DICTIONNARIES_PATH) — explicit override
|
|
188
|
+
# 2. settings.dictionnaries_path from DI — usually populated
|
|
189
|
+
# via DICTIONNARIES_PATH env var; legacy default
|
|
190
|
+
# "../../01_Dictionnaries" is broken from any modern CWD and
|
|
191
|
+
# treated as "no preference" below
|
|
192
|
+
# 3. plm-knowledge v1.1.0+ bundled corpus (KnowledgePackLoader
|
|
193
|
+
# no-arg default resolves to <site-packages>/plm_knowledge/
|
|
194
|
+
# dictionnaries/) — the only path with a guarantee of
|
|
195
|
+
# existence on a fresh install
|
|
196
|
+
explicit_path = (
|
|
197
|
+
host_settings.engine_host_dictionnaries_path
|
|
198
|
+
or getattr(settings, "dictionnaries_path", "")
|
|
199
|
+
)
|
|
200
|
+
# The legacy ``../../01_Dictionnaries`` default carried by the
|
|
201
|
+
# pydantic-settings Settings class points at a monorepo layout
|
|
202
|
+
# that no longer exists; treat it as unset.
|
|
203
|
+
if explicit_path in ("", "../../01_Dictionnaries", "../01_Dictionnaries"):
|
|
204
|
+
explicit_path = ""
|
|
205
|
+
# Verify the resolved path exists; if not, fall through to bundled.
|
|
206
|
+
if explicit_path and not Path(explicit_path).exists():
|
|
207
|
+
logger.warning(
|
|
208
|
+
"engine_host_knowledge: configured path %s does not exist; "
|
|
209
|
+
"falling back to plm-knowledge bundled corpus",
|
|
210
|
+
explicit_path,
|
|
211
|
+
)
|
|
212
|
+
explicit_path = ""
|
|
213
|
+
|
|
214
|
+
if explicit_path:
|
|
215
|
+
loader = KnowledgePackLoader(explicit_path)
|
|
216
|
+
corpus_path = explicit_path
|
|
217
|
+
else:
|
|
218
|
+
# v1.1.0+ bundled corpus (no-arg default in KnowledgePackLoader)
|
|
219
|
+
loader = KnowledgePackLoader()
|
|
220
|
+
corpus_path = str(loader.root)
|
|
221
|
+
logger.info(
|
|
222
|
+
"engine_host_knowledge: using plm-knowledge bundled corpus at %s",
|
|
223
|
+
corpus_path,
|
|
224
|
+
)
|
|
225
|
+
|
|
196
226
|
loader.load()
|
|
197
227
|
engine = KnowledgeSearchEngine(loader)
|
|
198
228
|
set_engine(engine)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# US-471.15: Single source of truth for the LLM model catalog.
|
|
2
|
+
#
|
|
3
|
+
# Adding, removing, or reconfiguring a model is a one-file pull request — no
|
|
4
|
+
# Python change required. The backend dispatcher, the model picker, and the
|
|
5
|
+
# pricing layer all read from here.
|
|
6
|
+
#
|
|
7
|
+
# Schema:
|
|
8
|
+
# id LiteLLM-prefixed identifier; supports `${ENV_VAR}` tokens.
|
|
9
|
+
# provider One of: azure-openai | gemini | openai
|
|
10
|
+
# api_key_env Documentation-only: which env var gates availability.
|
|
11
|
+
# display_label Human-readable label shown in the picker.
|
|
12
|
+
# description Optional caption shown beneath the label.
|
|
13
|
+
# aliases Optional alternate ids (used to resolve legacy values).
|
|
14
|
+
# is_default At most one per provider should be marked as default.
|
|
15
|
+
# notes Optional free text surfaced in admin tooling.
|
|
16
|
+
# cost_per_input_token / cost_per_output_token Optional overrides used by
|
|
17
|
+
# services/pricing_service.py when LiteLLM has no price; consumed by
|
|
18
|
+
# Slice S8 (US-471.8).
|
|
19
|
+
|
|
20
|
+
version: 1
|
|
21
|
+
|
|
22
|
+
models:
|
|
23
|
+
# ----- Azure OpenAI -----
|
|
24
|
+
- id: azure/${AZURE_OPENAI_DEPLOYMENT}
|
|
25
|
+
provider: azure-openai
|
|
26
|
+
api_key_env: AZURE_OPENAI_API_KEY
|
|
27
|
+
display_label: Azure OpenAI (default deployment)
|
|
28
|
+
description: Primary Azure OpenAI deployment driven by AZURE_OPENAI_DEPLOYMENT
|
|
29
|
+
is_default: true
|
|
30
|
+
aliases:
|
|
31
|
+
- gpt-4 # legacy Agent.model_id
|
|
32
|
+
|
|
33
|
+
- id: azure/gpt-4o-mini
|
|
34
|
+
provider: azure-openai
|
|
35
|
+
api_key_env: AZURE_OPENAI_API_KEY
|
|
36
|
+
display_label: GPT-4o Mini (Azure)
|
|
37
|
+
description: Fast and cost-effective
|
|
38
|
+
|
|
39
|
+
# ----- Gemini -----
|
|
40
|
+
- id: gemini/gemini-1.5-flash
|
|
41
|
+
provider: gemini
|
|
42
|
+
api_key_env: GEMINI_API_KEY
|
|
43
|
+
display_label: Gemini 1.5 Flash
|
|
44
|
+
description: Fast Gemini model
|
|
45
|
+
|
|
46
|
+
- id: gemini/gemini-1.5-pro
|
|
47
|
+
provider: gemini
|
|
48
|
+
api_key_env: GEMINI_API_KEY
|
|
49
|
+
display_label: Gemini 1.5 Pro
|
|
50
|
+
description: Most capable Gemini model
|
|
51
|
+
|
|
52
|
+
# ----- OpenAI -----
|
|
53
|
+
- id: openai/gpt-4o
|
|
54
|
+
provider: openai
|
|
55
|
+
api_key_env: OPENAI_API_KEY
|
|
56
|
+
display_label: GPT-4o (OpenAI)
|
|
57
|
+
description: Most capable OpenAI model
|