Class: Olyx::Guardrails::Policy

Inherits:
Object
  • Object
show all
Defined in:
lib/olyx/guardrails/policy.rb

Overview

Defines immutable limits, blocking behavior, and restricted-content rules.

Policy validates and compiles all configuration during construction. A successfully constructed instance is frozen and safe to reuse across requests and threads.

policy = Olyx::Guardrails::Policy.new(
name: "production",
block_secrets: true,
rules: [
  { name: :project, terms: ["Project Falcon"] }
]
)

See docs/POLICIES.md for matching and replacement semantics.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name: 'default', max_input_length: 10_000, block_pii: false, block_injections: true, block_secrets: false, llm_failure_mode: :allow, secret_patterns: [], rules: []) ⇒ Policy

:call-seq:

Policy.new(name: "default", max_input_length: 10_000,
         block_pii: false, block_injections: true,
         block_secrets: false, llm_failure_mode: :allow,
         secret_patterns: [], rules: []) -> Policy

Builds and freezes a policy.

name identifies decisions and notifications. max_input_length is a non-negative character limit. block_pii, block_injections, and block_secrets require literal Boolean values.

llm_failure_mode is :allow, :block, or :raise. secret_patterns extends secret detection with regular-expression source Strings. rules contains PolicyRule instances or rule Hashes.

Invalid values, duplicate rule names, invalid expressions, and expressions that match empty text raise ArgumentError.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/olyx/guardrails/policy.rb', line 60

def initialize(
  name: 'default',
  max_input_length: 10_000,
  block_pii: false,
  block_injections: true,
  block_secrets: false,
  llm_failure_mode: :allow,
  secret_patterns: [],
  rules: []
)
  @configuration = PolicyComponents::Configuration.new(
    identity: [name, max_input_length],
    blocking: [block_pii, block_injections, block_secrets],
    restrictions: [llm_failure_mode, secret_patterns, rules]
  )
  freeze
end

Class Method Details

.defaultObject

:call-seq:

Policy.default -> Policy

Returns the shared default policy. The default blocks prompt injection, reports PII and secrets without blocking them, and has no custom rules.



29
30
31
# File 'lib/olyx/guardrails/policy.rb', line 29

def self.default
  @default ||= new
end

.from_h(config) ⇒ Object

:call-seq:

Policy.from_h(configuration) -> Policy

Constructs a policy from config, which must be a Hash with String or Symbol keys. Unknown keys and invalid values raise ArgumentError.



38
39
40
# File 'lib/olyx/guardrails/policy.rb', line 38

def self.from_h(config)
  new(**PolicyComponents::ConfigurationHash.call(config))
end

Instance Method Details

#block_injections?Boolean

Returns whether prompt-injection findings block a decision.

Returns:

  • (Boolean)


97
# File 'lib/olyx/guardrails/policy.rb', line 97

def block_injections? = @configuration.blocking.injections?

#block_pii?Boolean

Returns whether PII findings block a decision.

Returns:

  • (Boolean)


94
# File 'lib/olyx/guardrails/policy.rb', line 94

def block_pii? = @configuration.blocking.pii?

#block_secrets?Boolean

Returns whether secret findings block a decision.

Returns:

  • (Boolean)


100
# File 'lib/olyx/guardrails/policy.rb', line 100

def block_secrets? = @configuration.blocking.secrets?

#llm_failure_modeObject

Returns :allow, :block, or :raise.



85
# File 'lib/olyx/guardrails/policy.rb', line 85

def llm_failure_mode = @configuration.restrictions.llm_failure_mode

#max_input_lengthObject

Returns the maximum accepted input length in Ruby characters.



82
# File 'lib/olyx/guardrails/policy.rb', line 82

def max_input_length = @configuration.identity.max_input_length

#nameObject

Returns the policy's stable String identifier.



79
# File 'lib/olyx/guardrails/policy.rb', line 79

def name = @configuration.identity.name

#rulesObject

Returns the frozen PolicyRule collection.



91
# File 'lib/olyx/guardrails/policy.rb', line 91

def rules = @configuration.restrictions.rules

#secret_patternsObject

Returns the frozen custom secret regular-expression source Strings.



88
# File 'lib/olyx/guardrails/policy.rb', line 88

def secret_patterns = @configuration.restrictions.secret_patterns