Python API
Use the public domain contracts, application services, and reference adapters from your own Python application.
The public surface
| Import from | What you get |
|---|---|
| lumis_sdk.domain | Strict vendor-neutral contracts: incidents, evidence, diagnoses, truth states, playbooks, policies, proposals, approvals, verification, audit. |
| lumis_sdk.application | DiagnosisService, EvidenceService, ProposalService, learn_from_verification, and run_guarded_lifecycle. |
| lumis_sdk.ports | Replaceable capability protocols for evidence, model, memory, reporting, context, policy, approval, verification, and audit. |
| lumis_sdk.adapters | Reference implementations: deterministic rules, SQLite memory, local JSON evidence, Markdown/JSON reports, webhook normalization, plugin catalog. |
| lumis_sdk.config | load_config, load_diagnosis_rule, migrate_config_file, and the strict v1 document models. |
| lumis_sdk.testkit | Deterministic fakes, fixture builders, and reusable contract assertions for CI. |
| lumis_sdk.evaluation | Deterministic replay evaluation over versioned corpora. |
A first diagnosis
python
import asyncio
from pathlib import Path
from lumis_sdk.application import DiagnosisService
from lumis_sdk.config import load_config
from lumis_sdk.domain import IncidentInput
config = load_config(Path("lumis.yml"))
service = DiagnosisService(rules=config.rules)
incident = IncidentInput(
source_tool="local-log",
pipeline_name=config.project,
raw_payload={"log": "ERROR KeyError: customer_id"},
)
diagnosis = asyncio.run(service.diagnose(incident))DiagnosisService always runs the deterministic adapter first. Unknown results may route through a ModelGateway only when policy and dependency injection both allow it—there is nothing to disable, because nothing is enabled by default.
Strict contracts
Public domain models reject unknown fields. This makes integration mistakes visible immediately and prevents provider-specific data from silently leaking into core contracts. Everything is typed; mypy runs over the SDK source in CI.