Module: Legion::Extensions::Llm::Vllm
- Extended by:
- AutoRegistration, Logging::Helper
- Defined in:
- lib/legion/extensions/llm/vllm.rb,
lib/legion/extensions/llm/vllm/version.rb,
lib/legion/extensions/llm/vllm/callable.rb,
lib/legion/extensions/llm/vllm/provider.rb,
lib/legion/extensions/llm/vllm/translator.rb,
lib/legion/extensions/llm/vllm/actors/fleet_worker.rb,
lib/legion/extensions/llm/vllm/runners/fleet_worker.rb,
lib/legion/extensions/llm/vllm/actors/discovery_refresh.rb,
lib/legion/extensions/llm/vllm/helpers/offering_builder.rb,
lib/legion/extensions/llm/vllm/runners/discovery_refresh.rb,
lib/legion/extensions/llm/vllm/runners/discovery_refresh/http.rb,
lib/legion/extensions/llm/vllm/runners/discovery_refresh/probing.rb,
lib/legion/extensions/llm/vllm/runners/discovery_refresh/health_display.rb,
lib/legion/extensions/llm/vllm/runners/discovery_refresh/claim_activation.rb,
lib/legion/extensions/llm/vllm/runners/discovery_refresh/instance_lifecycle.rb
Overview
Vllm provider extension namespace.
Defined Under Namespace
Modules: Actor, Helpers, ProviderCanonicalRequestBridge, ProviderDiscoveryHelpers, ProviderLegacyBridge, ProviderManagementMethods, ProviderRenderParseHelpers, Runners, TranslatorChunkBuilderHelpers, TranslatorChunkHelpers, TranslatorMessageHelpers, TranslatorParamHelpers, TranslatorRenderHelpers, TranslatorResponseHelpers, TranslatorThinkingHelpers, TranslatorToolCallHelpers, TranslatorToolCallParseHelpers, TranslatorToolHelpers
Classes: Provider, Translator, VllmCallable
Constant Summary
collapse
- PROVIDER_FAMILY =
:vllm
- DEFAULT_INSTANCE_TIER =
{ tier: :direct, capabilities: {}, provider_capabilities: { streaming: true } }.freeze
- VERSION =
'0.4.5'
Class Method Summary
collapse
Class Method Details
.default_settings ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/legion/extensions/llm/vllm.rb', line 20
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]
}
}
)
end
|
.discover_instances ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/legion/extensions/llm/vllm.rb', line 48
def self.discover_instances
instances = {}
configured = settings[:instances]
if configured.is_a?(Hash)
configured.each do |name, config|
normalized = normalize_instance_config(config)
next if normalized[:vllm_api_base].to_s.strip.empty?
instances[name.to_sym] = DEFAULT_INSTANCE_TIER.merge(normalized)
end
end
log.debug { "discovered #{instances.size} vLLM instance(s): #{instances.keys.join(', ')}" }
instances
end
|
.infer_tier_from_endpoint(url) ⇒ Object
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/legion/extensions/llm/vllm.rb', line 91
def self.infer_tier_from_endpoint(url)
return :direct if url.nil? || url.to_s.empty?
require 'uri'
host = URI.parse(url.to_s).host.to_s.downcase
%w[localhost 127.0.0.1 ::1].include?(host) ? :local : :direct
rescue URI::InvalidURIError => e
handle_exception(e, level: :warn, handled: true, operation: 'vllm.infer_tier_from_endpoint')
:direct
end
|
.normalize_api_base(url) ⇒ Object
87
88
89
|
# File 'lib/legion/extensions/llm/vllm.rb', line 87
def self.normalize_api_base(url)
url.to_s.sub(%r{/v1/?\z}, '')
end
|
.normalize_instance_config(config) ⇒ Object
64
65
66
67
68
69
70
|
# File 'lib/legion/extensions/llm/vllm.rb', line 64
def self.normalize_instance_config(config)
normalized = config.to_h.transform_keys(&:to_sym)
resolve_api_base_aliases(normalized)
resolve_credentials(normalized)
normalized[:tier] ||= infer_tier_from_endpoint(normalized[:vllm_api_base])
normalized
end
|
.provider_class ⇒ Object
40
41
42
|
# File 'lib/legion/extensions/llm/vllm.rb', line 40
def self.provider_class
Provider
end
|
.registry_publisher ⇒ Object
44
45
46
|
# File 'lib/legion/extensions/llm/vllm.rb', line 44
def self.registry_publisher
@registry_publisher ||= Legion::Extensions::Llm::RegistryPublisher.new(provider_family: PROVIDER_FAMILY)
end
|
.resolve_api_base_aliases(normalized) ⇒ Object
80
81
82
83
84
85
|
# File 'lib/legion/extensions/llm/vllm.rb', line 80
def self.resolve_api_base_aliases(normalized)
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]
end
|
.resolve_credentials(normalized) ⇒ Object
72
73
74
75
76
77
78
|
# File 'lib/legion/extensions/llm/vllm.rb', line 72
def self.resolve_credentials(normalized)
creds = normalized.delete(:credentials)
return unless creds.is_a?(Hash)
creds = creds.transform_keys(&:to_sym)
normalized[:vllm_api_key] ||= creds[:api_key]
end
|