red-candle 1.0.0.pre.7 → 1.0.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -10
  3. data/README.md +322 -4
  4. data/ext/candle/src/lib.rs +6 -3
  5. data/ext/candle/src/llm/gemma.rs +5 -0
  6. data/ext/candle/src/llm/llama.rs +5 -0
  7. data/ext/candle/src/llm/mistral.rs +5 -0
  8. data/ext/candle/src/llm/mod.rs +1 -89
  9. data/ext/candle/src/llm/quantized_gguf.rs +5 -0
  10. data/ext/candle/src/ner.rs +423 -0
  11. data/ext/candle/src/reranker.rs +24 -21
  12. data/ext/candle/src/ruby/device.rs +6 -6
  13. data/ext/candle/src/ruby/dtype.rs +4 -4
  14. data/ext/candle/src/ruby/embedding_model.rs +36 -33
  15. data/ext/candle/src/ruby/llm.rs +31 -13
  16. data/ext/candle/src/ruby/mod.rs +1 -2
  17. data/ext/candle/src/ruby/tensor.rs +66 -66
  18. data/ext/candle/src/ruby/tokenizer.rs +269 -0
  19. data/ext/candle/src/ruby/utils.rs +6 -24
  20. data/ext/candle/src/tokenizer/loader.rs +108 -0
  21. data/ext/candle/src/tokenizer/mod.rs +103 -0
  22. data/ext/candle/target/release/build/bindgen-0f89ba23b9ca1395/out/host-target.txt +1 -0
  23. data/ext/candle/target/release/build/clang-sys-cac31d63c4694603/out/common.rs +355 -0
  24. data/ext/candle/target/release/build/clang-sys-cac31d63c4694603/out/dynamic.rs +276 -0
  25. data/ext/candle/target/release/build/clang-sys-cac31d63c4694603/out/macros.rs +49 -0
  26. data/ext/candle/target/release/build/pulp-1b95cfe377eede97/out/x86_64_asm.rs +2748 -0
  27. data/ext/candle/target/release/build/rb-sys-f8ac4edc30ab3e53/out/bindings-0.9.116-mri-arm64-darwin24-3.3.0.rs +8902 -0
  28. data/lib/candle/build_info.rb +2 -0
  29. data/lib/candle/device_utils.rb +2 -0
  30. data/lib/candle/ner.rb +345 -0
  31. data/lib/candle/reranker.rb +1 -1
  32. data/lib/candle/tensor.rb +2 -0
  33. data/lib/candle/tokenizer.rb +139 -0
  34. data/lib/candle/version.rb +4 -2
  35. data/lib/candle.rb +2 -0
  36. metadata +126 -3
  37. data/ext/candle/src/ruby/qtensor.rs +0 -69
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red-candle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Petersen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-07-13 00:00:00.000000000 Z
12
+ date: 2025-07-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rb_sys
@@ -25,6 +25,118 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: minitest
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake-compiler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: yard
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: yard-rustdoc
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: redcarpet
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '3.6'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '3.6'
112
+ - !ruby/object:Gem::Dependency
113
+ name: informers
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: simplecov
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
28
140
  description: huggingface/candle for Ruby
29
141
  email:
30
142
  - chris@petersen.io
@@ -54,6 +166,7 @@ files:
54
166
  - ext/candle/src/llm/mod.rs
55
167
  - ext/candle/src/llm/quantized_gguf.rs
56
168
  - ext/candle/src/llm/text_generation.rs
169
+ - ext/candle/src/ner.rs
57
170
  - ext/candle/src/reranker.rs
58
171
  - ext/candle/src/ruby/device.rs
59
172
  - ext/candle/src/ruby/dtype.rs
@@ -61,18 +174,28 @@ files:
61
174
  - ext/candle/src/ruby/errors.rs
62
175
  - ext/candle/src/ruby/llm.rs
63
176
  - ext/candle/src/ruby/mod.rs
64
- - ext/candle/src/ruby/qtensor.rs
65
177
  - ext/candle/src/ruby/result.rs
66
178
  - ext/candle/src/ruby/tensor.rs
179
+ - ext/candle/src/ruby/tokenizer.rs
67
180
  - ext/candle/src/ruby/utils.rs
181
+ - ext/candle/src/tokenizer/loader.rs
182
+ - ext/candle/src/tokenizer/mod.rs
183
+ - ext/candle/target/release/build/bindgen-0f89ba23b9ca1395/out/host-target.txt
184
+ - ext/candle/target/release/build/clang-sys-cac31d63c4694603/out/common.rs
185
+ - ext/candle/target/release/build/clang-sys-cac31d63c4694603/out/dynamic.rs
186
+ - ext/candle/target/release/build/clang-sys-cac31d63c4694603/out/macros.rs
187
+ - ext/candle/target/release/build/pulp-1b95cfe377eede97/out/x86_64_asm.rs
188
+ - ext/candle/target/release/build/rb-sys-f8ac4edc30ab3e53/out/bindings-0.9.116-mri-arm64-darwin24-3.3.0.rs
68
189
  - lib/candle.rb
69
190
  - lib/candle/build_info.rb
70
191
  - lib/candle/device_utils.rb
71
192
  - lib/candle/embedding_model.rb
72
193
  - lib/candle/embedding_model_type.rb
73
194
  - lib/candle/llm.rb
195
+ - lib/candle/ner.rb
74
196
  - lib/candle/reranker.rb
75
197
  - lib/candle/tensor.rb
198
+ - lib/candle/tokenizer.rb
76
199
  - lib/candle/version.rb
77
200
  homepage: https://github.com/assaydepot/red-candle
78
201
  licenses:
@@ -1,69 +0,0 @@
1
- use std::sync::Arc;
2
- use magnus::{method, class, RModule, Error, Module};
3
-
4
- use crate::ruby::errors::wrap_candle_err;
5
- use crate::ruby::{Tensor, Result as RbResult};
6
- use ::candle_core::{quantized::QTensor as CoreQTensor, Device as CoreDevice};
7
-
8
- #[derive(Debug)]
9
- #[magnus::wrap(class = "Candle::QTensor", free_immediately, size)]
10
- /// A quantized tensor.
11
- pub struct QTensor(Arc<CoreQTensor>);
12
-
13
- impl std::ops::Deref for QTensor {
14
- type Target = CoreQTensor;
15
-
16
- fn deref(&self) -> &Self::Target {
17
- self.0.as_ref()
18
- }
19
- }
20
-
21
- impl QTensor {
22
- ///Gets the tensors quantized dtype.
23
- /// &RETURNS&: str
24
- pub fn ggml_dtype(&self) -> String {
25
- format!("{:?}", self.0.dtype())
26
- }
27
-
28
- ///Gets the rank of the tensor.
29
- /// &RETURNS&: int
30
- pub fn rank(&self) -> usize {
31
- self.0.rank()
32
- }
33
-
34
- ///Gets the shape of the tensor.
35
- /// &RETURNS&: Tuple[int]
36
- pub fn shape(&self) -> Vec<usize> {
37
- self.0.shape().dims().to_vec()
38
- }
39
-
40
- pub fn __repr__(&self) -> String {
41
- format!("{:?}", self.0)
42
- }
43
-
44
- pub fn __str__(&self) -> String {
45
- self.__repr__()
46
- }
47
-
48
- /// Dequantizes the tensor.
49
- /// &RETURNS&: Tensor
50
- pub fn dequantize(&self) -> RbResult<Tensor> {
51
- let tensor = self.0.dequantize(&CoreDevice::Cpu).map_err(wrap_candle_err)?;
52
- Ok(Tensor(tensor))
53
- }
54
-
55
- // fn matmul_t(&self, lhs: &Tensor) -> RbResult<Tensor> {
56
- // let qmatmul = ::candle_core::quantized::QMatMul::from_arc(self.0.clone());
57
- // let res = qmatmul.forward(lhs).map_err(wrap_candle_err)?;
58
- // Ok(Tensor(res))
59
- // }
60
- }
61
-
62
- pub fn init(rb_candle: RModule) -> Result<(), Error> {
63
- let rb_qtensor = rb_candle.define_class("QTensor", class::object())?;
64
- rb_qtensor.define_method("ggml_dtype", method!(QTensor::ggml_dtype, 0))?;
65
- rb_qtensor.define_method("rank", method!(QTensor::rank, 0))?;
66
- rb_qtensor.define_method("shape", method!(QTensor::shape, 0))?;
67
- rb_qtensor.define_method("dequantize", method!(QTensor::dequantize, 0))?;
68
- Ok(())
69
- }