Module: Vangrail::ScoreProviders

Defined in:
lib/vangrail/score_provider.rb

Overview

Versioned, dependency-free transports for optional risk readers.

Defined Under Namespace

Classes: Command, Endpoint, Transport

Constant Summary collapse

REQUEST_SCHEMA =
'vangrail-score-request-v1'
RESPONSE_SCHEMA =
'vangrail-score-response-v1'
DEFAULT_TIMEOUT =
30
DEFAULT_MAX_INPUT_BYTES =
4 * 1024 * 1024
DEFAULT_MAX_OUTPUT_BYTES =
1024 * 1024

Class Method Summary collapse

Class Method Details

.json_value(value) ⇒ Object



42
43
44
45
46
47
48
49
50
# File 'lib/vangrail/score_provider.rb', line 42

def json_value(value)
  case value
  when Hash
    value.to_h { |name, nested| [name.to_s, json_value(nested)] }
  when Array then value.map { |nested| json_value(nested) }
  when Symbol then value.to_s
  else value
  end
end

.request(reader_id:, model_id:, feature_schema:, text:, side:, context:) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/vangrail/score_provider.rb', line 19

def request(reader_id:, model_id:, feature_schema:, text:, side:, context:)
  json_value(
    schema: REQUEST_SCHEMA,
    reader_id: reader_id,
    model_id: model_id,
    feature_schema: feature_schema,
    text: text.to_s,
    side: side.to_s,
    context: context,
  )
end

.response(raw) ⇒ Object

Raises:



31
32
33
34
35
36
37
38
39
40
# File 'lib/vangrail/score_provider.rb', line 31

def response(raw)
  raise ProtocolError, 'score response must be a JSON object' unless raw.is_a?(Hash)

  normalized = json_value(raw)
  unless normalized['schema'] == RESPONSE_SCHEMA
    raise ProtocolError, "score response schema must be #{RESPONSE_SCHEMA}"
  end

  normalized.except('schema')
end