Module: Legion::Extensions::Llm::Openai::Runners::Discovery
- Extended by:
- Discovery
- Includes:
- Discovery::Pipeline
- Included in:
- Discovery
- Defined in:
- lib/legion/extensions/llm/openai/runners/discovery.rb
Overview
OpenAI discovery runner: ONLY the OpenAI-specific work. Reconcile, claim, activate, probe (cadence + reactive), replace, weight publication, dormant-weight tracking, and health display are all mixed in from the shared Discovery::Pipeline. Weight is NOT computed here — the shared WeightReconciler recomputes the write-time weight from live settings at publish.
Readiness is a non-inference /v1/models GET (not /health).
Constant Summary collapse
- STANDARD_CAPABILITY_CHECKS =
Standard capability symbols mapped to their evidence key. Reasoning maps to the :thinking evidence capability key.
{ completion: :completion, streaming: :streaming, vision: :vision, reasoning: :thinking, embedding: :embedding, structured_output: :structured_output }.freeze
Instance Method Summary collapse
-
#apply_auth_headers(faraday:, instance_cfg:) ⇒ Object
OpenAI adds optional organization / project headers beyond the bearer token.
- #auth_token(instance_cfg:) ⇒ Object
- #build_callable(instance_cfg:) ⇒ Object
-
#build_offering_draft(instance_cfg:, instance_key:, model_id:, model_data:) ⇒ Object
── Offering draft (evidence + metadata; NO weight) ───────────────.
-
#catalog_base_url(instance_cfg:) ⇒ Object
── OpenAI instance-config keys / connection ──────────────────────.
-
#derive_physical_id(instance_cfg:) ⇒ Object
── Secondary physical id (dedup/diagnostics only) ────────────────.
- #extract_host_port(url:) ⇒ Object
- #health_path ⇒ Object
Instance Method Details
#apply_auth_headers(faraday:, instance_cfg:) ⇒ Object
OpenAI adds optional organization / project headers beyond the bearer token.
50 51 52 53 54 55 56 57 |
# File 'lib/legion/extensions/llm/openai/runners/discovery.rb', line 50 def apply_auth_headers(faraday:, instance_cfg:) api_key = auth_token(instance_cfg: instance_cfg) faraday.headers['Authorization'] = "Bearer #{api_key}" if api_key org = instance_cfg[:openai_organization_id] faraday.headers['OpenAI-Organization'] = org if org proj = instance_cfg[:openai_project_id] faraday.headers['OpenAI-Project'] = proj if proj end |
#auth_token(instance_cfg:) ⇒ Object
44 45 46 |
# File 'lib/legion/extensions/llm/openai/runners/discovery.rb', line 44 def auth_token(instance_cfg:) instance_cfg[:openai_api_key] || instance_cfg[:api_key] end |
#build_callable(instance_cfg:) ⇒ Object
61 62 63 |
# File 'lib/legion/extensions/llm/openai/runners/discovery.rb', line 61 def build_callable(instance_cfg:) Legion::Extensions::Llm::Openai::Helpers::Callable.new(instance_cfg: instance_cfg, logger: log) end |
#build_offering_draft(instance_cfg:, instance_key:, model_id:, model_data:) ⇒ Object
── Offering draft (evidence + metadata; NO weight) ───────────────
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/legion/extensions/llm/openai/runners/discovery.rb', line 85 def build_offering_draft(instance_cfg:, instance_key:, model_id:, model_data:) tier = instance_cfg[:tier] || :frontier operations = infer_operations(model_id: model_id) Legion::Extensions::Llm::Inventory::OfferingDraft.new( provider_native_key: model_id, model: model_id, tier: tier, operation_evidence: build_operation_evidence(operations: operations), capability_evidence: build_capability_evidence(model_id: model_id), context_evidence: build_context_evidence(model_id: model_id, model_data: model_data), max_output_evidence: build_max_output_evidence(model_data: model_data), embedding_dimensions_evidence: (model_id: model_id, model_data: model_data), model_revision_evidence: build_model_revision_evidence(model_data: model_data), tokenizer_evidence: absent_value_evidence, quota_domains: build_quota_domains(instance_cfg: instance_cfg, operations: operations), metadata: (model_id: model_id, instance_key: instance_key).freeze, publication_source: :provider_catalog ) end |
#catalog_base_url(instance_cfg:) ⇒ Object
── OpenAI instance-config keys / connection ──────────────────────
40 41 42 |
# File 'lib/legion/extensions/llm/openai/runners/discovery.rb', line 40 def catalog_base_url(instance_cfg:) instance_cfg[:openai_api_base] || 'https://api.openai.com' end |
#derive_physical_id(instance_cfg:) ⇒ Object
── Secondary physical id (dedup/diagnostics only) ────────────────
67 68 69 70 71 72 |
# File 'lib/legion/extensions/llm/openai/runners/discovery.rb', line 67 def derive_physical_id(instance_cfg:) host_port = extract_host_port(url: catalog_base_url(instance_cfg: instance_cfg)) parts = [host_port] parts.concat(identity_parts_for(instance_cfg: instance_cfg)) parts.join('/') end |
#extract_host_port(url:) ⇒ Object
74 75 76 77 78 79 80 81 |
# File 'lib/legion/extensions/llm/openai/runners/discovery.rb', line 74 def extract_host_port(url:) uri = URI.parse(url.to_s) "#{uri.host || 'api.openai.com'}:#{uri.port}" rescue URI::InvalidURIError => e handle_exception(e, level: :warn, handled: true, operation: 'openai.runner.discovery.extract_host_port', url: url.to_s) 'api.openai.com:443' end |
#health_path ⇒ Object
59 |
# File 'lib/legion/extensions/llm/openai/runners/discovery.rb', line 59 def health_path = '/v1/models' |