Skip to main content

Policy, Governance & Filters API Reference

Configure policies, governance rules, and document filters using Python models from rag_control.models.

Policy Models

Create policies by composing GenerationPolicy, LoggingPolicy, and EnforcementPolicy into a Policy object.

Policy

from rag_control.models.policy import (
Policy,
GenerationPolicy,
LoggingPolicy,
EnforcementPolicy,
)

policy = Policy(
name="strict-policy",
description="Strict policy for sensitive queries",
generation=GenerationPolicy(
reasoning_level="full",
allow_external_knowledge=False,
require_citations=True,
fallback="strict",
temperature=0.0,
),
logging=LoggingPolicy(level="full"),
enforcement=EnforcementPolicy(
validate_citations=True,
block_on_missing_citations=True,
enforce_strict_fallback=True,
prevent_external_knowledge=True,
max_output_tokens=1000,
),
)

GenerationPolicy

Controls how the LLM generates responses.

  • reasoning_level: Literal["none", "limited", "full"] - Depth of reasoning (default: "limited")
  • allow_external_knowledge: bool - Allow knowledge beyond training data (default: False)
  • require_citations: bool - Require citations for all claims (default: True)
  • fallback: Literal["strict", "soft"] - Fallback behavior when constraints violated (default: "strict")
  • temperature: float - Generation temperature (default: 0.0)

LoggingPolicy

Controls logging verbosity.

  • level: Literal["minimal", "full"] - Logging detail level (default: "full")

EnforcementPolicy

Controls enforcement of generation constraints.

  • validate_citations: bool - Validate citation correctness (default: True)
  • block_on_missing_citations: bool - Block response if citations missing (default: True)
  • enforce_strict_fallback: bool - Enforce strict fallback mode (default: True)
  • prevent_external_knowledge: bool - Prevent external knowledge usage (default: True)
  • max_output_tokens: int | None - Maximum output tokens (default: None)

Governance Models

Create governance configurations for organizations using PolicyRule and OrgConfig.

PolicyRule

Defines a policy routing rule.

from rag_control.models.rule import PolicyRule, LogicalCondition, Condition

rule = PolicyRule(
name="high-risk-users",
description="Apply strict policy for high-risk users",
priority=1,
effect="allow",
apply_policy="strict-policy",
when=LogicalCondition(
any=[
Condition(
field="user_tier",
operator="equals",
value="high_risk",
source="user",
),
],
),
)

Fields:

  • name: str - Rule name
  • description: str | None - Optional description
  • priority: int - Rule priority (evaluated in order)
  • effect: Literal["allow", "deny"] - Allow or deny when conditions match
  • apply_policy: str | None - Policy to apply on allow effect
  • when: LogicalCondition - Conditions for matching

LogicalCondition

Combines conditions with AND/OR logic.

from rag_control.models.rule import LogicalCondition, Condition

condition = LogicalCondition(
all=[
Condition(field="user_level", operator="gte", value=3, source="user"),
Condition(field="category", operator="in", value=["finance", "health"], source="documents"),
],
)

Fields:

  • all: List[Condition] | None - All conditions must match (AND)
  • any: List[Condition] | None - Any condition must match (OR)

Condition

Defines a single matching condition.

from rag_control.models.rule import Condition

condition = Condition(
field="user_tier",
operator="equals",
value="premium",
source="user",
document_match=None,
)

Fields:

  • field: str - Field to evaluate
  • operator: Literal["equals", "lt", "lte", "gt", "gte", "intersects", "exists"] - Comparison operator
  • value: str | int | float | None - Value to compare (None for "exists")
  • source: Literal["user", "documents"] - Source of field (default: "user")
  • document_match: Literal["any", "all"] | None - Match strategy for document fields

OrgConfig

Organization-level governance configuration.

from rag_control.models.org import OrgConfig, DocumentPolicy

org_config = OrgConfig(
org_id="acme-corp",
description="ACME Corporation governance",
default_policy="standard-policy",
policy_rules=[rule1, rule2, rule3],
document_policy=DocumentPolicy(
top_k=10,
filter_name="public-docs-filter",
),
)

Fields:

  • org_id: str - Organization ID
  • description: str | None - Optional description
  • default_policy: str - Default policy name when no rules match
  • policy_rules: list[PolicyRule] - List of policy rules
  • document_policy: DocumentPolicy - Document retrieval settings

DocumentPolicy

Document retrieval settings for an organization.

  • top_k: int - Number of documents to retrieve (default: 5)
  • filter_name: str | None - Filter to apply on retrieval (default: None)

Filter Models

Create document filters using Condition and Filter models.

Filter

Hierarchical filter for document matching.

from rag_control.models.filter import Filter, Condition

filter_obj = Filter(
name="public-docs-filter",
description="Public documents only",
and_=[
Filter(
name="dept-filter",
condition=Condition(
field="department",
operator="in",
value=["engineering", "marketing"],
),
),
Filter(
name="status-filter",
condition=Condition(
field="status",
operator="equals",
value="published",
),
),
],
)

Fields:

  • name: str - Filter name
  • description: str | None - Optional description
  • and_: List[Filter] | None - Sub-filters combined with AND logic
  • or_: List[Filter] | None - Sub-filters combined with OR logic
  • condition: Condition | None - Single condition (leaf node)

Condition (Filter)

Defines a filter condition.

from rag_control.models.filter import Condition

condition = Condition(
field="created_date",
operator="gte",
value="2024-01-01",
source="user",
)

Fields:

  • field: str - Field to evaluate
  • operator: Literal["equals", "in", "intersects", "lt", "lte", "gt", "gte", "exists"] - Operator
  • value: str | int | List[str] | List[int] | None - Value(s) to compare
  • source: Literal["user"] - Always "user" for filters (default: "user")

Operators:

  • equals - Exact match
  • in - Value in list
  • intersects - List intersection
  • lt, lte, gt, gte - Numeric comparison
  • exists - Field exists (value should be None)

Complete Example

from rag_control.models.policy import (
Policy, GenerationPolicy, LoggingPolicy, EnforcementPolicy,
)
from rag_control.models.rule import PolicyRule, LogicalCondition, Condition
from rag_control.models.org import OrgConfig, DocumentPolicy
from rag_control.models.filter import Filter, Condition as FilterCondition

# Create policies
strict_policy = Policy(
name="strict",
generation=GenerationPolicy(reasoning_level="full", temperature=0.0),
logging=LoggingPolicy(level="full"),
enforcement=EnforcementPolicy(max_output_tokens=500),
)

balanced_policy = Policy(
name="balanced",
generation=GenerationPolicy(reasoning_level="limited", temperature=0.5),
logging=LoggingPolicy(level="minimal"),
enforcement=EnforcementPolicy(max_output_tokens=2000),
)

# Create filters
public_filter = Filter(
name="public-docs",
and_=[
Filter(
condition=FilterCondition(
field="visibility",
operator="equals",
value="public",
),
),
],
)

# Create policy rules
admin_rule = PolicyRule(
name="admin-rule",
priority=1,
effect="allow",
apply_policy="strict",
when=LogicalCondition(
all=[
Condition(field="role", operator="equals", value="admin", source="user"),
],
),
)

default_rule = PolicyRule(
name="default-rule",
priority=100,
effect="allow",
apply_policy="balanced",
when=LogicalCondition(any=[]),
)

# Create org config
org_config = OrgConfig(
org_id="myorg",
default_policy="balanced",
policy_rules=[admin_rule, default_rule],
document_policy=DocumentPolicy(top_k=10, filter_name="public-docs"),
)

ControlPlaneConfig

The complete configuration passed to the RAGControl engine.

from rag_control.models.config import ControlPlaneConfig

Fields:

  • policies: list[Policy] - All policies
  • filters: list[Filter] - All filters
  • orgs: list[OrgConfig] - All organization configurations

Complete Configuration Example

from rag_control.models.config import ControlPlaneConfig
from rag_control.models.policy import (
Policy, GenerationPolicy, LoggingPolicy, EnforcementPolicy,
)
from rag_control.models.rule import PolicyRule, LogicalCondition, Condition
from rag_control.models.org import OrgConfig, DocumentPolicy
from rag_control.models.filter import Filter, Condition as FilterCondition
from rag_control.core.engine import RAGControlEngine
from rag_control.adapters import LLM, QueryEmbedding, VectorStore

# Create policies
policies = [
Policy(
name="strict",
description="For admin users",
generation=GenerationPolicy(
reasoning_level="full",
allow_external_knowledge=False,
require_citations=True,
fallback="strict",
temperature=0.0,
),
logging=LoggingPolicy(level="full"),
enforcement=EnforcementPolicy(
validate_citations=True,
block_on_missing_citations=True,
max_output_tokens=500,
),
),
Policy(
name="balanced",
description="For regular users",
generation=GenerationPolicy(
reasoning_level="limited",
allow_external_knowledge=False,
require_citations=True,
fallback="soft",
temperature=0.5,
),
logging=LoggingPolicy(level="minimal"),
enforcement=EnforcementPolicy(max_output_tokens=2000),
),
]

# Create filters
filters = [
Filter(
name="public-docs",
description="Public documents only",
condition=FilterCondition(
field="visibility",
operator="equals",
value="public",
),
),
]

# Create organization configurations
orgs = [
OrgConfig(
org_id="acme-corp",
description="ACME Corporation",
default_policy="balanced",
policy_rules=[
PolicyRule(
name="admin-rule",
priority=1,
effect="allow",
apply_policy="strict",
when=LogicalCondition(
all=[
Condition(
field="role",
operator="equals",
value="admin",
source="user",
),
],
),
),
],
document_policy=DocumentPolicy(top_k=10, filter_name="public-docs"),
),
]

# Create control plane config
config = ControlPlaneConfig(
policies=policies,
filters=filters,
orgs=orgs,
)

# Initialize RAGControl engine with config
engine = RAGControlEngine(
llm=your_llm_adapter,
query_embedding=your_embedding_adapter,
vector_store=your_vector_store_adapter,
config=config,
)

Configuration Validation

The ControlPlaneConfig validates:

  • Policy names are unique
  • Filter names are unique
  • Org IDs are unique
  • Referenced policies exist
  • Referenced filters exist
  • Rule priorities are unique and positive
  • Filter structure is valid (exactly one of: condition, and, or)
  • All constraints are satisfied

Invalid configs raise ControlPlaneConfigValidationError.


YAML Configuration Alternative

Configs can also be loaded from YAML files

For YAML structure and configuration details, see the Configuration Guide.

See Also