Class: Olyx::Guardrails::Rails::Configuration

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

Overview

Holds validated Rails adapter configuration.

Most values validate during construction. Loading an environment-specific policy_path is deferred until #finalize!, which runs once during boot and freezes the configuration.

Applications read this object through Olyx::Guardrails::Rails.configuration and configure it through Olyx::Guardrails::Rails.configure.

Constant Summary collapse

DEFAULT_FILTER_PARAMETERS =

Default parameter names added to Rails.application.config.filter_parameters.

%i[prompt system_prompt llm_input].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(policy: nil, policy_path: nil, filter_parameters: DEFAULT_FILTER_PARAMETERS, notifier_handlers: {}, enabled: true, llm_provider: nil) ⇒ Configuration

:call-seq:

Configuration.new(policy: nil, policy_path: nil,
                filter_parameters: DEFAULT_FILTER_PARAMETERS,
                notifier_handlers: {}, enabled: true,
                llm_provider: nil) -> Configuration

Builds pending Rails configuration. policy must be a Policy; policy_path must identify a safe YAML policy file. Supplying both raises ConfigurationError.

filter_parameters is an Array of String or Symbol names. notifier_handlers is a Hash of named callables. enabled requires a literal Boolean, and llm_provider must be callable or nil.



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/olyx/guardrails/rails/configuration.rb', line 61

def initialize(
  policy: nil,
  policy_path: nil,
  filter_parameters: DEFAULT_FILTER_PARAMETERS,
  notifier_handlers: {},
  enabled: true,
  llm_provider: nil
)
  assign_policy_source(policy, policy_path, filter_parameters)
  assign_integration_settings(enabled, notifier_handlers, llm_provider)
  @finalized = false
end

Instance Attribute Details

#enabledObject (readonly)

Whether Rails guardrail entry points are enabled.



30
31
32
# File 'lib/olyx/guardrails/rails/configuration.rb', line 30

def enabled
  @enabled
end

#filter_parametersObject (readonly)

The frozen parameter names added to Rails parameter filtering.



33
34
35
# File 'lib/olyx/guardrails/rails/configuration.rb', line 33

def filter_parameters
  @filter_parameters
end

#llm_providerObject (readonly)

The optional callable used for semantic analysis.



27
28
29
# File 'lib/olyx/guardrails/rails/configuration.rb', line 27

def llm_provider
  @llm_provider
end

#notifierObject (readonly)

The finalized Notifier, or nil when no handlers are configured.



36
37
38
# File 'lib/olyx/guardrails/rails/configuration.rb', line 36

def notifier
  @notifier
end

#notifier_handlersObject (readonly)

The frozen, named notification handler Hash.



39
40
41
# File 'lib/olyx/guardrails/rails/configuration.rb', line 39

def notifier_handlers
  @notifier_handlers
end

#policyObject (readonly)

The active Policy. Before finalization this may be nil when policy_path is configured.



43
44
45
# File 'lib/olyx/guardrails/rails/configuration.rb', line 43

def policy
  @policy
end

#policy_pathObject (readonly)

The configured policy file path, or nil.



46
47
48
# File 'lib/olyx/guardrails/rails/configuration.rb', line 46

def policy_path
  @policy_path
end

Instance Method Details

#ensure_enabled!Object

Returns nil when enabled. Raises ConfigurationError when disabled.

Raises:



98
99
100
101
102
# File 'lib/olyx/guardrails/rails/configuration.rb', line 98

def ensure_enabled!
  return if @enabled

  raise ConfigurationError, 'Olyx Guardrails Rails integration is disabled'
end

#finalize!(environment:) ⇒ Object

:call-seq:

configuration.finalize!(environment:) -> Configuration

Resolves the policy for environment, builds the notifier, freezes this instance, and returns it. Repeated calls return the same instance.



79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/olyx/guardrails/rails/configuration.rb', line 79

def finalize!(environment:)
  return self if finalized?

  @policy, @notifier = ConfigurationFinalizer.call(
    policy: @policy,
    path: @policy_path,
    handlers: @notifier_handlers,
    environment: environment
  )
  @finalized = true
  freeze
end

#finalized?Boolean

Returns whether this configuration has been finalized and frozen.

Returns:

  • (Boolean)


93
94
95
# File 'lib/olyx/guardrails/rails/configuration.rb', line 93

def finalized?
  @finalized
end