lex-gemini 0.1.3 → 0.1.4
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/CHANGELOG.md +7 -0
- data/lib/legion/extensions/gemini/helpers/usage.rb +28 -0
- data/lib/legion/extensions/gemini/runners/cached_contents.rb +12 -6
- data/lib/legion/extensions/gemini/runners/content.rb +8 -5
- data/lib/legion/extensions/gemini/runners/embeddings.rb +5 -2
- data/lib/legion/extensions/gemini/runners/files.rb +9 -4
- data/lib/legion/extensions/gemini/runners/models.rb +5 -2
- data/lib/legion/extensions/gemini/runners/tokens.rb +3 -1
- data/lib/legion/extensions/gemini/version.rb +1 -1
- data/lib/legion/extensions/gemini.rb +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d421ebaa8ddf2e878fadb96843748b4a24b010198c6d65a182159ae156f60789
|
|
4
|
+
data.tar.gz: 573516ccc11f3ef6daeebee65cbc1c910f58e1f879c26474500a185bad190bb5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: be475106b4bce2d0f7b49b5d4518cf1cc37d5b0cdf7f320b9ce789e5a2805f75a4dc30dd02aa21e0383d1a55958c20881956a34a4fe91b080b6e251153a41c49
|
|
7
|
+
data.tar.gz: a612c3b7451965e3b85a5216068740ee7fcf781ec91b51e73e62fdfa1cb7e74d9e79cf0211abb88b94f78d500eb1a14e056040dbeb6930687f274d7bea53a062
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.4] - 2026-03-31
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- `Helpers::Usage` module with `extract_usage` helper that parses `usageMetadata` from Gemini API responses
|
|
7
|
+
- All runner methods now return a `usage:` key with `input_tokens`, `output_tokens`, `cache_read_tokens`, and `cache_write_tokens`
|
|
8
|
+
- Usage specs for all runners and the new `Helpers::Usage` module (80 examples total, up from 36)
|
|
9
|
+
|
|
3
10
|
## [0.1.3] - 2026-03-30
|
|
4
11
|
|
|
5
12
|
### Changed
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Gemini
|
|
6
|
+
module Helpers
|
|
7
|
+
module Usage
|
|
8
|
+
def extract_usage(body)
|
|
9
|
+
return zero_usage unless body.is_a?(Hash)
|
|
10
|
+
|
|
11
|
+
{
|
|
12
|
+
input_tokens: body.dig('usageMetadata', 'promptTokenCount') || 0,
|
|
13
|
+
output_tokens: body.dig('usageMetadata', 'candidatesTokenCount') || 0,
|
|
14
|
+
cache_read_tokens: body.dig('usageMetadata', 'cachedContentTokenCount') || 0,
|
|
15
|
+
cache_write_tokens: 0
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def zero_usage
|
|
22
|
+
{ input_tokens: 0, output_tokens: 0, cache_read_tokens: 0, cache_write_tokens: 0 }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -6,31 +6,37 @@ module Legion
|
|
|
6
6
|
module Runners
|
|
7
7
|
module CachedContents
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
|
+
include Helpers::Usage
|
|
9
10
|
|
|
10
11
|
def create(api_key:, model:, contents:, ttl: nil, expire_time: nil, display_name: nil, system_instruction: nil, **)
|
|
11
12
|
client = Helpers::Client.new(api_key: api_key)
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
body = client.create_cached_content(model: model, contents: contents, ttl: ttl, expire_time: expire_time,
|
|
14
|
+
display_name: display_name, system_instruction: system_instruction)
|
|
15
|
+
{ result: body, usage: extract_usage(body) }
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
def list(api_key:, page_size: nil, page_token: nil, **)
|
|
17
19
|
client = Helpers::Client.new(api_key: api_key)
|
|
18
|
-
|
|
20
|
+
body = client.list_cached_contents(page_size: page_size, page_token: page_token)
|
|
21
|
+
{ result: body, usage: extract_usage(body) }
|
|
19
22
|
end
|
|
20
23
|
|
|
21
24
|
def get(api_key:, name:, **)
|
|
22
25
|
client = Helpers::Client.new(api_key: api_key)
|
|
23
|
-
|
|
26
|
+
body = client.get_cached_content(name: name)
|
|
27
|
+
{ result: body, usage: extract_usage(body) }
|
|
24
28
|
end
|
|
25
29
|
|
|
26
30
|
def update(api_key:, name:, ttl: nil, expire_time: nil, **)
|
|
27
31
|
client = Helpers::Client.new(api_key: api_key)
|
|
28
|
-
|
|
32
|
+
body = client.update_cached_content(name: name, ttl: ttl, expire_time: expire_time)
|
|
33
|
+
{ result: body, usage: extract_usage(body) }
|
|
29
34
|
end
|
|
30
35
|
|
|
31
36
|
def delete(api_key:, name:, **)
|
|
32
37
|
client = Helpers::Client.new(api_key: api_key)
|
|
33
|
-
|
|
38
|
+
body = client.delete_cached_content(name: name)
|
|
39
|
+
{ result: body, usage: extract_usage(body) }
|
|
34
40
|
end
|
|
35
41
|
end
|
|
36
42
|
end
|
|
@@ -6,20 +6,23 @@ module Legion
|
|
|
6
6
|
module Runners
|
|
7
7
|
module Content
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
|
+
include Helpers::Usage
|
|
9
10
|
|
|
10
11
|
def generate(api_key:, contents:, model: 'gemini-2.0-flash', generation_config: nil, safety_settings: nil,
|
|
11
12
|
system_instruction: nil, **)
|
|
12
13
|
client = Helpers::Client.new(api_key: api_key, model: model)
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
body = client.generate_content(contents: contents, generation_config: generation_config,
|
|
15
|
+
safety_settings: safety_settings, system_instruction: system_instruction)
|
|
16
|
+
{ result: body, usage: extract_usage(body) }
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
def stream_generate(api_key:, contents:, model: 'gemini-2.0-flash', generation_config: nil, safety_settings: nil,
|
|
18
20
|
system_instruction: nil, **)
|
|
19
21
|
client = Helpers::Client.new(api_key: api_key, model: model)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
body = client.stream_generate_content(contents: contents, generation_config: generation_config,
|
|
23
|
+
safety_settings: safety_settings,
|
|
24
|
+
system_instruction: system_instruction)
|
|
25
|
+
{ result: body, usage: extract_usage(body) }
|
|
23
26
|
end
|
|
24
27
|
end
|
|
25
28
|
end
|
|
@@ -6,15 +6,18 @@ module Legion
|
|
|
6
6
|
module Runners
|
|
7
7
|
module Embeddings
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
|
+
include Helpers::Usage
|
|
9
10
|
|
|
10
11
|
def embed(api_key:, content:, model: 'gemini-embedding-exp', task_type: nil, title: nil, **)
|
|
11
12
|
client = Helpers::Client.new(api_key: api_key, model: model)
|
|
12
|
-
|
|
13
|
+
body = client.embed_content(content: content, task_type: task_type, title: title)
|
|
14
|
+
{ result: body, usage: extract_usage(body) }
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
def batch_embed(api_key:, requests:, model: 'gemini-embedding-exp', **)
|
|
16
18
|
client = Helpers::Client.new(api_key: api_key, model: model)
|
|
17
|
-
|
|
19
|
+
body = client.batch_embed_contents(requests: requests)
|
|
20
|
+
{ result: body, usage: extract_usage(body) }
|
|
18
21
|
end
|
|
19
22
|
end
|
|
20
23
|
end
|
|
@@ -6,25 +6,30 @@ module Legion
|
|
|
6
6
|
module Runners
|
|
7
7
|
module Files
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
|
+
include Helpers::Usage
|
|
9
10
|
|
|
10
11
|
def upload(api_key:, file_path:, mime_type:, display_name: nil, **)
|
|
11
12
|
client = Helpers::Client.new(api_key: api_key)
|
|
12
|
-
|
|
13
|
+
body = client.upload_file(file_path: file_path, mime_type: mime_type, display_name: display_name)
|
|
14
|
+
{ result: body, usage: extract_usage(body) }
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
def list(api_key:, page_size: nil, page_token: nil, **)
|
|
16
18
|
client = Helpers::Client.new(api_key: api_key)
|
|
17
|
-
|
|
19
|
+
body = client.list_files(page_size: page_size, page_token: page_token)
|
|
20
|
+
{ result: body, usage: extract_usage(body) }
|
|
18
21
|
end
|
|
19
22
|
|
|
20
23
|
def get(api_key:, name:, **)
|
|
21
24
|
client = Helpers::Client.new(api_key: api_key)
|
|
22
|
-
|
|
25
|
+
body = client.get_file(name: name)
|
|
26
|
+
{ result: body, usage: extract_usage(body) }
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
def delete(api_key:, name:, **)
|
|
26
30
|
client = Helpers::Client.new(api_key: api_key)
|
|
27
|
-
|
|
31
|
+
body = client.delete_file(name: name)
|
|
32
|
+
{ result: body, usage: extract_usage(body) }
|
|
28
33
|
end
|
|
29
34
|
end
|
|
30
35
|
end
|
|
@@ -6,15 +6,18 @@ module Legion
|
|
|
6
6
|
module Runners
|
|
7
7
|
module Models
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
|
+
include Helpers::Usage
|
|
9
10
|
|
|
10
11
|
def list(api_key:, **)
|
|
11
12
|
client = Helpers::Client.new(api_key: api_key)
|
|
12
|
-
|
|
13
|
+
body = client.list_models
|
|
14
|
+
{ result: body, usage: extract_usage(body) }
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
def get(api_key:, name:, **)
|
|
16
18
|
client = Helpers::Client.new(api_key: api_key)
|
|
17
|
-
|
|
19
|
+
body = client.get_model(name: name)
|
|
20
|
+
{ result: body, usage: extract_usage(body) }
|
|
18
21
|
end
|
|
19
22
|
end
|
|
20
23
|
end
|
|
@@ -6,10 +6,12 @@ module Legion
|
|
|
6
6
|
module Runners
|
|
7
7
|
module Tokens
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
|
+
include Helpers::Usage
|
|
9
10
|
|
|
10
11
|
def count(api_key:, contents:, model: 'gemini-2.0-flash', **)
|
|
11
12
|
client = Helpers::Client.new(api_key: api_key, model: model)
|
|
12
|
-
|
|
13
|
+
body = client.count_tokens(contents: contents)
|
|
14
|
+
{ result: body, usage: extract_usage(body) }
|
|
13
15
|
end
|
|
14
16
|
end
|
|
15
17
|
end
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require 'legion/extensions/gemini/version'
|
|
4
4
|
require 'legion/extensions/gemini/helpers/client'
|
|
5
|
+
require 'legion/extensions/gemini/helpers/usage'
|
|
5
6
|
require 'legion/extensions/gemini/runners/content'
|
|
6
7
|
require 'legion/extensions/gemini/runners/embeddings'
|
|
7
8
|
require 'legion/extensions/gemini/runners/models'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lex-gemini
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -143,6 +143,7 @@ files:
|
|
|
143
143
|
- lex-gemini.gemspec
|
|
144
144
|
- lib/legion/extensions/gemini.rb
|
|
145
145
|
- lib/legion/extensions/gemini/helpers/client.rb
|
|
146
|
+
- lib/legion/extensions/gemini/helpers/usage.rb
|
|
146
147
|
- lib/legion/extensions/gemini/runners/cached_contents.rb
|
|
147
148
|
- lib/legion/extensions/gemini/runners/content.rb
|
|
148
149
|
- lib/legion/extensions/gemini/runners/embeddings.rb
|