Module: Legion::Extensions::Llm::Vllm

Extended by:
Core, AutoRegistration, Logging::Helper
Defined in:
lib/legion/extensions/llm/vllm.rb,
lib/legion/extensions/llm/vllm/version.rb,
lib/legion/extensions/llm/vllm/provider.rb,
lib/legion/extensions/llm/vllm/actors/fleet_worker.rb,
lib/legion/extensions/llm/vllm/runners/fleet_worker.rb

Overview

Vllm provider extension namespace.

Defined Under Namespace

Modules: Actor, Runners Classes: Provider

Constant Summary collapse

PROVIDER_FAMILY =
:vllm
VERSION =
'0.2.6'

Class Method Summary collapse

Class Method Details

.default_settingsObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/legion/extensions/llm/vllm.rb', line 18

def self.default_settings
  ::Legion::Extensions::Llm.provider_settings(
    family: PROVIDER_FAMILY,
    instance: {
      endpoint: 'http://localhost:8000',
      tier: :direct,
      transport: :http,
      credentials: { api_key: nil },
      enable_thinking: true,
      usage: { inference: true, embedding: true, image: true },
      limits: { concurrency: 1 },
      fleet: {
        enabled: false,
        respond_to_requests: false,
        capabilities: %i[chat stream_chat embed],
        lanes: [],
        concurrency: 1,
        queue_suffix: nil
      }
    }
  )
end

.discover_instancesObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/legion/extensions/llm/vllm.rb', line 49

def self.discover_instances
  instances = {}

  if CredentialSources.http_ok?('http://localhost:8000', path: '/health', timeout: 0.1)
    instances[:local] = {
      vllm_api_base: 'http://localhost:8000',
      tier: :local,
      capabilities: [:completion]
    }
  end

  configured = CredentialSources.setting(:extensions, :llm, :vllm, :instances)
  if configured.is_a?(Hash)
    configured.each do |name, config|
      instances[name.to_sym] = normalize_instance_config(config).merge(tier: :direct)
    end
  end

  instances
end

.normalize_api_base(url) ⇒ Object



79
80
81
# File 'lib/legion/extensions/llm/vllm.rb', line 79

def self.normalize_api_base(url)
  url.to_s.sub(%r{/v1/?\z}, '')
end

.normalize_instance_config(config) ⇒ Object



70
71
72
73
74
75
76
77
# File 'lib/legion/extensions/llm/vllm.rb', line 70

def self.normalize_instance_config(config)
  normalized = config.to_h.transform_keys(&:to_sym)
  normalized[:vllm_api_base] ||= normalized.delete(:base_url)
  normalized[:vllm_api_base] ||= normalized.delete(:api_base)
  normalized[:vllm_api_base] ||= normalized.delete(:endpoint)
  normalized[:vllm_api_base] = normalize_api_base(normalized[:vllm_api_base]) if normalized[:vllm_api_base]
  normalized
end

.provider_classObject



41
42
43
# File 'lib/legion/extensions/llm/vllm.rb', line 41

def self.provider_class
  Provider
end

.registry_publisherObject



45
46
47
# File 'lib/legion/extensions/llm/vllm.rb', line 45

def self.registry_publisher
  @registry_publisher ||= Legion::Extensions::Llm::RegistryPublisher.new(provider_family: PROVIDER_FAMILY)
end