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

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: build_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_pathObject



59
# File 'lib/legion/extensions/llm/openai/runners/discovery.rb', line 59

def health_path = '/v1/models'