Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

harborrag-runtime

Owns production composition, direct execution, and durable Temporal orchestration for HarborRAG ingestion. Framework-independent domain types and ports live in harborrag-core; adapters and the engine remain unaware of Temporal.

Package layout

src/harborrag_runtime/
  __init__.py       # lazy public facade
  contracts.py      # stable SDK request/response value objects
  document_stage_catalog.py # sandbox-safe document stage metadata
  temporal_models.py        # replay-safe routing/retry payload models
  errors.py         # runtime failures
  plugins.py        # entry-point plugin discovery and registration
  rate_limiting.py  # shared connector/provider rate limiting
  serialization.py  # replay-safe payload serialization
  tokenization.py   # token counting shared by chat and chunking
  sdk/
    __init__.py     # stable SDK facade
    runtime.py      # SDK lifecycle and service orchestration
    facades.py      # narrow ingestion/retrieval/graph facades
    configuration.py
  composition/
    control_plane.py # production repository assembly
    resources.py     # storage/control resource factories
  execution/
    contracts.py    # execution strategy protocols
    submission.py   # shared request-to-source translation
    direct.py       # inline execution strategy
    temporal.py     # durable execution strategy
  retrieval/
    contracts.py    # retrieval ports, policy, and reports
    composition.py  # retrieval resource assembly and lifecycle ownership
    service.py      # authoritative retrieval use case
    validation.py   # public and projection-boundary validation
  memory/
    __init__.py     # stable memory facade
    composition.py  # database resource assembly and migrations
    service.py      # database-backed conversation memory
  chat/
    __init__.py     # retrieval-grounded chat service
    prompts/        # packaged system prompt templates
  agent/
    __init__.py     # bounded multi-step agent service
    tool_specs.py   # shared tool schemas, also used by the MCP surface
  events/           # runtime event contracts and publication
  config/
    settings.py     # HARBORRAG_* process settings
    temporal.py     # validated Temporal client/worker configuration
    connectors/     # connector YAML loading and construction
    parsers/        # parser YAML loading and construction
  ingestion/
    composition.py       # runtime lifecycle and stable composition entry point
    runtime_builder.py   # production object-graph builder
    observability.py     # shared ingestion telemetry
    profiles.py          # processing-profile construction
    document/
      models.py          # document release contracts
      service.py         # one-document release application service
      pipeline.py        # ordered, independently retryable stages
      capture.py         # admission and raw/canonical capture
      materialization.py # canonical/chunk/representation materialization
      projection.py      # vector/graph publication
      lifecycle.py       # durable document-version transitions
      normalization.py   # connector normalization strategies
    source/
      models.py          # source request, plan, summary, and outcome contracts
      service.py         # source ingestion facade
      discovery.py       # descriptor discovery and admission planning
      documents.py       # document dispatch result recording
      retry.py           # artifact-first retry service
      finalization.py    # relation repair and removal reconciliation
      plan.py            # immutable source-plan persistence
    maintenance/
      cleanup.py         # projection cleanup
      projection_admin.py # tenant projection inspection/deletion
      relation_repair.py # structural relation-repair service
      reindex.py         # connector-free reindexing
      reindex_plan.py    # stale-lane selection policy
  temporal/
    client.py       # source/reindex submission and controls
    schemas.py      # small workflow-history contracts
    ingestion_activities.py   # twelve document-stage activity boundaries
    activity_observability.py
    source_workflow.py       # source orchestration workflow
    source_batch_workflow.py # bounded child-batch workflow
    document_workflow.py     # independently retryable document workflow
    retry_workflow.py        # failed-document retry workflows
    reindex_workflow.py      # projection reindex workflow
    worker.py       # six-queue worker process

The public harborrag_runtime.sdk module is a stable facade. Its data contracts, configuration parsing, execution strategies, and retrieval service live in focused modules behind that facade. Direct and Temporal strategies use the same submission builder, so execution mode does not change request identity or filtering semantics.

document_stage_catalog.py and temporal_models.py intentionally remain lightweight top-level modules. Temporal imports them inside its restricted workflow sandbox, so placing them below provider-owning packages would execute adapter initialization during workflow registration.

Resource lifecycle and runtime observation stay with the runtime components that own them. There is no generic lifecycle port, local job queue, scheduler, or supervisor: durable orchestration is Temporal's job, and the core repository ports in harborrag-core are the authoritative persistence contracts.

Temporal ingestion

SourceIngestionWorkflow
  -> SourceBatchWorkflow
       -> DocumentIngestionWorkflow
            fetch -> parse -> canonical -> chunk -> encode
                  -> vector + graph -> verify -> publish

Workflow history contains document-version identifiers and MinIO references, not raw documents, chunk bodies, tables, embeddings, or graph batches. Activities use Postgres as the publication authority and treat Qdrant and FalkorDB as rebuildable projections.

The worker builds one production IngestionRuntime graph per process from the configured connector, parser, model, state, object, vector, and graph settings:

export HARBORRAG_TEMPORAL_CONFIG_PATH=config/temporal.yaml
export HARBORRAG_CONNECTOR_CONFIG_PATH=config/connectors.yaml
export HARBORRAG_PARSER_CONFIG_PATH=config/parsers.yaml
export HARBORRAG_MODEL_CONFIG_PATH=config/models.yaml
python -m harborrag_runtime.temporal.worker

The Temporal YAML owns connection defaults, task queues, retry budgets, worker capacity, and timeouts. Environment values such as HARBORRAG_TEMPORAL_TARGET remain available for deployment-specific overrides. See config/temporal.example.yaml for every supported non-secret field; keep HARBORRAG_TEMPORAL_API_KEY in env/.env.temporal or a secret manager.

The normal operator path is the app CLI:

harborrag ingest start --tenant tenant-1 --connector-id harborrag-workspace --wait
harborrag ingest start --tenant tenant-1 --connector-id jira-main --limit 3 --wait
harborrag ingest status RUN_ID --json
harborrag ingest pause RUN_ID
harborrag ingest resume RUN_ID
harborrag ingest cancel RUN_ID
harborrag retrieve "deployment requirements" --tenant tenant-1 --top-k 5 --json

--limit is a workflow-stable safety bound for operator and acceptance runs; omitting it retains the configured full-source behavior. Retrieval composes the same embedding model, active Qdrant collection, FalkorDB graph, and canonical chunk object store used by ingestion. Query embeddings are marked sensitive and non-cacheable.

Public execution facade

HarborRAG is an async context manager. Direct execution is the lightweight default for local development, smoke tests, and embedding HarborRAG as a library; Temporal execution adds durable submit/status/pause/resume/cancel operations. Both execute the same engine policies and production repository graph.

from harborrag_core.security import AccessContext
from harborrag_runtime.sdk import HarborRAG, IngestionRequest, RetrievalRequest

access = AccessContext(principal_id="user-1", tenant_id="tenant-1")
async with HarborRAG.from_config("config/harborrag.example.yaml") as harbor:
    await harbor.ingestion.run(IngestionRequest(access=access, connector_name="harborrag-workspace"))
    response = await harbor.retrieval.search(
        RetrievalRequest(access=access, query="deployment requirements")
    )

Installed plugins are discovered only when discover_plugins: true. Supported entry-point groups are connectors, parsers, model providers, vector repositories, graph repositories, and object stores. Every plugin declares capabilities and an explicit register() operation; importing a module alone never registers it.

Observability

Every ingestion activity emits an OpenTelemetry span with a controlled stage name and low-cardinality Prometheus metrics. The Compose worker serves its process registry on port 9464; deploy/prometheus/prometheus.yml scrapes it as harborrag-ingestion-worker. Metrics cover stage outcomes and durations, document lifecycle counts, durable artifact bytes, route/evidence chunks, Temporal retries, projection verification failures, cleanup failures, stale retrieval candidates, and connector rate-limit waits.

Model telemetry uses the adapters' privacy sanitizer. OpenTelemetry is enabled for embedding calls; Langfuse remains opt-in through HARBORRAG_LANGFUSE_ENABLED=true and is never attached to canonical documents, chunk payloads, Qdrant points, or FalkorDB properties.

Applications can also use the framework-owned client directly:

from harborrag_runtime.config.settings import RuntimeSettings
from harborrag_runtime.config.temporal import TemporalRuntimeConfig
from harborrag_runtime.temporal.client import IngestionTemporalClient
from harborrag_runtime.temporal.submission import (
    SourceSubmission,
    build_source_input,
)

settings = RuntimeSettings()
source = build_source_input(
    settings,
    SourceSubmission(
        task_id="sync-2026-07-31",
        tenant_id="tenant-1",
        connector_name="harborrag-workspace",
    ),
)
client = await IngestionTemporalClient.connect(TemporalRuntimeConfig.from_settings(settings))
reference = await client.start_ingestion(source)
status = await client.get_status(reference.run_id)

For the PostgreSQL-backed local server and worker profile, see deployment guide.

File configuration

from harborrag_runtime.config import load_connector_catalog, load_parser_catalog

connectors = load_connector_catalog("config/connectors.yaml").build_enabled()
parsers = load_parser_catalog("config/parsers.yaml").build_harbor_parser()

Tests

uv run pytest packages/harborrag-runtime/tests/unit -q
uv run pytest packages/harborrag-runtime/tests/runtime_ingestion/unit -q
uv run pytest packages/harborrag-runtime/tests/runtime_ingestion/workflows -q

The deployed smoke test validates the real Temporal runtime and all projection stores:

python packages/harborrag-runtime/tests/runtime_ingestion/smoke/ingestion_flow.py

Release files for harborrag-runtime 2.0.0a1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for harborrag-runtime 2.0.0a1
File Size Uploaded
harborrag_runtime-2.0.0a1.tar.gz 291.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for harborrag-runtime 2.0.0a1
File Interpreter ABI Platform
harborrag_runtime-2.0.0a1-py3-none-any.whl Python 3 none any Details

Total release size: 489.7 kB

Release files / harborrag_runtime-2.0.0a1.tar.gz

Download URL harborrag_runtime-2.0.0a1.tar.gz
Size 291.1 kB
Tags Source
SHA-256 checksum
How to use checksums
36b3f7c7e9e135ba7850839e553014919b7d7cb6ab78d6579937c598ee8d4198
BLAKE2b-256 checksum
How to use checksums
935832229dc3d67bb4ef370bbfb6349e162a6c8a9a596dbdaed56a00c6340989
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release files / harborrag_runtime-2.0.0a1-py3-none-any.whl

Download URL harborrag_runtime-2.0.0a1-py3-none-any.whl
Size 198.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
51563d2967b90ce7158d5298970a742d9b20433b71c1adb6678d2e8092c4e0b4
BLAKE2b-256 checksum
How to use checksums
7f6025176af6234ab2975b1933a9573f18e012cf5e3032fda85524965b0da690
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.0.0a1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page