rubycanusellm 0.4.0 → 0.4.1
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 +2 -1
- data/README.md +1 -1
- data/lib/rubycanusellm/cli.rb +15 -1
- data/lib/rubycanusellm/templates/embedding.rb.tt +37 -0
- data/lib/rubycanusellm/version.rb +1 -1
- 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: 4fa122c59f084a74df8fe6cc1b7b0cf26982d5d7dd29a1dbf37937f821024e08
|
|
4
|
+
data.tar.gz: 3d01defe930449e9b6cd4adc974c6d051b3af6171287673e1cdd4b679b4648a0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 968934bfc95e1d8b5b1e8400ef9a784aa391db310984849ab4a5208c80c8378792afc26463ff4efb5b7f08772fbe72cf71266a2383cd41f1bb2c44078e6da7a8
|
|
7
|
+
data.tar.gz: 69800687f81c9753267db171bd9a64e74097126f16fa9ffaade1704536976fca53f0c151e4ab187ba2daf9febe45d5614ff9ff8a700c3265593b983db1595494
|
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [0.4.
|
|
3
|
+
## [0.4.1] - 2026-04-03
|
|
4
4
|
|
|
5
5
|
### Added
|
|
6
6
|
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
- Ollama provider (chat + embeddings, local, no API key required)
|
|
9
9
|
- `config.base_url` for pointing to custom Ollama instances
|
|
10
10
|
- Mistral and Ollama added to `EMBEDDING_PROVIDERS`
|
|
11
|
+
- `generate:embedding` command — scaffolds an embedding service with `embed`, `similarity`, and `most_similar` methods
|
|
11
12
|
|
|
12
13
|
## [0.3.1] - 2026-04-03
|
|
13
14
|
|
data/README.md
CHANGED
|
@@ -218,7 +218,7 @@ end
|
|
|
218
218
|
- [x] Voyage AI provider (embeddings)
|
|
219
219
|
- [x] Mistral provider (chat + embeddings)
|
|
220
220
|
- [x] Ollama provider (chat + embeddings, local)
|
|
221
|
-
- [
|
|
221
|
+
- [x] `generate:embedding` command
|
|
222
222
|
- [ ] Tool calling
|
|
223
223
|
|
|
224
224
|
## Development
|
data/lib/rubycanusellm/cli.rb
CHANGED
|
@@ -5,7 +5,8 @@ module RubyCanUseLLM
|
|
|
5
5
|
class CLI
|
|
6
6
|
COMMANDS = {
|
|
7
7
|
"generate:config" => :generate_config,
|
|
8
|
-
"generate:completion" => :generate_completion
|
|
8
|
+
"generate:completion" => :generate_completion,
|
|
9
|
+
"generate:embedding" => :generate_embedding
|
|
9
10
|
}.freeze
|
|
10
11
|
|
|
11
12
|
def self.start(args)
|
|
@@ -19,6 +20,7 @@ module RubyCanUseLLM
|
|
|
19
20
|
puts "Commands:"
|
|
20
21
|
puts " generate:config Generate configuration file"
|
|
21
22
|
puts " generate:completion Generate completion service object"
|
|
23
|
+
puts " generate:embedding Generate embedding service object"
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
|
|
@@ -45,6 +47,18 @@ module RubyCanUseLLM
|
|
|
45
47
|
write_template("completion", path)
|
|
46
48
|
end
|
|
47
49
|
|
|
50
|
+
def generate_embedding
|
|
51
|
+
if rails?
|
|
52
|
+
FileUtils.mkdir_p("app/services")
|
|
53
|
+
path = "app/services/embedding_service.rb"
|
|
54
|
+
else
|
|
55
|
+
FileUtils.mkdir_p("lib")
|
|
56
|
+
path = "lib/embedding_service.rb"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
write_template("embedding", path)
|
|
60
|
+
end
|
|
61
|
+
|
|
48
62
|
private
|
|
49
63
|
|
|
50
64
|
def rails?
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EmbeddingService
|
|
4
|
+
def embed(text, **options)
|
|
5
|
+
RubyCanUseLLM.embed(text, **options)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def similarity(text_a, text_b, **options)
|
|
9
|
+
response_a = embed(text_a, **options)
|
|
10
|
+
response_b = embed(text_b, **options)
|
|
11
|
+
response_a.cosine_similarity(response_b.embedding)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def most_similar(query, candidates, **options)
|
|
15
|
+
query_embedding = embed(query, **options)
|
|
16
|
+
candidates.max_by do |candidate|
|
|
17
|
+
response = embed(candidate, **options)
|
|
18
|
+
query_embedding.cosine_similarity(response.embedding)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Usage:
|
|
24
|
+
# service = EmbeddingService.new
|
|
25
|
+
#
|
|
26
|
+
# # Get an embedding vector
|
|
27
|
+
# response = service.embed("Hello world")
|
|
28
|
+
# puts response.embedding # [0.1, 0.2, ...]
|
|
29
|
+
# puts response.tokens # 3
|
|
30
|
+
#
|
|
31
|
+
# # Compare two texts
|
|
32
|
+
# score = service.similarity("cat", "dog")
|
|
33
|
+
# puts score # 0.87
|
|
34
|
+
#
|
|
35
|
+
# # Find the most similar candidate
|
|
36
|
+
# best = service.most_similar("ruby programming", ["python", "ruby", "javascript"])
|
|
37
|
+
# puts best # "ruby"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rubycanusellm
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Juan Manuel Guzman Nava
|
|
@@ -42,6 +42,7 @@ files:
|
|
|
42
42
|
- lib/rubycanusellm/response.rb
|
|
43
43
|
- lib/rubycanusellm/templates/completion.rb.tt
|
|
44
44
|
- lib/rubycanusellm/templates/config.rb.tt
|
|
45
|
+
- lib/rubycanusellm/templates/embedding.rb.tt
|
|
45
46
|
- lib/rubycanusellm/version.rb
|
|
46
47
|
- sig/rubycanusellm.rbs
|
|
47
48
|
homepage: https://github.com/mgznv/rubycanusellm
|