Metadata-Version: 2.4
Name: director-ai
Version: 3.17.0
Summary: Response-level LLM hallucination guardrail — NLI + RAG fact-checking with audit evidence
Author-email: Miroslav Šotek <protoscience@anulum.li>
License-Expression: Apache-2.0 AND BUSL-1.1
Project-URL: Homepage, https://www.anulum.li
Project-URL: Repository, https://github.com/anulum/director-ai
Project-URL: Issues, https://github.com/anulum/director-ai/issues
Project-URL: Changelog, https://github.com/anulum/director-ai/blob/main/CHANGELOG.md
Project-URL: Documentation, https://anulum.github.io/director-ai
Project-URL: Discussions, https://discord.gg/JvMdKv49
Keywords: llm,hallucination,guardrail,nli,rag,fact-checking,streaming,coherence,deberta,openai,anthropic,langchain
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: NOTICE.md
Requires-Dist: numpy>=1.24
Requires-Dist: requests>=2.32
Provides-Extra: recommended
Requires-Dist: director-ai[rust]; extra == "recommended"
Requires-Dist: director-ai[nli]; extra == "recommended"
Requires-Dist: director-ai[vector]; extra == "recommended"
Requires-Dist: director-ai[server]; extra == "recommended"
Provides-Extra: integrations
Requires-Dist: director-ai[langchain]; extra == "integrations"
Requires-Dist: director-ai[llamaindex]; extra == "integrations"
Requires-Dist: director-ai[langgraph]; extra == "integrations"
Requires-Dist: director-ai[haystack]; extra == "integrations"
Requires-Dist: director-ai[crewai]; extra == "integrations"
Requires-Dist: director-ai[autogen]; extra == "integrations"
Provides-Extra: all
Requires-Dist: director-ai[recommended]; extra == "all"
Requires-Dist: director-ai[integrations]; extra == "all"
Requires-Dist: director-ai[onnx]; extra == "all"
Requires-Dist: director-ai[reranker]; extra == "all"
Requires-Dist: director-ai[embeddings]; extra == "all"
Requires-Dist: director-ai[minicheck]; extra == "all"
Requires-Dist: director-ai[grpc]; extra == "all"
Requires-Dist: director-ai[otel]; extra == "all"
Requires-Dist: director-ai[moderation]; extra == "all"
Requires-Dist: director-ai[presidio]; extra == "all"
Requires-Dist: director-ai[toxicity]; extra == "all"
Provides-Extra: nli
Requires-Dist: torch<3,>=2.8; extra == "nli"
Requires-Dist: transformers<6,>=5.0.0rc3; extra == "nli"
Provides-Extra: vector
Requires-Dist: chromadb<2,>=0.4.0; extra == "vector"
Requires-Dist: sentence-transformers<6,>=4; extra == "vector"
Provides-Extra: openai
Requires-Dist: openai>=1.0; extra == "openai"
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.20; extra == "anthropic"
Provides-Extra: langchain
Requires-Dist: langchain-core>=0.3; extra == "langchain"
Requires-Dist: langsmith>=0.8.0; extra == "langchain"
Provides-Extra: llamaindex
Provides-Extra: server
Requires-Dist: fastapi<1,>=0.100; extra == "server"
Requires-Dist: uvicorn<1,>=0.23; extra == "server"
Requires-Dist: pydantic<3,>=2.0; extra == "server"
Requires-Dist: httpx<1,>=0.27; extra == "server"
Requires-Dist: python-multipart<1,>=0.0.7; extra == "server"
Requires-Dist: slowapi<1,>=0.1.9; extra == "server"
Provides-Extra: minicheck
Provides-Extra: voice
Requires-Dist: elevenlabs>=1.0; extra == "voice"
Requires-Dist: openai>=1.0; extra == "voice"
Requires-Dist: deepgram-sdk>=3.0; extra == "voice"
Provides-Extra: vault
Requires-Dist: hvac<3,>=2; extra == "vault"
Provides-Extra: aws
Requires-Dist: boto3<2,>=1.34; extra == "aws"
Provides-Extra: azure
Requires-Dist: azure-keyvault-secrets<5,>=4.7; extra == "azure"
Requires-Dist: azure-identity<2,>=1.16; extra == "azure"
Provides-Extra: onnx
Requires-Dist: onnx<2,>=1.21; extra == "onnx"
Requires-Dist: onnxruntime<2,>=1.15; extra == "onnx"
Provides-Extra: tensorrt
Requires-Dist: onnx<2,>=1.21; extra == "tensorrt"
Requires-Dist: onnxruntime-gpu<2,>=1.15; extra == "tensorrt"
Provides-Extra: grpc
Requires-Dist: grpcio>=1.60; extra == "grpc"
Requires-Dist: grpcio-reflection>=1.60; extra == "grpc"
Requires-Dist: grpcio-tools>=1.60; extra == "grpc"
Requires-Dist: protobuf<7,>=4.25; extra == "grpc"
Provides-Extra: physical
Requires-Dist: mujoco<4,>=3.2; extra == "physical"
Provides-Extra: formal
Requires-Dist: z3-solver<5,>=4.12; extra == "formal"
Provides-Extra: finetune
Requires-Dist: torch<3,>=2.8; extra == "finetune"
Requires-Dist: transformers<6,>=5.0.0rc3; extra == "finetune"
Requires-Dist: datasets>=2.14; extra == "finetune"
Requires-Dist: accelerate>=0.21; extra == "finetune"
Requires-Dist: scikit-learn>=1.3; extra == "finetune"
Provides-Extra: quantize
Requires-Dist: bitsandbytes>=0.41; extra == "quantize"
Requires-Dist: accelerate>=0.21; extra == "quantize"
Provides-Extra: pinecone
Requires-Dist: pinecone>=5.0; extra == "pinecone"
Provides-Extra: weaviate
Requires-Dist: weaviate-client>=4.0; extra == "weaviate"
Provides-Extra: qdrant
Requires-Dist: qdrant-client>=1.7; extra == "qdrant"
Provides-Extra: faiss
Requires-Dist: faiss-cpu>=1.7; extra == "faiss"
Provides-Extra: elasticsearch
Requires-Dist: elasticsearch<10,>=8.0; extra == "elasticsearch"
Provides-Extra: honesty
Requires-Dist: scpn-studio-platform<0.12,>=0.11; python_version >= "3.12" and extra == "honesty"
Provides-Extra: reranker
Requires-Dist: sentence-transformers<6,>=4; extra == "reranker"
Provides-Extra: embeddings
Requires-Dist: sentence-transformers<6,>=4; extra == "embeddings"
Provides-Extra: license
Requires-Dist: polar-sdk==0.31.7; extra == "license"
Provides-Extra: crypto
Requires-Dist: cryptography<49,>=42; extra == "crypto"
Provides-Extra: embed
Requires-Dist: sentence-transformers<6,>=4; extra == "embed"
Provides-Extra: nli-lite
Requires-Dist: onnx<2,>=1.21; extra == "nli-lite"
Requires-Dist: onnxruntime<2,>=1.15; extra == "nli-lite"
Requires-Dist: transformers<6,>=5.0.0rc3; extra == "nli-lite"
Provides-Extra: langgraph
Requires-Dist: langgraph>=0.2; extra == "langgraph"
Requires-Dist: langsmith>=0.8.0; extra == "langgraph"
Provides-Extra: haystack
Requires-Dist: haystack-ai>=2.0; extra == "haystack"
Provides-Extra: crewai
Requires-Dist: crewai>=0.50; extra == "crewai"
Requires-Dist: litellm>=1.83.7; extra == "crewai"
Provides-Extra: guardrails
Provides-Extra: docs
Requires-Dist: mkdocs>=1.5; extra == "docs"
Requires-Dist: mkdocs-material>=9.5; extra == "docs"
Requires-Dist: mkdocstrings[python]>=0.24; extra == "docs"
Requires-Dist: mkdocs-jupyter>=0.25; extra == "docs"
Requires-Dist: nbconvert>=7.17.1; extra == "docs"
Provides-Extra: otel
Requires-Dist: opentelemetry-api>=1.20; extra == "otel"
Requires-Dist: opentelemetry-sdk>=1.20; extra == "otel"
Provides-Extra: langfuse
Requires-Dist: langfuse>=2.0; extra == "langfuse"
Provides-Extra: presidio
Requires-Dist: presidio-analyzer>=2.2; extra == "presidio"
Provides-Extra: toxicity
Requires-Dist: detoxify>=0.5; extra == "toxicity"
Provides-Extra: moderation
Requires-Dist: presidio-analyzer>=2.2; extra == "moderation"
Requires-Dist: detoxify>=0.5; extra == "moderation"
Provides-Extra: demo
Requires-Dist: gradio<7,>=4.0; extra == "demo"
Provides-Extra: ingestion
Requires-Dist: pypdf>=6.13.3; extra == "ingestion"
Requires-Dist: python-docx>=1.0; extra == "ingestion"
Requires-Dist: beautifulsoup4>=4.12; extra == "ingestion"
Provides-Extra: ingestion-s3
Requires-Dist: boto3>=1.26; extra == "ingestion-s3"
Provides-Extra: ingestion-notion
Requires-Dist: notion-client>=2.0; extra == "ingestion-notion"
Provides-Extra: ingestion-gdrive
Requires-Dist: google-api-python-client>=2.100; extra == "ingestion-gdrive"
Provides-Extra: auto-kb
Requires-Dist: boto3>=1.26; extra == "auto-kb"
Requires-Dist: notion-client>=2.0; extra == "auto-kb"
Requires-Dist: google-api-python-client>=2.100; extra == "auto-kb"
Provides-Extra: colbert
Provides-Extra: rust
Requires-Dist: backfire-kernel<0.2,>=0.1.1; extra == "rust"
Provides-Extra: enterprise
Requires-Dist: redis<9,>=4.5; extra == "enterprise"
Requires-Dist: pyjwt<3,>=2.8; extra == "enterprise"
Requires-Dist: argon2-cffi<26,>=23.1; extra == "enterprise"
Requires-Dist: psycopg2-binary<3,>=2.9; extra == "enterprise"
Provides-Extra: ui
Requires-Dist: gradio<7,>=4.0; extra == "ui"
Provides-Extra: reports
Requires-Dist: weasyprint>=60; extra == "reports"
Requires-Dist: jinja2>=3.1; extra == "reports"
Provides-Extra: autogen
Provides-Extra: research
Provides-Extra: train
Requires-Dist: transformers<6,>=5.0.0rc3; extra == "train"
Requires-Dist: datasets>=2.14; extra == "train"
Requires-Dist: accelerate>=0.21; extra == "train"
Requires-Dist: peft>=0.6; extra == "train"
Requires-Dist: pillow<13,>=10; extra == "train"
Provides-Extra: managed-training
Requires-Dist: google-cloud-aiplatform>=1.133; extra == "managed-training"
Requires-Dist: google-cloud-storage>=2.14; extra == "managed-training"
Provides-Extra: multimodal
Requires-Dist: open_clip_torch<4,>=2.24; extra == "multimodal"
Requires-Dist: torchvision>=0.15; extra == "multimodal"
Requires-Dist: pillow<13,>=10; extra == "multimodal"
Provides-Extra: security
Requires-Dist: cyclonedx-bom>=4.0; extra == "security"
Requires-Dist: hypothesis>=6.0; extra == "security"
Provides-Extra: dev
Requires-Dist: director-ai[rust]; extra == "dev"
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
Requires-Dist: pre-commit<5,>=4.0; extra == "dev"
Requires-Dist: ruff<1,>=0.5; extra == "dev"
Requires-Dist: mypy>=1.10; extra == "dev"
Requires-Dist: maturin<2,>=1.12; extra == "dev"
Requires-Dist: types-requests>=2.31; extra == "dev"
Requires-Dist: types-PyYAML>=6.0; extra == "dev"
Requires-Dist: hypothesis>=6.0; extra == "dev"
Requires-Dist: grpcio>=1.60; extra == "dev"
Requires-Dist: grpcio-tools>=1.60; extra == "dev"
Requires-Dist: protobuf<7,>=4.25; extra == "dev"
Requires-Dist: bandit>=1.7; extra == "dev"
Requires-Dist: pyyaml>=6.0; extra == "dev"
Requires-Dist: build>=1.0; extra == "dev"
Requires-Dist: twine>=5.0; extra == "dev"
Requires-Dist: fastapi>=0.100; extra == "dev"
Requires-Dist: httpx>=0.27; extra == "dev"
Requires-Dist: pydantic>=2.0; extra == "dev"
Requires-Dist: python-multipart>=0.0.7; extra == "dev"
Requires-Dist: slowapi<1,>=0.1.9; extra == "dev"
Requires-Dist: pypdf>=6.13.3; extra == "dev"
Requires-Dist: python-docx>=1.0; extra == "dev"
Requires-Dist: beautifulsoup4>=4.12; extra == "dev"
Requires-Dist: opentelemetry-sdk>=1.20; extra == "dev"
Requires-Dist: gradio<7,>=4.0; extra == "dev"
Requires-Dist: audioop-lts>=0.2.2; python_version >= "3.13" and extra == "dev"
Dynamic: license-file

<!--
SPDX-License-Identifier: Apache-2.0
Commercial license available
© Concepts 1996–2026 Miroslav Šotek. All rights reserved.
© Code 2020–2026 Miroslav Šotek. All rights reserved.
ORCID: 0009-0009-3560-0851
Contact: www.anulum.li | protoscience@anulum.li
Director-Class AI — Repository overview
-->

<p align="center">
  <img src="docs/assets/header.png" width="1280" alt="Director-AI — Real-time LLM Hallucination Guardrail">
</p>

<h1 align="center">Director-AI</h1>

<p align="center">
  <strong>Response-level LLM hallucination guardrail — NLI + RAG grounding, sealed audit evidence, and opt-in streaming contradiction checks</strong>
</p>

<p align="center">
  <a href="https://github.com/anulum/director-ai/actions/workflows/ci.yml"><img src="https://github.com/anulum/director-ai/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
  <a href="https://github.com/anulum/director-ai/actions/workflows/pre-commit.yml"><img src="https://github.com/anulum/director-ai/actions/workflows/pre-commit.yml/badge.svg" alt="Pre-commit"></a>
  <a href="https://github.com/anulum/director-ai/actions/workflows/codeql.yml"><img src="https://github.com/anulum/director-ai/actions/workflows/codeql.yml/badge.svg" alt="CodeQL"></a>
  <a href="https://pypi.org/project/director-ai/"><img src="https://img.shields.io/pypi/v/director-ai.svg" alt="PyPI"></a>
  <a href="https://pypi.org/project/director-ai/"><img src="https://img.shields.io/pypi/dm/director-ai.svg" alt="Downloads"></a>
  <a href="https://pepy.tech/projects/director-ai"><img src="https://img.shields.io/pepy/dt/director-ai.svg" alt="Total downloads"></a>
  <a href="https://codecov.io/gh/anulum/director-ai"><img src="https://codecov.io/gh/anulum/director-ai/branch/main/graph/badge.svg" alt="Coverage"></a>
  <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/pypi/pyversions/director-ai.svg" alt="Python"></a>
  <a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/core-Apache_2.0-blue.svg" alt="Core: Apache 2.0"></a>
  <a href="https://mariadb.com/bsl11/"><img src="https://img.shields.io/badge/advanced-BUSL_1.1-orange.svg" alt="Advanced: BUSL 1.1"></a>
  <a href="https://doi.org/10.5281/zenodo.18822167"><img src="https://zenodo.org/badge/doi/10.5281/zenodo.18822167.svg" alt="DOI"></a>
  <a href="https://anulum.github.io/director-ai"><img src="https://img.shields.io/badge/docs-mkdocs-blue.svg" alt="Docs"></a>
  <a href="https://www.bestpractices.dev/projects/12102"><img src="https://www.bestpractices.dev/projects/12102/badge" alt="OpenSSF Best Practices"></a>
  <a href="https://securityscorecards.dev/viewer/?uri=github.com/anulum/director-ai"><img src="https://api.securityscorecards.dev/projects/github.com/anulum/director-ai/badge" alt="OpenSSF Scorecard"></a>
  <a href="https://api.reuse.software/info/github.com/anulum/director-ai"><img src="https://api.reuse.software/badge/github.com/anulum/director-ai" alt="REUSE"></a>
</p>

---

## Product Ladder

| Tier | Install / delivery | Price | Ships |
|---|---|---:|---|
| **Director-Lite** | `pip install director-ai-lite` | USD 0 | Three-line guard facade, model-free heuristic default, facts/RAG handoff, optional NLI upgrade |
| **Director-AI** | `pip install director-ai` | USD 0 | Open-core runtime: `guard()`, 5-tier scoring, REST/gRPC server, SDK and framework integrations, evidence packets, opt-in streaming contradiction halt |
| **Director-AI Pro** | Private self-hosted delivery | USD 199/mo or 1,990/yr | Advanced production modules and priority support |
| **Director-AI Full** | Private self-hosted delivery | USD 499/mo or 4,990/yr | Pro plus Labs/Research modules and direct engineering support |
| **Director-Class AI** | Separate commercial product | USD 999/mo or 9,990/yr | Action-control and evidence boundary; deployment and support are scoped separately |

**→ [Canonical pricing &amp; plans](https://www.remanentia.com/pricing.html)**

PyPI is the adoption front door. `director-ai-lite` is the free package we
publish and promote first for the smallest useful experience; `director-ai`
remains the full open-core package and the technical base for paid Pro
self-hosting. Director-Class AI is a separate product and repository. It is
sold through a commercial order rather than as a Director-AI PyPI wheel.

## The one-command demo

The narrow thing Director-AI does, end to end — load a small policy knowledge
base, approve a grounded answer, block a hallucinated one, and emit a
tamper-evident record of every decision:

```bash
pip install "director-ai[nli]"
director-ai evidence --emit evidence/        # runs the 7-step demo, writes a sealed packet
director-ai verify-evidence evidence/        # re-checks the packet's integrity + outcomes
```

The seven steps the packet records:

1. Load the bundled policy facts into the knowledge base.
2. Ask a policy question through the guard.
3. A **grounded** answer is approved.
4. A **hallucinated** answer is blocked.
5. The guard records the score and decision evidence.
6. An evidence JSON (Answer Bill of Materials + OpenTelemetry eval record) is emitted.
7. The packet is sealed with a digest for offline verification.

`evidence_packet.json` is sealed with a SHA-256 digest, so a reviewer can verify
it without re-running the guard. The default fast profile keeps the demo local
and deterministic; install the `[nli]` extra for model-backed production scoring.

---

## About

Director-AI is an internal research tool developed at [ANULUM Institute](https://www.anulum.li) as part of the [God of the Math Collection](https://www.anulum.li) (GOTM) — a multi-project scientific computing ecosystem spanning neuroscience, plasma physics, stochastic computing, and AI safety.

The system was built to solve a specific internal need: **response-level hallucination detection for LLM outputs used in scientific pipelines**, where a single fabricated number or citation can invalidate downstream analysis. The core is open source under Apache-2.0; the advanced and labs capabilities are source-available under BUSL-1.1.

**Team:** ANULUM maintains a research team (intentionally undisclosed). GitHub automation and repository maintenance are handled by the owner. Contributions to the Apache-2.0 core are welcome under the Apache-2.0 terms.

**Distribution boundary:** this public repository contains the open core,
public SDKs, public integrations, baseline evaluation surfaces, and general
documentation. The complete Director-AI product also includes proprietary
commercial extensions that are not published here, including customer-specific
implementation packages, sector-specific tuning/evaluation packs, private
deployment recipes, and customer-owned knowledge-base adaptation work. Those
materials are provided only under separate commercial agreements and must be
validated against the customer's own governed data, controls, and acceptance
criteria before any customer-specific performance claim is made.

> **Active Development** — APIs may evolve. The production-validated core is response-level scoring: the guardrail engine and 5-tier scoring (rules → embeddings → NLI), the SDK guard, FastAPI middleware, REST server, injection detection, and the agent/MCP preflight guard. Response-level hallucination accuracy is benchmarked on LLM-AggreFact and HaluEval-style end-to-end traces. The streaming contradiction halt is opt-in and evidence-bound; current local evidence is recorded in `benchmarks/results/streaming_contradiction_halt_base.json` and should not be used as the sole production gate. Deeper capabilities live under **Advanced & Labs** in the docs. Rust-accelerated compute paths shipped in the v3.12 line and remain part of the current release surface.

---

## What It Does

Director-AI sits between your LLM and the user. It scores completed outputs for hallucination against governed facts before the answer ships. The optional streaming path can halt completed streamed claims when they contradict retrieved grounding facts, but response-level scoring remains the primary production gate.

```mermaid
graph LR
    LLM["LLM<br/>(any provider)"] --> D["Director-AI"]
    D --> S["Scorer<br/>NLI + RAG"]
    D --> K["StreamingGate<br/>optional contradiction halt"]
    S --> V{Approved?}
    K --> V
    V -->|Yes| U["User"]
    V -->|No| H["HALT + evidence"]
```

## What It Is For

Director-AI is a factual-coherence control plane for teams that need LLM output
to remain tied to governed facts before the answer is displayed, streamed,
stored, handed to another agent, or used in a business workflow.

## Executive Snapshot

Director-AI is not a prompt template, chatbot UI, or generic moderation filter.
It is a guardrail runtime for factual-risk control:

- **Before output reaches users:** score a candidate answer against governed
  facts, NLI contradiction signals, retrieval evidence, and structured checks.
- **While output is streaming:** contradiction-driven streaming halt can stop a
  token stream when a completed claim contradicts governed facts.
- **Inside agent workflows:** inspect tool outputs, handoffs, and trajectory
  steps before downstream action.
- **For operators:** emit tenant-safe evidence, metrics, halt reasons, and
  compliance packets that can be reviewed without exposing raw customer data.

The strongest open-core value is the combination of response-level RAG/NLI
verification, contradiction-driven streaming halt, local low-latency execution,
Rust acceleration, REST/gRPC deployment surfaces, and evidence-first documentation.
The commercial value is
reducing factual incidents in high-consequence workflows while giving teams a
portable control layer across models, providers, and deployment targets.

| Application | Protected surface | Value |
|-------------|-------------------|-------|
| Customer support | Policy, refund, warranty, and account answers | Reduce unsupported customer-facing claims |
| Regulated research | Scientific, medical, legal, and finance summaries | Reject unsupported claims with evidence |
| RAG assistants | Private knowledge-base answers | Link verdicts to retrieved facts |
| Streaming chat | Partial token streams | Halt bad output before completion |
| Agent workflows | Tool outputs and handoffs | Check each step before downstream action |
| Evaluation pipelines | Prompt/response datasets | Build regression gates and threshold evidence |
| Enterprise governance | Tenant-safe audit events | Provide reviewable risk and compliance evidence |

The open repository is the public core: SDK guard, scoring, retrieval,
verification, APIs, integrations, and operator documentation. Customer-specific
sector packs, deployment recipes, tuning data, and acceptance evidence belong
to commercial implementation work and must be validated against the customer's
own governed data.

Start with the [Applications and Market Map](docs-site/guide/applications-and-market-map.md)
for a plain-language explanation of what the software is, who uses it, and where
it creates commercial value. Then read the
[Product Overview](docs-site/guide/product-overview.md) and use
[Evaluation Onboarding](docs-site/guide/onboarding.md) to run a scoped pilot.

## Choose Your Path

| Reader | First 30 minutes | Evidence to produce |
|---|---|---|
| Product or market evaluator | Read [Applications and Market Map](docs-site/guide/applications-and-market-map.md), [Product Overview](docs-site/guide/product-overview.md), [Market Value](docs-site/guide/market-value-and-positioning.md), and [Guardrail Landscape](docs-site/guide/guardrail-landscape.md) | One-page use case, risk surface, and competing control options |
| Developer | Run [Quickstart](docs-site/quickstart.md), then wrap an SDK client with [`guard()`](docs-site/api/guard.md) | One known-good answer approved and one known-bad answer rejected |
| RAG engineer | Run [KB Ingestion](docs-site/guide/kb-ingestion.md) and [Vector Store](docs-site/api/vector-store.md) | Retrieval chunks tied to a rejection or approval |
| Platform operator | Read [Production Guide](docs-site/deployment/production.md), [Metrics](docs-site/deployment/metrics.md), and [Runbooks](docs-site/deployment/runbooks.md) | Authenticated service, metrics scrape, and rollback/escalation path |
| Enterprise pilot owner | Use [Evaluation Onboarding](docs-site/guide/onboarding.md) and [Notebook Gallery](docs-site/notebook-gallery.md) | Labelled sample, threshold decision, false-positive examples, owner sign-off |

## Evidence-first deployment surfaces

The public core is not only a scorer. It ships the surfaces operators need to
prove what happened, where the guard ran, and which boundary stopped or allowed
an output.

| Surface | What it gives operators | Start here |
|---|---|---|
| Evidence packet CLI | A sealed local demo packet that approves one grounded answer, rejects one hallucinated answer, and verifies the packet digest | `director-ai evidence --emit evidence/` then `director-ai verify-evidence evidence/` |
| Voice Guard | Token filtering and guarded TTS/STT pipeline adapters for voice AI flows | [Voice AI](docs-site/guide/voice-ai.md) |
| Inference-server hooks | Pre-sampling reject/mask hooks for vLLM, TGI, and llama.cpp deployments | [Inference-server hooks](docs-site/integrations/inference-server-hooks.md) |
| Supply-chain controls | Model/dependency provenance, SBOM/ML-BOM surfaces, and deployment pinning guidance | [Supply chain](docs-site/deployment/supply-chain.md) |
| Guardrail forensics | Tenant-safe missed-case reports for score, evidence, model revision, and operator action review | [Guardrail forensics](docs-site/api/guardrail-forensics.md) |

### Core capabilities

- **Response-level grounding** — scores a candidate answer against governed facts with NLI contradiction signals and retrieval evidence; benchmarked on LLM-AggreFact. This is the production-validated path.
- **Opt-in streaming contradiction halt** — scores completed streamed claims against retrieved facts and can sever output when a claim contradicts governed knowledge. Current local evidence is `benchmarks/results/streaming_contradiction_halt_base.json` (`non_isolated_local_regression`, 135 good / 3 bad cases); unsupported-but-not-contradictory additions remain a response-review concern, and this path is not the sole production gate.
- **Dual-entropy scoring** — NLI contradiction detection (0.4B DeBERTa) + RAG fact-checking against your knowledge base.
- **Selectable scorer models** — choose a benchmarked local scorer profile for the latency/accuracy trade-off you need, without changing the guarded LLM provider.
- **Customer Model Factory primitives** — validate customer-owned guardrail
  traces, bind training/benchmark/deployment evidence, and export runtime
  package manifests. Customer-specific sector packs, tuning recipes, and
  implementation packages are proprietary commercial extensions and are not
  published in this repository.
- **Structured output verification** — JSON schema validation, numeric consistency, reasoning chain verification, temporal freshness scoring. Stdlib-only, zero dependencies.
- **Intent-grounded injection detection** — two-stage pipeline: regex pattern matching (fast) + bidirectional NLI divergence scoring (semantic). Detects the *effect* of injection in the output.
- **20 benchmarked Rust compute functions** — 7.23× geometric mean speedup over Python paths in the committed local benchmark packet. Transparent fallback when Rust kernel is not installed.

## Business outcomes

- reduce factual-incident risk in customer-facing and decision-support workflows;
- reduce manual rework from unsupported claims;
- provide clear evidence and audit trails for tenant review, compliance mapping, and model changes;
- compare and switch models with deterministic scoring gates instead of opaque heuristics.

For a buyer-facing positioning, start from [Market Value and Positioning](docs-site/guide/market-value-and-positioning.md).

The shipped core is the **Core capabilities** above; the full module-by-module
inventory below is reference for the deeper surface, navigable under
**Advanced & Labs** in the docs.

<details>
<summary><strong>Full capability catalogue</strong> — expand for the complete module inventory (advanced reference)</summary>

<!-- capability-snapshot:start -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
<!-- Generated by tools/capability_manifest.py; do not edit counts by hand. -->

### Director-AI Capability Inventory

| Surface | Current inventory |
|---|---:|
| Package version | 3.17.0 |
| Public API exports | 226 |
| Python capability source modules | 518 |
| Python capability classes | 1040 |
| API documentation pages | 89 |
| Rust PyO3 bindings | 83 |
| Optional extras | 62 |
| Python test files | 757 |
| Public documentation pages | 205 |
| GitHub Actions workflows | 14 |

Evidence boundary: this snapshot is a static inventory. Performance, coverage, hardware, and scientific-fidelity claims require their own committed evidence artefacts.
<!-- capability-snapshot:end -->

### Selectable scorer models

Director-AI guards any upstream LLM, but the guardrail scorer itself is
configurable. Stable runtime choices are exposed through
`GET /v1/scorer/models` and selected with `DIRECTOR_SCORER_MODEL`:

| Alias | Runtime source | Status | General BA | Use when |
|-------|----------------|--------|-----------:|----------|
| `balanced-default` | managed FactCG DeBERTa v3 large artefact | stable | 0.752 | default balanced accuracy/latency profile |
| `deberta-small` | managed DeBERTa v3 small artefact | stable | 0.747 | lower-cost deployments close to default accuracy |
| `deberta-large-nli` | managed DeBERTa v3 large NLI artefact | stable | 0.740 | alternate large-NLI baseline |

```bash
DIRECTOR_SCORER_MODEL=balanced-default director-ai serve
DIRECTOR_SCORER_MODEL=deberta-small director-ai serve
```

Domain-only and custom scorer models require explicit operator opt-in:
`DIRECTOR_ALLOW_DOMAIN_ONLY_SCORER_MODEL=true` or
`DIRECTOR_ALLOW_CUSTOM_SCORER_MODEL=true`. Each selectable scorer has a
per-model benchmark package plan in
[`benchmarks/model_benchmark_packages.toml`](benchmarks/model_benchmark_packages.toml);
full external benchmark packages are required before public model-specific claims.

### Customer Model Factory Public Core

Director-AI exposes the public core primitives needed to package guardrail
scorers without changing the guarded application provider. The implemented
public factory primitives cover:

- customer trace validation with split, leakage, tenant-boundary, severity,
  reference, and secrets/redaction checks;
- training manifests with immutable base-model provenance and Vertex,
  customer-cloud, on-prem, or local-pilot lanes;
- benchmark selection with conservative, balanced, low-latency, high-recall,
  and zero silent unsafe passes objective profiles;
- deployment, evidence-pack, and runtime-package manifests with deterministic
  hashes, audit-log URIs, rollback URIs, customer-controlled telemetry, and no
  external callback by default.

Sector-specific packages, customer database-class mappings, customer-private
retrieval schemas, tuning recipes, and customer-specific benchmark packages are
commercial extensions outside the public repository. The public repository
documents the interfaces and evidence boundaries; customer-specific packages
must be built and measured against the customer's own governed knowledge base
and approval criteria.

Customer examples are local helpers that consume the generated runtime package
shape without opening network connections:

```bash
python examples/customer_model_factory_runtime.py
python examples/customer_model_factory_rest_payload.py
```

The runtime package schema is
[`schemas/customer-model-factory-runtime-package.schema.json`](schemas/customer-model-factory-runtime-package.schema.json).
Customer-specific accuracy claims require package-specific benchmark evidence;
the factory exposes the controls needed to pursue high-assurance deployments
without making unscoped accuracy promises.

### Advanced RAG (6 pluggable retrieval strategies)

All independently toggleable via config, composable as a decorator stack:

| Strategy | What it does | Config field |
|----------|-------------|--------------|
| **Parent-child chunking** | Index small chunks, return large parents for context | `parent_child_enabled` |
| **Adaptive retrieval** | Skip KB lookup for creative/conversational queries | `adaptive_retrieval_enabled` |
| **HyDE** | LLM generates pseudo-answer, embeds that for retrieval | `hyde_enabled` |
| **Query decomposition** | Split compound queries, retrieve for each, merge via RRF | `query_decomposition_enabled` |
| **Contextual compression** | Keep only query-relevant sentences from retrieved passages | `contextual_compression_enabled` |
| **Multi-vector** | Index content + summary + title representations per doc | `multi_vector_enabled` |

On top of the existing hybrid (BM25+dense), cross-encoder reranking, ColBERT, and 11 vector backends (Chroma, Pinecone, Qdrant, FAISS, Weaviate, Elasticsearch, etc.).

### Multi-agent swarm guardian

Guard entire agent swarms — not just individual LLM calls:

- **SwarmGuardian**: central registry with cross-agent contradiction detection + cascade halt
- **AgentProfile**: per-agent thresholds (researcher vs summariser vs coder)
- **HandoffScorer**: score inter-agent messages before handoff
- **Framework adapters**: LangGraph, CrewAI, OpenAI Swarm, AutoGen — zero framework deps

### Additional modules

Meta-confidence estimation, online calibration from feedback, contradiction tracking across turns, agentic loop monitoring, adversarial robustness testing (25 patterns), EU AI Act audit trails, domain presets (medical/finance/legal/creative), cross-model consensus, conformal prediction intervals and uncertainty routing, token cost analyser, compliance report templates (HTML/Markdown), config wizard (Gradio UI + CLI).

### Agent safety hooks

Opt-in modules that plug into `CoherenceAgent` without changing
existing behaviour — configured together or not at all.

- **Cyber-physical grounding** (`core.cyber_physical`) — pre-action
  AABB / sphere collision and two-link analytical IK; lazy-loaded
  ROS 2 / MuJoCo / CARLA adapters.
- **Simulation containment** (`core.containment`) — HMAC-signed
  `RealityAnchor` binding a session to a `sandbox` / `simulator` /
  `shadow` / `production` scope, with a rule-based breakout
  detector (production-host calls, anti-anchor prompt injection,
  scope mismatch).
- **Cross-org passports** (`core.zk_attestation`) — `PassportIssuer`
  and `PassportVerifier` with an HMAC Merkle commitment backend
  plus a `ZkSnarkBackend` plug-in Protocol for real zero-knowledge
  adapters.

See the [API reference](docs-site/api/cyber-physical.md) pages for
the full surface.

### Multi-language components (all optional)

| Component | Path | Purpose |
|-----------|------|---------|
| **Rust `backfire-kernel`** | `backfire-kernel/` | 83 PyO3 bindings, including 20 compute functions measured in the committed Rust-vs-Python benchmark |
| **Go gateway** _(experimental)_ | `gateway/go/` | High-concurrency HTTP front door (auth, rate limit, audit). A passthrough proxy today; Python scoring integration is in progress (Phase 3) |
| **`director.v1` wire schema** | `schemas/proto/` | Frozen protobuf messages shared by Python and Go |
| **CoherenceScoring gRPC** | `src/director_ai/grpc_scoring.py` | `ScoreClaim` unary + `ScoreStream` bidi RPCs over `director.v1` |
| **Julia threshold tuner** | `tools/julia_tuner/` | Offline bootstrap + Bayesian threshold analysis with uncertainty bands |
| **Lean 4 formal proof** | `formal/HaltMonitor/` | Machine-checked guarantee that sub-threshold tokens cannot be emitted |

Python stands on its own — every non-Python component is additive and
toggled by an env var, flag, or optional dependency. See
[`ARCHITECTURE.md`](ARCHITECTURE.md) for the full layout and
[`gateway/go/README.md`](gateway/go/README.md),
[`tools/julia_tuner/README.md`](tools/julia_tuner/README.md),
[`formal/README.md`](formal/README.md),
[`schemas/README.md`](schemas/README.md) for per-component details.

</details>

Full documentation: [anulum.github.io/director-ai](https://anulum.github.io/director-ai)

---

## Quick Start

### Wrap your SDK (6 lines)

```python
from director_ai import guard
from openai import OpenAI

client = guard(
    OpenAI(),
    facts={"refund_policy": "Refunds within 30 days only"},
)
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "What is the refund policy?"}],
)
```

### One-shot check (4 lines)

```python
from director_ai import score

cs = score("What is the refund policy?", response_text,
           facts={"refund": "Refunds within 30 days only"},
           threshold=0.3)
print(f"Coherence: {cs.score:.3f}  Approved: {cs.approved}")
```

### Proxy (2 lines, zero code changes)

```bash
pip install director-ai[server]
director-ai proxy --port 8080 --facts kb.txt --threshold 0.3
```

Set `OPENAI_BASE_URL=http://localhost:8080/v1` in your app. Every response gets scored.

### FastAPI middleware (3 lines)

```python
from director_ai.integrations.fastapi_guard import DirectorGuard

app.add_middleware(DirectorGuard,
    facts={"policy": "Refunds within 30 days only"},
    on_fail="reject",
)
```

Also available: LangChain, LlamaIndex, LangGraph, Haystack, CrewAI, Semantic Kernel, DSPy integrations.

---

## Installation

Three buyer-facing bundles cover most needs — no need to assemble extras by hand:

```bash
pip install director-ai                            # core: rule-based + heuristic scoring (zero ML deps)
pip install "director-ai[recommended]"             # production guardrail: NLI scoring + RAG + REST API
pip install "director-ai[integrations]"            # framework adapters (LangChain, LlamaIndex, LangGraph, …)
pip install "director-ai[all]"                     # the common capability set in one shot
```

Or pick granular extras for fine control:

```bash
pip install "director-ai[nli]"                     # NLI scoring (75.6% leaderboard / 75.8% packet BA; 77.76% tuned replay)
pip install "director-ai[embed]"                   # embedding scorer (~65% BA, CPU-only, 3ms)
pip install director-ai-lite                       # 3-line guard facade
pip install "director-ai[nli,vector,server]"       # equivalent to [recommended]
pip install "director-ai[ui]"                      # config wizard (Gradio web UI)
pip install "director-ai[reports]"                 # PDF/HTML compliance reports
pip install "director-ai[physical]"                # MuJoCo physical adapter runtime
```

For reproducible installs the repo ships a `uv.lock` at the root;
`uv sync` installs the exact resolved versions.
Heavy optional extras use the policy in
`requirements/OPTIONAL_EXTRA_LOCKS.md`.
ROS 2 and CARLA are vendor/distribution installs; keep them in the same
isolated runtime as `[physical]`, not in the default quickstart environment.
ZK prover adapters are also isolated operator runtimes: pin the prover,
verifier, circuit artefacts, and proving key by immutable release or digest,
and keep `CommitmentBackend` enabled as the fallback.

The MiniCheck backend is opt-in and not on PyPI — install it manually
alongside any other extras:

```bash
pip install "minicheck @ git+https://github.com/Liyan06/MiniCheck.git"
```

### 5-tier scoring backends

| Tier | Backend | Accuracy | Latency | Install |
|------|---------|----------|---------|---------|
| **5** | NLI (FactCG) | **75.6% leaderboard / 75.8% packet BA** (77.76% tuned replay) | see latency table | `[nli]` |
| **4** | Distilled NLI (preview) | validation required | measured per artefact | `[nli-lite]` |
| **3** | Embedding (bge-small) | ~65% BA | 3 ms | `[embed]` |
| **2** | Rules engine (8 rules) | rule-based | <1 ms | — (base) |
| **1** | Heuristic (lite) | ~55% BA | <1 ms | — (base) |

`nli-lite` local ONNX artefacts are validated before runtime imports. A
local directory must contain an ONNX model plus at least one tokenizer model
file (`tokenizer.json`, `vocab.txt`, or `spiece.model`), and symlinked model
or tokenizer files must remain inside the artefact directory and
`DIRECTOR_ONNX_ALLOWED_DIRS` when that allowlist is configured. Missing local
assets fail closed instead of falling through to a hub or PyTorch load; remote
hub loads remain pinned to the released distilled model revision.

Select via config: `scorer_backend="rules"`, `"embed"`, `"deberta"`, or `"lite"`.

| Layer | What you get | Install extra |
|-------|-------------|---------------|
| **Core** (zero heavy deps) | `CoherenceScorer`, `StreamingKernel`, `GroundTruthStore`, rules engine | — |
| **Embeddings** | Sentence-transformer cosine-similarity scorer | `[embed]` |
| **NLI models** | DeBERTa, FactCG, MiniCheck, ONNX Runtime | `[nli]` |
| **Vector DBs** | Chroma, Pinecone, Weaviate, Qdrant | `[vector]` / `[pinecone]` / etc. |
| **Server** | FastAPI + Uvicorn REST/gRPC | `[server]` |
| **Rust kernel** | 20 benchmarked compute functions | `[rust]` (requires maturin) |
| **Voice** | ElevenLabs, OpenAI TTS, Deepgram adapters | `[voice]` |

Python 3.11+. Full guide: [docs/installation](https://anulum.github.io/director-ai/installation/).

---

## Benchmarks

### Accuracy — LLM-AggreFact (29,320 samples)

Two judges ship with this release.

**Default — `yaxili96/FactCG-DeBERTa-v3-Large`** (0.4B params, MIT). The fast NLI baseline.

| Rank | Model | Per-dataset mean BA | Params | Latency | Streaming |
|------|-------|---------------------|--------|---------|-----------|
| #1 | Bespoke-MiniCheck-7B | **77.4%** | 7B | ~100 ms | No |
| **#6** | **Director-AI (FactCG)** | **75.6%** | 0.4B | see latency table | **Yes** |
| #9 | MiniCheck-Flan-T5-L | 75.0% | 0.8B | ~120 ms | No |

The row above uses the leaderboard's threshold-0.50 convention (**75.6%**); the committed local packet reports **75.8%** on the same per-dataset-mean metric at threshold 0.46. With per-dataset threshold replay (no retraining), FactCG reaches **77.76%** in the committed threshold packet. This is the same 0.4B model and single `pip install`; latency depends on backend and hardware.

Latency: the committed GTX 1060 6GB local packet reports 17.9 ms/pair p99 for a 16-pair batch. Full comparison: [`benchmarks/comparison/COMPETITOR_COMPARISON.md`](benchmarks/comparison/COMPETITOR_COMPARISON.md).

> **Note on metrics.** The table above uses the AggreFact leaderboard
> convention — **per-dataset mean balanced accuracy across the 11 datasets**
> at threshold 0.50, giving **75.6%** ([source: llm-aggrefact.github.io](https://llm-aggrefact.github.io/)).
> The committed local packet reports **75.8%** on the same per-dataset-mean
> metric at threshold 0.46; the two differ by operating threshold, not by
> method. Sample-pooled balanced accuracy is a different metric and is
> systematically higher (~78%) on heterogeneous benchmarks. All are
> reported in `training/EXPERIMENT_RESULTS.md` for traceability.

**Optional — Gemma 4 E4B Q6 with per-task-family routing.** A zero-training LLM-as-judge alternative for users who prefer LLM-as-judge architectures over NLI. Per-task-family prompts (`summ` / `rag` / `claim`) bring the routed Gemma judge to 75.55% per-dataset mean BA on the AggreFact 29K test set, comparable to the FactCG default. The routed judge is opt-in (`--backend llama-cpp`); FactCG remains the default.

### Rust compute acceleration (shipped in v3.12, current in v3.16)

20 functions, 3000 iterations each. Geometric mean: **7.23× speedup**.

| Function | Python (µs) | Rust (µs) | Speedup |
|----------|------------|-----------|---------|
| sanitizer_score | 33.42 | 1.25 | 26.74× |
| score_temporal_freshness | 31.74 | 1.99 | 15.95× |
| probs_to_confidence (200×3) | 227.14 | 8.04 | 28.25× |
| lite_score | 20.15 | 13.12 | 1.54× |

Full results: [`benchmarks/results/rust_compute_bench.json`](benchmarks/results/rust_compute_bench.json).

### Cross-platform NLI latency (p99, 16-pair batch)

| Platform | Type | Per-pair p99 | Batch p99 (16p) | Notes |
|----------|------|-------------|-----------------|-------|
| GTX 1060 6GB | CUDA 12.6 | **17.9 ms** | 287 ms | PyTorch FP32, 100 iterations |
| RX 6600 XT 8GB | ROCm 6.2 | 80.1 ms | 1,282 ms | hipBLAS fallback |
| EPYC 9575F 4C | CPU | 118.9 ms | 1,903 ms | UpCloud cloud, Zen 5 |
| Xeon E5-2640 2×6C | CPU | 207.3 ms | 3,317 ms | ML350 Gen8, 128 GB RAM |

Heuristic-only (no NLI): p99 < 0.5 ms on all platforms.
Raw data: [`benchmarks/results/`](benchmarks/results/).
Reproduction manifest:
[`benchmarks/PUBLIC_BENCHMARKS.md`](benchmarks/PUBLIC_BENCHMARKS.md).

---

## Known Limitations

Be aware of these before deploying:

- **Default NLI-only end-to-end catch rate is 46.7% on the committed HaluEval-style trace set**: use this as a calibration baseline, not a finished enterprise claim. Hybrid judge mode reaches 90.7% catch rate on the same family but has 64.0% overall FPR and multi-second latency; it needs threshold tuning and task scoping before production use.
- **RAGTruth NLI-only performance is weak**: the committed L40S run reports 49.3% catch rate, 40.9% FPR, 39.3% precision, and 43.7% F1. Treat RAGTruth as an open accuracy lane, not a solved product claim.
- **FreshQA without grounding over-rejects**: the committed FreshQA run reports 98.6% catch rate but 97.8% FPR. Do not use ungrounded FreshQA catch rate as a buyer claim.
- **Fine-tuning is not a current sales capability**: the NLI fine-tuning survey shows 22/23 fine-tunes regressed against the FactCG baseline. Customer Model Factory work must start from evaluation, thresholds, packaging, and evidence review; any customer-specific tuning claim requires new held-out evidence.
- **Heuristic fallback is weak**: Without `[nli]`, scoring uses word-overlap (~55% accuracy). Not recommended for production.
- **Summarisation FPR is 10.5%**: Reduced from 95% via bidirectional NLI + baseline calibration (v3.5). Still too high for some use cases — tune thresholds per domain.
- **NLI needs KB grounding**: Without a knowledge base, stock regulated-domain profiles over-reject badly in checked artifacts (PubMedQA FPR=100%, FinanceBench FPR=100% at t=0.30). Treat them as calibration starting points.
- **Streaming halt is evidence-bound**: contradiction-driven streaming halt is opt-in. The current contradiction benchmark reports 1.48% false-halt rate on 135 known-good passages and 66.7% recall on a 3-case bad-passage smoke set under non-isolated local conditions. It is useful as a guarded contradiction interlock, not as a standalone hallucination-prevention claim.
- **ONNX CPU is slow**: 383 ms/pair without GPU. Use `onnxruntime-gpu` for production.
- **Long documents need ≥16 GB VRAM**: Chunked NLI on legal/financial docs exceeds 6 GB.
- **LLM-as-judge sends data externally**: When enabled, truncated prompt+response (500 chars) go to the configured provider. Off by default.
- **Domain presets are starting points**: Default thresholds need tuning for your data. Domain benchmark scripts exist but results are not yet validated.

---

## Docker

```bash
docker build -t director-ai .                          # CPU
docker build -f Dockerfile.gpu -t director-ai:gpu .    # GPU
docker run -p 8080:8080 director-ai                    # run
```

Kubernetes: [Helm chart](deploy/helm/director-ai/) with GPU toggle, HPA, Sigstore-signed releases.

---

## Citation

```bibtex
@software{sotek2026director,
  author    = {Sotek, Miroslav},
  title     = {Director-AI: Real-time LLM Hallucination Guardrail},
  year      = {2026},
  url       = {https://github.com/anulum/director-ai},
  version   = {3.17.0},
  license   = {Apache-2.0 AND BUSL-1.1}
}
```

## License

Open-core. Every source file carries an SPDX `SPDX-License-Identifier`, and the
repository is [REUSE](https://reuse.software/)-compliant — run `reuse lint` to
verify.

1. **Core — [Apache-2.0](LICENSES/Apache-2.0.txt).** The guardrail engine,
   5-tier scoring (rules → embeddings → NLI), SDK guard, FastAPI middleware,
   REST server, injection detection, streaming halt, and the agent/MCP preflight
   guard. Free for any use, including production and closed-source.
2. **Advanced & Labs — [BUSL-1.1](LICENSES/BUSL-1.1.txt).** The advanced
   capabilities under `core/<advanced>/`, `enterprise/`, `voice/`, `ui/`,
   `experimental/`, `compliance/`, and `agentic/`. Source-available: free for
   non-production and evaluation use; production and hosted/SaaS use require a
   commercial licence. Each file converts to Apache-2.0 on its change date.

Build deployments on the **supported-for-production shortlist** (guard SDK,
CoherenceScorer, knowledge store, server/proxy, injection firewall,
compliance CLI) — see
[docs/PRODUCTION_CHECKLIST.md](docs/PRODUCTION_CHECKLIST.md). The remaining
advanced surfaces are labs-grade: source-available for evaluation, APIs may
change, no production-support commitment.

Commercial licences for the advanced tier:
[anulum.li/licensing](https://www.anulum.li/licensing) ·
[director.class.ai@anulum.li](mailto:director.class.ai@anulum.li)

## Support and commercial paths

- **Start free:** `pip install director-ai-lite`.
- **Use the full open core:** `pip install director-ai`.
- **Buy Director-AI Pro:** production rights for Advanced & Labs, support, and a
  self-hosted deployment path via [pricing](https://anulum.github.io/director-ai/pricing/)
  or [licensing](https://www.anulum.li/licensing).
- **Engage Director-Class AI:** managed deployment, tuning, evidence reviews,
  procurement support, and SLA work.
- **Sponsor the public core:** [GitHub Sponsors](https://github.com/sponsors/anulum).

## Community

- **Chat** — [Discord](https://discord.gg/38HsXDYqy).
- **Questions, ideas, show-and-tell** —
  [GitHub Discussions](https://github.com/anulum/director-ai/discussions).
- **Bugs and feature requests** —
  [GitHub Issues](https://github.com/anulum/director-ai/issues).
- **Commercial and licensing enquiries** — protoscience@anulum.li.

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md). Contributions to the Apache-2.0 core are
accepted under the Apache-2.0 licence.

---

<p align="center">
  <a href="https://www.anulum.li">
    <img src="docs/assets/anulum_logo_company.jpg" height="70" alt="ANULUM">
  </a>
  &nbsp;&nbsp;&nbsp;&nbsp;
  <a href="https://www.anulum.li">
    <img src="docs/assets/fortis_studio_logo.jpg" height="70" alt="Fortis Studio">
  </a>
  <br>
  <em>Developed by <a href="https://www.anulum.li">ANULUM Institute</a> / Fortis Studio — Marbach SG, Switzerland</em>
</p>
