Class: Vangrail::JointRiskArtifact

Inherits:
Object
  • Object
show all
Includes:
ArtifactData, JointRiskArtifactAccessors, JointRiskArtifactOod, JointRiskArtifactThreats
Defined in:
lib/vangrail/joint_risk_artifact.rb

Overview

Bounded, versioned posterior approximation consumed by stdlib inference.

Constant Summary collapse

SCHEMA =
'vangrail-joint-risk-v1'
METHODS =
%w[laplace_diagonal].freeze
MAX_BYTES =
4 * 1024 * 1024
MAX_FEATURES =
256
MAX_READERS =
64
MAX_INTERACTIONS =
1024
MAX_THREAT_FAMILIES =
64
MAX_DISAGREEMENT_RULES =
128
FIELDS =
%w[
  schema id posterior_method training_prevalence normalization feature_schema readers intercept
  coefficients interactions context_offsets covariance_diagonal threat_model ood risk_control score_ranges
  supported calibration training_manifest_sha256
].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw, source_sha256: nil) ⇒ JointRiskArtifact

Returns a new instance of JointRiskArtifact.

Raises:



36
37
38
39
40
41
42
43
44
# File 'lib/vangrail/joint_risk_artifact.rb', line 36

def initialize(raw, source_sha256: nil)
  raise ProtocolError, 'joint risk artifact must be a hash' unless raw.is_a?(Hash)

  @data = stringify(raw)
  validate!
  @data = immutable(@data)
  @sha256 = (source_sha256 || Digest::SHA256.hexdigest(canonical(@data))).freeze
  freeze
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



34
35
36
# File 'lib/vangrail/joint_risk_artifact.rb', line 34

def data
  @data
end

#sha256Object (readonly)

Returns the value of attribute sha256.



34
35
36
# File 'lib/vangrail/joint_risk_artifact.rb', line 34

def sha256
  @sha256
end

Class Method Details

.load(path, expected_sha256: nil) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/vangrail/joint_risk_artifact.rb', line 46

def self.load(path, expected_sha256: nil)
  size = File.size(path)
  raise ProtocolError, "joint risk artifact exceeds #{MAX_BYTES} bytes" if size > MAX_BYTES

  bytes = File.binread(path)
  actual = Digest::SHA256.hexdigest(bytes)
  raise ProtocolError, 'joint risk artifact hash does not match' if expected_sha256 && actual != expected_sha256

  new(JSON.parse(bytes), source_sha256: actual)
rescue JSON::ParserError => e
  raise ProtocolError, "joint risk artifact is not JSON: #{e.message}"
end

Instance Method Details

#calibrationObject Originally defined in module JointRiskArtifactAccessors

#coefficientsObject Originally defined in module JointRiskArtifactAccessors

#context_offsetsObject Originally defined in module JointRiskArtifactAccessors

#covariance_diagonalObject Originally defined in module JointRiskArtifactAccessors

#feature_schemaObject Originally defined in module JointRiskArtifactAccessors

#idObject Originally defined in module JointRiskArtifactAccessors

#interactionsObject Originally defined in module JointRiskArtifactAccessors

#interceptObject Originally defined in module JointRiskArtifactAccessors

#normalizationObject Originally defined in module JointRiskArtifactAccessors

#oodObject Originally defined in module JointRiskArtifactAccessors

#posterior_methodObject Originally defined in module JointRiskArtifactAccessors

#readersObject Originally defined in module JointRiskArtifactAccessors

#risk_controlObject Originally defined in module JointRiskArtifactAccessors

#score_rangesObject Originally defined in module JointRiskArtifactAccessors

#supportedObject Originally defined in module JointRiskArtifactAccessors

#threat_modelObject Originally defined in module JointRiskArtifactAccessors

#to_hObject



59
60
61
# File 'lib/vangrail/joint_risk_artifact.rb', line 59

def to_h
  data.merge('sha256' => sha256)
end

#training_prevalenceObject Originally defined in module JointRiskArtifactAccessors