Module: Vangrail::Providers
- Defined in:
- lib/vangrail/providers.rb,
lib/vangrail/providers/gateway.rb,
lib/vangrail/providers/llmlite.rb
Overview
The provider registry, in the order Provider.resolve tries it.
Order is the whole policy: local before shared. A proxy on the loopback costs nothing per call, keeps rail traffic on the machine, and needs no shared credential, so an application with one running should use it without being told to.
Only vendor-neutral entries are built in. A hostname compiled into this gem is an endpoint every installation inherits whether it can reach it or not, and a credential path compiled in is worse, because it publishes where somebody's secrets live. A shared gateway is therefore registered by the application that has one, or described by environment:
Vangrail::Providers.register_gateway(name: 'hub', base_url: '...', ...)
GUARDRAILS_GATEWAY_API_BASE=... GUARDRAILS_GATEWAY_API_KEY=...
An endpoint needed for a single run needs no registration at all: GUARDRAILS_API_BASE with GUARDRAILS_API_KEY beats the whole registry.
Defined Under Namespace
Class Method Summary collapse
- .install!(env = ENV) ⇒ Object
- .register_environment_gateway(env = ENV) ⇒ Object
-
.register_gateway(name:, base_url:, models: {}, guard_preset: nil, key_env: nil, file_env: nil, pass_env: nil, key_file: nil, pass_entry: nil, env: ENV) ⇒ Object
Registers a shared gateway and returns its Provider.
-
.registered_specs ⇒ Object
Gateways an application asked for, in the order it asked.
-
.reset! ⇒ Object
Forgets registered gateways along with any cached credential, so a test that points a lookup at nothing gets what it asked for.
Class Method Details
.install!(env = ENV) ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/vangrail/providers.rb', line 29 def install!(env = ENV) Provider.registry.clear Provider.register(Llmlite.provider(env)) register_environment_gateway(env) registered_specs.each { |spec| Provider.register(Gateway.provider(spec, env)) } Provider.registry end |
.register_environment_gateway(env = ENV) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/vangrail/providers.rb', line 56 def register_environment_gateway(env = ENV) spec = Gateway.from_environment(env) return nil unless spec Provider.register(Gateway.provider(spec, env)) end |
.register_gateway(name:, base_url:, models: {}, guard_preset: nil, key_env: nil, file_env: nil, pass_env: nil, key_file: nil, pass_entry: nil, env: ENV) ⇒ Object
Registers a shared gateway and returns its Provider. Registering a name twice replaces it, so reloading an application is not a duplicate.
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/vangrail/providers.rb', line 44 def register_gateway(name:, base_url:, models: {}, guard_preset: nil, key_env: nil, file_env: nil, pass_env: nil, key_file: nil, pass_entry: nil, env: ENV) spec = Gateway::Spec.new( name: name.to_s, base_url: base_url, models: models, guard_preset: guard_preset, key_env: key_env, file_env: file_env, pass_env: pass_env, key_file: key_file, pass_entry: pass_entry ) registered_specs.reject! { |s| s.name == spec.name } registered_specs << spec Provider.register(Gateway.provider(spec, env)) end |
.registered_specs ⇒ Object
Gateways an application asked for, in the order it asked.
38 39 40 |
# File 'lib/vangrail/providers.rb', line 38 def registered_specs @registered_specs ||= [] end |
.reset! ⇒ Object
Forgets registered gateways along with any cached credential, so a test that points a lookup at nothing gets what it asked for.
65 66 67 68 |
# File 'lib/vangrail/providers.rb', line 65 def reset! @registered_specs = [] install! end |