lex-llm-vllm 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/CODEOWNERS +2 -0
- data/.github/dependabot.yml +18 -0
- data/.github/workflows/ci.yml +16 -0
- data/.gitignore +10 -0
- data/.rubocop.yml +18 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +161 -0
- data/LICENSE +21 -0
- data/README.md +5 -0
- data/lex-llm-vllm.gemspec +28 -0
- data/lib/legion/extensions/llm/vllm/provider_settings.rb +55 -0
- data/lib/legion/extensions/llm/vllm/version.rb +11 -0
- data/lib/legion/extensions/llm/vllm.rb +31 -0
- data/lib/lex_llm_vllm.rb +3 -0
- metadata +89 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 0a1eee3f739095510c783508f172181f32db7f3a77852a0708d0e4ef792a56bd
|
|
4
|
+
data.tar.gz: 66afc56da1aec62124c15de163d3d58f0604151cc0a5cf17f6d5a244ce1b8d60
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 63440501176ed57cdfdaf0c1101d7aa166b0c379f929e73a4740b90d0e89e37e4f77b70f4bdf355e301dce5d85817375aab2fc0c3c3d594ded7cd100101aff5c
|
|
7
|
+
data.tar.gz: bfe14be2ea4ce47b7b6638142c1e1cefb53ab348e593390fa2d8488554174951dee5fa69a875fa3f6183aeb40109f68cae3729c75e1617429919369849a1b394
|
data/.github/CODEOWNERS
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: bundler
|
|
4
|
+
directory: /
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
day: monday
|
|
8
|
+
open-pull-requests-limit: 5
|
|
9
|
+
labels:
|
|
10
|
+
- "type:dependencies"
|
|
11
|
+
- package-ecosystem: github-actions
|
|
12
|
+
directory: /
|
|
13
|
+
schedule:
|
|
14
|
+
interval: weekly
|
|
15
|
+
day: monday
|
|
16
|
+
open-pull-requests-limit: 5
|
|
17
|
+
labels:
|
|
18
|
+
- "type:dependencies"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
ci:
|
|
9
|
+
uses: LegionIO/.github/.github/workflows/ci.yml@main
|
|
10
|
+
|
|
11
|
+
release:
|
|
12
|
+
needs: ci
|
|
13
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
14
|
+
uses: LegionIO/.github/.github/workflows/release.yml@main
|
|
15
|
+
secrets:
|
|
16
|
+
rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
plugins:
|
|
2
|
+
- rubocop-performance
|
|
3
|
+
- rubocop-rake
|
|
4
|
+
- rubocop-rspec
|
|
5
|
+
|
|
6
|
+
AllCops:
|
|
7
|
+
NewCops: enable
|
|
8
|
+
TargetRubyVersion: 3.4
|
|
9
|
+
SuggestExtensions: false
|
|
10
|
+
|
|
11
|
+
Metrics/BlockLength:
|
|
12
|
+
Exclude:
|
|
13
|
+
- "*.gemspec"
|
|
14
|
+
- spec/**/*
|
|
15
|
+
Metrics/MethodLength:
|
|
16
|
+
Enabled: false
|
|
17
|
+
RSpec/MultipleExpectations:
|
|
18
|
+
Enabled: false
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source 'https://rubygems.org'
|
|
4
|
+
|
|
5
|
+
if ENV['LEX_LLM_PATH'] && File.directory?(ENV.fetch('LEX_LLM_PATH'))
|
|
6
|
+
gem 'lex-llm', path: ENV.fetch('LEX_LLM_PATH')
|
|
7
|
+
else
|
|
8
|
+
gem 'lex-llm', git: 'https://github.com/LegionIO/lex-llm',
|
|
9
|
+
branch: ENV.fetch('LEX_LLM_BRANCH', 'lex-llm-routing-base-20260425')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
gemspec
|
|
13
|
+
|
|
14
|
+
group :development do
|
|
15
|
+
gem 'bundler', '>= 2.0'
|
|
16
|
+
gem 'rake', '>= 13.0'
|
|
17
|
+
gem 'rspec', '~> 3.12'
|
|
18
|
+
gem 'rubocop', '>= 1.0'
|
|
19
|
+
gem 'rubocop-performance'
|
|
20
|
+
gem 'rubocop-rake', '>= 0.6'
|
|
21
|
+
gem 'rubocop-rspec'
|
|
22
|
+
end
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
GIT
|
|
2
|
+
remote: https://github.com/LegionIO/lex-llm
|
|
3
|
+
revision: 6b2901bf332806ca369399ad08f09da82825b121
|
|
4
|
+
branch: lex-llm-routing-base-20260425
|
|
5
|
+
specs:
|
|
6
|
+
lex-llm (0.1.0)
|
|
7
|
+
base64
|
|
8
|
+
event_stream_parser (~> 1)
|
|
9
|
+
faraday (>= 1.10.0)
|
|
10
|
+
faraday-multipart (>= 1)
|
|
11
|
+
faraday-net_http (>= 1)
|
|
12
|
+
faraday-retry (>= 1)
|
|
13
|
+
marcel (~> 1)
|
|
14
|
+
ruby_llm-schema (~> 0)
|
|
15
|
+
zeitwerk (~> 2)
|
|
16
|
+
|
|
17
|
+
PATH
|
|
18
|
+
remote: .
|
|
19
|
+
specs:
|
|
20
|
+
lex-llm-vllm (0.1.0)
|
|
21
|
+
faraday (>= 2.0)
|
|
22
|
+
lex-llm (>= 0.1.0)
|
|
23
|
+
|
|
24
|
+
GEM
|
|
25
|
+
remote: https://rubygems.org/
|
|
26
|
+
specs:
|
|
27
|
+
ast (2.4.3)
|
|
28
|
+
base64 (0.3.0)
|
|
29
|
+
diff-lcs (1.6.2)
|
|
30
|
+
event_stream_parser (1.0.0)
|
|
31
|
+
faraday (2.14.1)
|
|
32
|
+
faraday-net_http (>= 2.0, < 3.5)
|
|
33
|
+
json
|
|
34
|
+
logger
|
|
35
|
+
faraday-multipart (1.2.0)
|
|
36
|
+
multipart-post (~> 2.0)
|
|
37
|
+
faraday-net_http (3.4.2)
|
|
38
|
+
net-http (~> 0.5)
|
|
39
|
+
faraday-retry (2.4.0)
|
|
40
|
+
faraday (~> 2.0)
|
|
41
|
+
json (2.19.4)
|
|
42
|
+
language_server-protocol (3.17.0.5)
|
|
43
|
+
lint_roller (1.1.0)
|
|
44
|
+
logger (1.7.0)
|
|
45
|
+
marcel (1.1.0)
|
|
46
|
+
multipart-post (2.4.1)
|
|
47
|
+
net-http (0.9.1)
|
|
48
|
+
uri (>= 0.11.1)
|
|
49
|
+
parallel (2.1.0)
|
|
50
|
+
parser (3.3.11.1)
|
|
51
|
+
ast (~> 2.4.1)
|
|
52
|
+
racc
|
|
53
|
+
prism (1.9.0)
|
|
54
|
+
racc (1.8.1)
|
|
55
|
+
rainbow (3.1.1)
|
|
56
|
+
rake (13.4.2)
|
|
57
|
+
regexp_parser (2.12.0)
|
|
58
|
+
rspec (3.13.2)
|
|
59
|
+
rspec-core (~> 3.13.0)
|
|
60
|
+
rspec-expectations (~> 3.13.0)
|
|
61
|
+
rspec-mocks (~> 3.13.0)
|
|
62
|
+
rspec-core (3.13.6)
|
|
63
|
+
rspec-support (~> 3.13.0)
|
|
64
|
+
rspec-expectations (3.13.5)
|
|
65
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
66
|
+
rspec-support (~> 3.13.0)
|
|
67
|
+
rspec-mocks (3.13.8)
|
|
68
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
69
|
+
rspec-support (~> 3.13.0)
|
|
70
|
+
rspec-support (3.13.7)
|
|
71
|
+
rubocop (1.86.1)
|
|
72
|
+
json (~> 2.3)
|
|
73
|
+
language_server-protocol (~> 3.17.0.2)
|
|
74
|
+
lint_roller (~> 1.1.0)
|
|
75
|
+
parallel (>= 1.10)
|
|
76
|
+
parser (>= 3.3.0.2)
|
|
77
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
78
|
+
regexp_parser (>= 2.9.3, < 3.0)
|
|
79
|
+
rubocop-ast (>= 1.49.0, < 2.0)
|
|
80
|
+
ruby-progressbar (~> 1.7)
|
|
81
|
+
unicode-display_width (>= 2.4.0, < 4.0)
|
|
82
|
+
rubocop-ast (1.49.1)
|
|
83
|
+
parser (>= 3.3.7.2)
|
|
84
|
+
prism (~> 1.7)
|
|
85
|
+
rubocop-performance (1.26.1)
|
|
86
|
+
lint_roller (~> 1.1)
|
|
87
|
+
rubocop (>= 1.75.0, < 2.0)
|
|
88
|
+
rubocop-ast (>= 1.47.1, < 2.0)
|
|
89
|
+
rubocop-rake (0.7.1)
|
|
90
|
+
lint_roller (~> 1.1)
|
|
91
|
+
rubocop (>= 1.72.1)
|
|
92
|
+
rubocop-rspec (3.9.0)
|
|
93
|
+
lint_roller (~> 1.1)
|
|
94
|
+
rubocop (~> 1.81)
|
|
95
|
+
ruby-progressbar (1.13.0)
|
|
96
|
+
ruby_llm-schema (0.3.0)
|
|
97
|
+
unicode-display_width (3.2.0)
|
|
98
|
+
unicode-emoji (~> 4.1)
|
|
99
|
+
unicode-emoji (4.2.0)
|
|
100
|
+
uri (1.1.1)
|
|
101
|
+
zeitwerk (2.7.5)
|
|
102
|
+
|
|
103
|
+
PLATFORMS
|
|
104
|
+
arm64-darwin-25
|
|
105
|
+
ruby
|
|
106
|
+
|
|
107
|
+
DEPENDENCIES
|
|
108
|
+
bundler (>= 2.0)
|
|
109
|
+
lex-llm!
|
|
110
|
+
lex-llm-vllm!
|
|
111
|
+
rake (>= 13.0)
|
|
112
|
+
rspec (~> 3.12)
|
|
113
|
+
rubocop (>= 1.0)
|
|
114
|
+
rubocop-performance
|
|
115
|
+
rubocop-rake (>= 0.6)
|
|
116
|
+
rubocop-rspec
|
|
117
|
+
|
|
118
|
+
CHECKSUMS
|
|
119
|
+
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
|
|
120
|
+
base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
|
|
121
|
+
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
|
|
122
|
+
event_stream_parser (1.0.0) sha256=a2683bab70126286f8184dc88f7968ffc4028f813161fb073ec90d171f7de3c8
|
|
123
|
+
faraday (2.14.1) sha256=a43cceedc1e39d188f4d2cdd360a8aaa6a11da0c407052e426ba8d3fb42ef61c
|
|
124
|
+
faraday-multipart (1.2.0) sha256=7d89a949693714176f612323ca13746a2ded204031a6ba528adee788694ef757
|
|
125
|
+
faraday-net_http (3.4.2) sha256=f147758260d3526939bf57ecf911682f94926a3666502e24c69992765875906c
|
|
126
|
+
faraday-retry (2.4.0) sha256=7b79c48fb7e56526faf247b12d94a680071ff40c9fda7cf1ec1549439ad11ebe
|
|
127
|
+
json (2.19.4) sha256=670a7d333fb3b18ca5b29cb255eb7bef099e40d88c02c80bd42a3f30fe5239ac
|
|
128
|
+
language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
|
|
129
|
+
lex-llm (0.1.0)
|
|
130
|
+
lex-llm-vllm (0.1.0)
|
|
131
|
+
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
|
|
132
|
+
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
|
|
133
|
+
marcel (1.1.0) sha256=fdcfcfa33cc52e93c4308d40e4090a5d4ea279e160a7f6af988260fa970e0bee
|
|
134
|
+
multipart-post (2.4.1) sha256=9872d03a8e552020ca096adadbf5e3cb1cd1cdd6acd3c161136b8a5737cdb4a8
|
|
135
|
+
net-http (0.9.1) sha256=25ba0b67c63e89df626ed8fac771d0ad24ad151a858af2cc8e6a716ca4336996
|
|
136
|
+
parallel (2.1.0) sha256=b35258865c2e31134c5ecb708beaaf6772adf9d5efae28e93e99260877b09356
|
|
137
|
+
parser (3.3.11.1) sha256=d17ace7aabe3e72c3cc94043714be27cc6f852f104d81aa284c2281aecc65d54
|
|
138
|
+
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
|
|
139
|
+
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
|
|
140
|
+
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
|
|
141
|
+
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
|
|
142
|
+
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
|
|
143
|
+
rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
|
|
144
|
+
rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d
|
|
145
|
+
rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
|
|
146
|
+
rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47
|
|
147
|
+
rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
|
|
148
|
+
rubocop (1.86.1) sha256=44415f3f01d01a21e01132248d2fd0867572475b566ca188a0a42133a08d4531
|
|
149
|
+
rubocop-ast (1.49.1) sha256=4412f3ee70f6fe4546cc489548e0f6fcf76cafcfa80fa03af67098ffed755035
|
|
150
|
+
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
|
|
151
|
+
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
|
|
152
|
+
rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
|
|
153
|
+
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
|
|
154
|
+
ruby_llm-schema (0.3.0) sha256=a591edc5ca1b7f0304f0e2261de61ba4b3bea17be09f5cf7558153adfda3dec6
|
|
155
|
+
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
|
|
156
|
+
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
|
|
157
|
+
uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
|
|
158
|
+
zeitwerk (2.7.5) sha256=d8da92128c09ea6ec62c949011b00ed4a20242b255293dd66bf41545398f73dd
|
|
159
|
+
|
|
160
|
+
BUNDLED WITH
|
|
161
|
+
4.0.6
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Carmine Paolino
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'lib/legion/extensions/llm/vllm/version'
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = 'lex-llm-vllm'
|
|
7
|
+
spec.version = Legion::Extensions::Llm::Vllm::VERSION
|
|
8
|
+
spec.authors = ['LegionIO']
|
|
9
|
+
spec.email = ['matthewdiverson@gmail.com']
|
|
10
|
+
spec.summary = 'LegionIO LLM Vllm provider extension'
|
|
11
|
+
spec.description = 'Vllm provider integration for the LegionIO LLM routing framework.'
|
|
12
|
+
spec.homepage = 'https://github.com/LegionIO/lex-llm-vllm'
|
|
13
|
+
spec.license = 'MIT'
|
|
14
|
+
spec.required_ruby_version = '>= 3.4'
|
|
15
|
+
|
|
16
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
17
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
|
18
|
+
spec.metadata['documentation_uri'] = spec.homepage
|
|
19
|
+
spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/main/CHANGELOG.md"
|
|
20
|
+
spec.metadata['bug_tracker_uri'] = "#{spec.homepage}/issues"
|
|
21
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
22
|
+
|
|
23
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |file| file.match(%r{^(spec|test|features|tmp|coverage)/}) }
|
|
24
|
+
spec.require_paths = ['lib']
|
|
25
|
+
|
|
26
|
+
spec.add_dependency 'faraday', '>= 2.0'
|
|
27
|
+
spec.add_dependency 'lex-llm', '>= 0.1.0'
|
|
28
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Llm
|
|
6
|
+
module Vllm
|
|
7
|
+
# Builds provider defaults while inheriting shared lex-llm defaults.
|
|
8
|
+
module ProviderSettings
|
|
9
|
+
module_function
|
|
10
|
+
|
|
11
|
+
def build(family:, instance:)
|
|
12
|
+
deep_merge(
|
|
13
|
+
base_settings,
|
|
14
|
+
{
|
|
15
|
+
enabled: true,
|
|
16
|
+
provider_family: family,
|
|
17
|
+
discovery: { enabled: true, interval_seconds: 300 },
|
|
18
|
+
instances: {
|
|
19
|
+
default: {
|
|
20
|
+
enabled: true,
|
|
21
|
+
credentials: nil,
|
|
22
|
+
fleet: { enabled: false, consumer_priority: 0, prefetch: 1 }
|
|
23
|
+
}.merge(instance)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def base_settings
|
|
30
|
+
return {} unless ::Legion::Extensions::Llm.respond_to?(:default_settings)
|
|
31
|
+
|
|
32
|
+
deep_dup(::Legion::Extensions::Llm.default_settings)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def deep_dup(value)
|
|
36
|
+
case value
|
|
37
|
+
when Hash
|
|
38
|
+
value.to_h { |key, inner_value| [key, deep_dup(inner_value)] }
|
|
39
|
+
when Array
|
|
40
|
+
value.map { |inner_value| deep_dup(inner_value) }
|
|
41
|
+
else
|
|
42
|
+
value
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def deep_merge(left, right)
|
|
47
|
+
left.merge(right) do |_key, left_value, right_value|
|
|
48
|
+
left_value.is_a?(Hash) && right_value.is_a?(Hash) ? deep_merge(left_value, right_value) : right_value
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'legion/extensions/llm'
|
|
4
|
+
require 'legion/extensions/llm/vllm/provider_settings'
|
|
5
|
+
require 'legion/extensions/llm/vllm/version'
|
|
6
|
+
|
|
7
|
+
module Legion
|
|
8
|
+
module Extensions
|
|
9
|
+
module Llm
|
|
10
|
+
# Vllm provider extension namespace.
|
|
11
|
+
module Vllm
|
|
12
|
+
extend ::Legion::Extensions::Core if ::Legion::Extensions.const_defined?(:Core, false)
|
|
13
|
+
|
|
14
|
+
PROVIDER_FAMILY = :vllm
|
|
15
|
+
|
|
16
|
+
def self.default_settings
|
|
17
|
+
ProviderSettings.build(
|
|
18
|
+
family: PROVIDER_FAMILY,
|
|
19
|
+
instance: {
|
|
20
|
+
endpoint: 'http://localhost:8000',
|
|
21
|
+
tier: :private,
|
|
22
|
+
transport: :http,
|
|
23
|
+
usage: { inference: true, embedding: false },
|
|
24
|
+
limits: { concurrency: 8 }
|
|
25
|
+
}
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/lex_llm_vllm.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: lex-llm-vllm
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- LegionIO
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: faraday
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '2.0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '2.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: lex-llm
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 0.1.0
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: 0.1.0
|
|
40
|
+
description: Vllm provider integration for the LegionIO LLM routing framework.
|
|
41
|
+
email:
|
|
42
|
+
- matthewdiverson@gmail.com
|
|
43
|
+
executables: []
|
|
44
|
+
extensions: []
|
|
45
|
+
extra_rdoc_files: []
|
|
46
|
+
files:
|
|
47
|
+
- ".github/CODEOWNERS"
|
|
48
|
+
- ".github/dependabot.yml"
|
|
49
|
+
- ".github/workflows/ci.yml"
|
|
50
|
+
- ".gitignore"
|
|
51
|
+
- ".rubocop.yml"
|
|
52
|
+
- CHANGELOG.md
|
|
53
|
+
- Gemfile
|
|
54
|
+
- Gemfile.lock
|
|
55
|
+
- LICENSE
|
|
56
|
+
- README.md
|
|
57
|
+
- lex-llm-vllm.gemspec
|
|
58
|
+
- lib/legion/extensions/llm/vllm.rb
|
|
59
|
+
- lib/legion/extensions/llm/vllm/provider_settings.rb
|
|
60
|
+
- lib/legion/extensions/llm/vllm/version.rb
|
|
61
|
+
- lib/lex_llm_vllm.rb
|
|
62
|
+
homepage: https://github.com/LegionIO/lex-llm-vllm
|
|
63
|
+
licenses:
|
|
64
|
+
- MIT
|
|
65
|
+
metadata:
|
|
66
|
+
homepage_uri: https://github.com/LegionIO/lex-llm-vllm
|
|
67
|
+
source_code_uri: https://github.com/LegionIO/lex-llm-vllm
|
|
68
|
+
documentation_uri: https://github.com/LegionIO/lex-llm-vllm
|
|
69
|
+
changelog_uri: https://github.com/LegionIO/lex-llm-vllm/blob/main/CHANGELOG.md
|
|
70
|
+
bug_tracker_uri: https://github.com/LegionIO/lex-llm-vllm/issues
|
|
71
|
+
rubygems_mfa_required: 'true'
|
|
72
|
+
rdoc_options: []
|
|
73
|
+
require_paths:
|
|
74
|
+
- lib
|
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
|
+
requirements:
|
|
77
|
+
- - ">="
|
|
78
|
+
- !ruby/object:Gem::Version
|
|
79
|
+
version: '3.4'
|
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
|
+
requirements:
|
|
82
|
+
- - ">="
|
|
83
|
+
- !ruby/object:Gem::Version
|
|
84
|
+
version: '0'
|
|
85
|
+
requirements: []
|
|
86
|
+
rubygems_version: 3.6.9
|
|
87
|
+
specification_version: 4
|
|
88
|
+
summary: LegionIO LLM Vllm provider extension
|
|
89
|
+
test_files: []
|