lex-llm-gemini 0.1.1 → 0.1.3
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 +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +13 -1
- data/Gemfile +2 -6
- data/README.md +4 -2
- data/lex-llm-gemini.gemspec +1 -5
- data/lib/legion/extensions/llm/gemini/provider.rb +10 -11
- data/lib/legion/extensions/llm/gemini/version.rb +1 -1
- data/lib/legion/extensions/llm/gemini.rb +2 -2
- metadata +3 -60
- data/lib/lex_llm_gemini.rb +0 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7673575bf56bb514a64f48de727512748a7d0ea39508dc9cf03fc1a353176aed
|
|
4
|
+
data.tar.gz: ca88287ed62989ee44fc732c16a234aeb9df83dfa3e6bebf87b72369ea3cf471
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4ec296851f8ef6301caf79f593d3aae1b9ae606ef10db99c10a619247e11a67e6991a1e570a41f87c1a522abbf68f69453013d9401edf9b6c9d1acb3580f51d9
|
|
7
|
+
data.tar.gz: 3d3163c19725b922247602d945913ce53d1c49ff02d97c020b665fa8cfd902d8abe5042282e809ae888ce60922ccdbcfd1a8d6e7aa3b6661a2856742aefba7bf
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.3 - 2026-04-28
|
|
4
|
+
|
|
5
|
+
- Remove the leftover compatibility entrypoint outside the Legion namespace.
|
|
6
|
+
- Load specs through the canonical `legion/extensions/llm/gemini` namespace path.
|
|
7
|
+
- Keep provider gemspec dependencies scoped to the shared `lex-llm` base gem.
|
|
8
|
+
|
|
9
|
+
## 0.1.2 - 2026-04-28
|
|
10
|
+
|
|
11
|
+
- Replace fork-era namespace references with the standard Legion::Extensions::Llm provider contract.
|
|
12
|
+
- Remove GitHub-based lex-llm Gemfile fallback so test installs use only a guarded local path or released gem dependency.
|
|
13
|
+
- Require lex-llm >= 0.1.3 for the cleaned Legion-native base extension.
|
|
14
|
+
|
|
3
15
|
## 0.1.1 - 2026-04-27
|
|
4
16
|
|
|
5
|
-
- Add the Gemini
|
|
17
|
+
- Add the Gemini Legion::Extensions::Llm provider class with generateContent, streaming, model listing, and embedContent helpers.
|
|
6
18
|
- Use shared `Legion::Extensions::Llm.provider_settings` defaults from `lex-llm`.
|
|
7
19
|
- Remove the committed `Gemfile.lock`.
|
|
8
20
|
|
data/Gemfile
CHANGED
|
@@ -3,12 +3,8 @@
|
|
|
3
3
|
source 'https://rubygems.org'
|
|
4
4
|
|
|
5
5
|
group :test do
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
else
|
|
9
|
-
gem 'lex-llm', git: 'https://github.com/LegionIO/lex-llm',
|
|
10
|
-
branch: ENV.fetch('LEX_LLM_BRANCH', 'main')
|
|
11
|
-
end
|
|
6
|
+
llm_base_path = ENV.fetch('LEX_LLM_PATH', File.expand_path('../lex-llm', __dir__))
|
|
7
|
+
gem 'lex-llm', path: llm_base_path if File.directory?(llm_base_path)
|
|
12
8
|
end
|
|
13
9
|
|
|
14
10
|
gemspec
|
data/README.md
CHANGED
|
@@ -4,9 +4,11 @@ LegionIO LLM provider extension for Gemini.
|
|
|
4
4
|
|
|
5
5
|
This gem lives under `Legion::Extensions::Llm::Gemini` and depends on `lex-llm` for shared provider-neutral routing, fleet, and schema primitives.
|
|
6
6
|
|
|
7
|
+
Load it with `require 'legion/extensions/llm/gemini'`.
|
|
8
|
+
|
|
7
9
|
## What It Provides
|
|
8
10
|
|
|
9
|
-
- `
|
|
11
|
+
- `Legion::Extensions::Llm::Provider` registration as `:gemini`
|
|
10
12
|
- Gemini-native chat requests through `POST /v1beta/{model=models/*}:generateContent`
|
|
11
13
|
- streaming chat support through `POST /v1beta/{model=models/*}:streamGenerateContent?alt=sse`
|
|
12
14
|
- model discovery through `GET /v1beta/models`
|
|
@@ -35,7 +37,7 @@ Legion::Extensions::Llm::Gemini.default_settings
|
|
|
35
37
|
## Configuration
|
|
36
38
|
|
|
37
39
|
```ruby
|
|
38
|
-
|
|
40
|
+
Legion::Extensions::Llm.configure do |config|
|
|
39
41
|
config.gemini_api_key = ENV.fetch("GEMINI_API_KEY")
|
|
40
42
|
config.gemini_api_base = "https://generativelanguage.googleapis.com/v1beta"
|
|
41
43
|
config.default_model = "gemini-2.0-flash"
|
data/lex-llm-gemini.gemspec
CHANGED
|
@@ -23,9 +23,5 @@ Gem::Specification.new do |spec|
|
|
|
23
23
|
spec.files = `git ls-files -z`.split("\x0").reject { |file| file.match(%r{^(spec|test|features|tmp|coverage)/}) }
|
|
24
24
|
spec.require_paths = ['lib']
|
|
25
25
|
|
|
26
|
-
spec.add_dependency '
|
|
27
|
-
spec.add_dependency 'legion-json', '>= 1.0'
|
|
28
|
-
spec.add_dependency 'legion-logging', '>= 1.0'
|
|
29
|
-
spec.add_dependency 'legion-settings', '>= 1.3.14'
|
|
30
|
-
spec.add_dependency 'lex-llm', '>= 0.1.1'
|
|
26
|
+
spec.add_dependency 'lex-llm', '>= 0.1.3'
|
|
31
27
|
end
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require '
|
|
4
|
-
require 'legion/json'
|
|
3
|
+
require 'legion/extensions/llm'
|
|
5
4
|
|
|
6
5
|
module Legion
|
|
7
6
|
module Extensions
|
|
8
7
|
module Llm
|
|
9
8
|
module Gemini
|
|
10
|
-
# Gemini provider implementation for the
|
|
11
|
-
class Provider <
|
|
9
|
+
# Gemini provider implementation for the Legion::Extensions::Llm base provider contract.
|
|
10
|
+
class Provider < Legion::Extensions::Llm::Provider # rubocop:disable Metrics/ClassLength
|
|
12
11
|
class << self
|
|
13
12
|
def slug = 'gemini'
|
|
14
13
|
def configuration_options = %i[gemini_api_key gemini_api_base]
|
|
@@ -148,9 +147,9 @@ module Legion
|
|
|
148
147
|
end
|
|
149
148
|
|
|
150
149
|
def content_parts(content)
|
|
151
|
-
return Array(content.value) if content.is_a?(
|
|
150
|
+
return Array(content.value) if content.is_a?(Legion::Extensions::Llm::Content::Raw)
|
|
152
151
|
return [{ text: Legion::JSON.generate(content) }] if content.is_a?(Hash) || content.is_a?(Array)
|
|
153
|
-
return [{ text: content.to_s }] unless content.is_a?(
|
|
152
|
+
return [{ text: content.to_s }] unless content.is_a?(Legion::Extensions::Llm::Content)
|
|
154
153
|
|
|
155
154
|
parts = []
|
|
156
155
|
parts << { text: content.text } if content.text
|
|
@@ -202,7 +201,7 @@ module Legion
|
|
|
202
201
|
body = response.body
|
|
203
202
|
parts = response_parts(body)
|
|
204
203
|
|
|
205
|
-
|
|
204
|
+
Legion::Extensions::Llm::Message.new(
|
|
206
205
|
role: :assistant,
|
|
207
206
|
content: text_content(parts),
|
|
208
207
|
tool_calls: parse_tool_calls(parts),
|
|
@@ -218,7 +217,7 @@ module Legion
|
|
|
218
217
|
def build_chunk(data)
|
|
219
218
|
parts = response_parts(data)
|
|
220
219
|
|
|
221
|
-
|
|
220
|
+
Legion::Extensions::Llm::Chunk.new(
|
|
222
221
|
role: :assistant,
|
|
223
222
|
content: text_content(parts),
|
|
224
223
|
tool_calls: parse_tool_calls(parts),
|
|
@@ -253,7 +252,7 @@ module Legion
|
|
|
253
252
|
next unless function_call
|
|
254
253
|
|
|
255
254
|
id = SecureRandom.uuid
|
|
256
|
-
result[id] =
|
|
255
|
+
result[id] = Legion::Extensions::Llm::ToolCall.new(
|
|
257
256
|
id: id,
|
|
258
257
|
name: function_call['name'],
|
|
259
258
|
arguments: function_call['args'] || {}
|
|
@@ -268,7 +267,7 @@ module Legion
|
|
|
268
267
|
model_id = model_data.fetch('name').delete_prefix('models/')
|
|
269
268
|
methods = Array(model_data['supportedGenerationMethods'])
|
|
270
269
|
|
|
271
|
-
|
|
270
|
+
Legion::Extensions::Llm::Model::Info.new(
|
|
272
271
|
id: model_id,
|
|
273
272
|
name: model_data['displayName'] || model_id,
|
|
274
273
|
provider: provider,
|
|
@@ -300,7 +299,7 @@ module Legion
|
|
|
300
299
|
end
|
|
301
300
|
|
|
302
301
|
def parse_embedding_response(response, model:, **)
|
|
303
|
-
|
|
302
|
+
Legion::Extensions::Llm::Embedding.new(
|
|
304
303
|
vectors: response.body.dig('embedding', 'values'),
|
|
305
304
|
model: model,
|
|
306
305
|
input_tokens: response.body.dig('usageMetadata', 'promptTokenCount').to_i
|
|
@@ -35,5 +35,5 @@ module Legion
|
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
Legion::Extensions::Llm::Provider.register(Legion::Extensions::Llm::Gemini::PROVIDER_FAMILY,
|
|
39
|
+
Legion::Extensions::Llm::Gemini::Provider)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lex-llm-gemini
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- LegionIO
|
|
@@ -9,76 +9,20 @@ bindir: bin
|
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
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: legion-json
|
|
28
|
-
requirement: !ruby/object:Gem::Requirement
|
|
29
|
-
requirements:
|
|
30
|
-
- - ">="
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '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: '1.0'
|
|
40
|
-
- !ruby/object:Gem::Dependency
|
|
41
|
-
name: legion-logging
|
|
42
|
-
requirement: !ruby/object:Gem::Requirement
|
|
43
|
-
requirements:
|
|
44
|
-
- - ">="
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: '1.0'
|
|
47
|
-
type: :runtime
|
|
48
|
-
prerelease: false
|
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
-
requirements:
|
|
51
|
-
- - ">="
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: '1.0'
|
|
54
|
-
- !ruby/object:Gem::Dependency
|
|
55
|
-
name: legion-settings
|
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
|
57
|
-
requirements:
|
|
58
|
-
- - ">="
|
|
59
|
-
- !ruby/object:Gem::Version
|
|
60
|
-
version: 1.3.14
|
|
61
|
-
type: :runtime
|
|
62
|
-
prerelease: false
|
|
63
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
-
requirements:
|
|
65
|
-
- - ">="
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version: 1.3.14
|
|
68
12
|
- !ruby/object:Gem::Dependency
|
|
69
13
|
name: lex-llm
|
|
70
14
|
requirement: !ruby/object:Gem::Requirement
|
|
71
15
|
requirements:
|
|
72
16
|
- - ">="
|
|
73
17
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: 0.1.
|
|
18
|
+
version: 0.1.3
|
|
75
19
|
type: :runtime
|
|
76
20
|
prerelease: false
|
|
77
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
22
|
requirements:
|
|
79
23
|
- - ">="
|
|
80
24
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: 0.1.
|
|
25
|
+
version: 0.1.3
|
|
82
26
|
description: Gemini provider integration for the LegionIO LLM routing framework.
|
|
83
27
|
email:
|
|
84
28
|
- matthewdiverson@gmail.com
|
|
@@ -99,7 +43,6 @@ files:
|
|
|
99
43
|
- lib/legion/extensions/llm/gemini.rb
|
|
100
44
|
- lib/legion/extensions/llm/gemini/provider.rb
|
|
101
45
|
- lib/legion/extensions/llm/gemini/version.rb
|
|
102
|
-
- lib/lex_llm_gemini.rb
|
|
103
46
|
homepage: https://github.com/LegionIO/lex-llm-gemini
|
|
104
47
|
licenses:
|
|
105
48
|
- MIT
|
data/lib/lex_llm_gemini.rb
DELETED