rails_ai_kit 0.1.3 → 0.1.5
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/README.md +122 -96
- data/lib/generators/rails_ai_kit/vector_columns_generator.rb +6 -8
- data/lib/rails_ai_kit/classifier.rb +7 -1
- data/lib/rails_ai_kit/version.rb +1 -1
- data/lib/rails_ai_kit.rb +6 -1
- metadata +8 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9a208aebef365d1747565891023f45d9211b447dc301c8168ea2ae676b0b83c2
|
|
4
|
+
data.tar.gz: ed938882ac92300a9e9f06b12dc0892d4116bfd8148e9e3d0571c5af9dbd0479
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fb31d8dc780086de7f673ccf1e3a13f6e7911850b4e93ed076508fc9c077df347381cfb7609866146babbfcd5e25b4e88c3590c68700965a19155fdb826f373d
|
|
7
|
+
data.tar.gz: fc1256d2d9525db8a6b7cddea733e6d6b3818a23ce3d13233f4b2dfd5f796427c1c51e2dbf5eb5c684ef7c7a74fff18ffad3bcba865351005bb26829215f2080
|
data/README.md
CHANGED
|
@@ -1,41 +1,55 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="logo.png" alt="Rails AI Kit" width="160" />
|
|
3
|
+
</div>
|
|
4
|
+
|
|
1
5
|
# Rails AI Kit
|
|
2
6
|
|
|
3
|
-
|
|
7
|
+
**AI-first toolkit for Rails** — embeddings, vector search, and classification without running your own ML or calling LLMs on every request.
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
> Rails gem for vector-based text classification (pgvector), embeddings (OpenAI, Cohere), similarity search, and generators. Train labels with examples; classify on save or in batch.
|
|
6
10
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
- **Multi-provider embeddings** – pass API keys for OpenAI, Cohere, or your own provider
|
|
11
|
+
[](https://rubygems.org/gems/rails_ai_kit)
|
|
12
|
+
[](https://rubyonrails.org/)
|
|
13
|
+
[](LICENSE)
|
|
11
14
|
|
|
12
|
-
|
|
15
|
+
---
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
Rails
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
### Overview
|
|
18
|
+
|
|
19
|
+
| | |
|
|
20
|
+
|:---|:---|
|
|
21
|
+
| **Rails-native** | Generators, ActiveRecord integration, single config file |
|
|
22
|
+
| **Vector-ready** | [pgvector](https://github.com/pgvector/pgvector) with OpenAI or Cohere embeddings |
|
|
23
|
+
| **Modular** | Use only the features you need; add more as the gem evolves |
|
|
24
|
+
|
|
25
|
+
**[Source code](https://github.com/imrrohitt/rails_ai_kit)** · **[RubyGems](https://rubygems.org/gems/rails_ai_kit)**
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Features
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
Rails AI Kit is organized around **features**. Each is optional and self-contained.
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
+
### Classifier
|
|
34
|
+
|
|
35
|
+
Vector-based text classification: route support tickets, moderate content, tag articles, or categorize documents. No ML training — you provide example texts per label; classification is nearest-neighbor in PostgreSQL.
|
|
36
|
+
|
|
37
|
+
- Train labels with examples → one vector per label
|
|
38
|
+
- Auto-classify on save (embed + compare → `label`, `confidence_score`)
|
|
39
|
+
- Similarity search: `Model.similar_to("query", limit: 5)`
|
|
40
|
+
- Batch classify for backfills or background jobs
|
|
41
|
+
|
|
42
|
+
*Requires pgvector, an embedding API (OpenAI/Cohere), and the install + vector_columns generators.*
|
|
43
|
+
|
|
44
|
+
---
|
|
33
45
|
|
|
34
46
|
## Requirements
|
|
35
47
|
|
|
36
48
|
- Rails 6+
|
|
37
|
-
- PostgreSQL with [pgvector](https://github.com/pgvector/pgvector)
|
|
38
|
-
- An embedding API (OpenAI or Cohere)
|
|
49
|
+
- PostgreSQL with [pgvector](https://github.com/pgvector/pgvector) (for Classifier and vector features)
|
|
50
|
+
- An embedding API key (OpenAI or Cohere) for features that use embeddings
|
|
51
|
+
|
|
52
|
+
---
|
|
39
53
|
|
|
40
54
|
## Installation
|
|
41
55
|
|
|
@@ -51,16 +65,16 @@ Then:
|
|
|
51
65
|
bundle install
|
|
52
66
|
```
|
|
53
67
|
|
|
54
|
-
### 1.
|
|
68
|
+
### 1. Install (pgvector + labels table)
|
|
55
69
|
|
|
56
|
-
|
|
70
|
+
For the **Classifier** feature, the gem needs pgvector and one internal table for label embeddings:
|
|
57
71
|
|
|
58
72
|
```bash
|
|
59
73
|
rails g rails_ai_kit:install
|
|
60
74
|
rails db:migrate
|
|
61
75
|
```
|
|
62
76
|
|
|
63
|
-
### 2. Configure
|
|
77
|
+
### 2. Configure
|
|
64
78
|
|
|
65
79
|
In `config/initializers/rails_ai_kit.rb` (create the file):
|
|
66
80
|
|
|
@@ -69,7 +83,6 @@ RailsAiKit.configure do |config|
|
|
|
69
83
|
config.embedding_provider = :openai # or :cohere
|
|
70
84
|
config.embedding_dimensions = 1536 # 1536 for OpenAI text-embedding-3-small
|
|
71
85
|
|
|
72
|
-
# Pass API keys for the provider(s) you use
|
|
73
86
|
config.api_keys = {
|
|
74
87
|
openai: ENV["OPENAI_API_KEY"],
|
|
75
88
|
cohere: ENV["COHERE_API_KEY"]
|
|
@@ -81,9 +94,9 @@ end
|
|
|
81
94
|
|
|
82
95
|
Use environment variables or Rails credentials; do not commit raw API keys.
|
|
83
96
|
|
|
84
|
-
### 3. Add vector columns
|
|
97
|
+
### 3. Add vector columns (for Classifier)
|
|
85
98
|
|
|
86
|
-
For
|
|
99
|
+
For models you want to classify (e.g. `articles` with a `content` column):
|
|
87
100
|
|
|
88
101
|
```bash
|
|
89
102
|
rails g rails_ai_kit:vector_columns Article content
|
|
@@ -92,9 +105,23 @@ rails db:migrate
|
|
|
92
105
|
|
|
93
106
|
This adds `embedding` (vector), `label` (string), and `confidence_score` (float).
|
|
94
107
|
|
|
108
|
+
---
|
|
109
|
+
|
|
95
110
|
## Usage
|
|
96
111
|
|
|
97
|
-
###
|
|
112
|
+
### Embeddings (general)
|
|
113
|
+
|
|
114
|
+
Use embeddings anywhere in your app:
|
|
115
|
+
|
|
116
|
+
```ruby
|
|
117
|
+
RailsAiKit.embed("some text") # => array of floats
|
|
118
|
+
RailsAiKit.embedding.embed("text") # same
|
|
119
|
+
RailsAiKit.embedding.embed_batch(["a", "b"]) # batch
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Classifier feature
|
|
123
|
+
|
|
124
|
+
#### Declare classification on a model
|
|
98
125
|
|
|
99
126
|
```ruby
|
|
100
127
|
class Article < ApplicationRecord
|
|
@@ -107,55 +134,43 @@ On save, the gem will:
|
|
|
107
134
|
|
|
108
135
|
1. Generate an embedding for `content`
|
|
109
136
|
2. Store it in `embedding`
|
|
110
|
-
3.
|
|
111
|
-
|
|
112
|
-
Example:
|
|
113
|
-
|
|
114
|
-
```ruby
|
|
115
|
-
article = Article.create!(content: "Apple released a new iPhone")
|
|
116
|
-
article.label # => "technology"
|
|
117
|
-
article.confidence_score # => 0.91
|
|
118
|
-
```
|
|
137
|
+
3. Compare to trained label vectors and set `label` and `confidence_score`
|
|
119
138
|
|
|
120
|
-
|
|
139
|
+
#### Train labels first
|
|
121
140
|
|
|
122
|
-
Before classifying, train each label with example texts
|
|
141
|
+
Before classifying, train each label with example texts:
|
|
123
142
|
|
|
124
143
|
```ruby
|
|
125
|
-
|
|
144
|
+
c = RailsAiKit.classifier("Article")
|
|
126
145
|
|
|
127
|
-
|
|
146
|
+
c.train("sports", examples: [
|
|
128
147
|
"football match",
|
|
129
148
|
"cricket tournament",
|
|
130
149
|
"Olympic gold medal"
|
|
131
150
|
])
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
"election results",
|
|
135
|
-
"parliament debate"
|
|
136
|
-
])
|
|
137
|
-
|
|
138
|
-
classifier.train("technology", examples: [
|
|
139
|
-
"new iPhone launch",
|
|
140
|
-
"AI software update"
|
|
141
|
-
])
|
|
151
|
+
c.train("politics", examples: ["election results", "parliament debate"])
|
|
152
|
+
c.train("technology", examples: ["new iPhone launch", "AI software update"])
|
|
142
153
|
```
|
|
143
154
|
|
|
144
|
-
|
|
155
|
+
#### Create records
|
|
145
156
|
|
|
146
157
|
```ruby
|
|
147
|
-
|
|
148
|
-
|
|
158
|
+
article = Article.create!(content: "Apple released a new iPhone")
|
|
159
|
+
article.label # => "technology"
|
|
160
|
+
article.confidence_score # => 0.91
|
|
149
161
|
```
|
|
150
162
|
|
|
151
|
-
|
|
163
|
+
#### Classify without saving
|
|
152
164
|
|
|
153
165
|
```ruby
|
|
154
|
-
|
|
166
|
+
RailsAiKit.classifier("Article").classify("India won the cricket match")
|
|
155
167
|
# => { label: "sports", confidence: 0.91, distance: 0.09 }
|
|
168
|
+
|
|
169
|
+
RailsAiKit.classifier("Article").classify_by_embedding(article.embedding)
|
|
170
|
+
# => { label: "technology", confidence: 0.91, distance: 0.09 }
|
|
156
171
|
```
|
|
157
172
|
|
|
158
|
-
|
|
173
|
+
#### Batch classification
|
|
159
174
|
|
|
160
175
|
```ruby
|
|
161
176
|
records = Article.where(label: nil).limit(100)
|
|
@@ -164,26 +179,24 @@ RailsAiKit.classifier("Article").batch_classify(records,
|
|
|
164
179
|
label_attribute: :label,
|
|
165
180
|
confidence_attribute: :confidence_score
|
|
166
181
|
)
|
|
167
|
-
# Optionally
|
|
182
|
+
# Optionally: records.each(&:save!)
|
|
168
183
|
```
|
|
169
184
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
Use normal ActiveRecord scopes:
|
|
185
|
+
#### Similarity search
|
|
173
186
|
|
|
174
187
|
```ruby
|
|
175
|
-
Article.
|
|
176
|
-
Article.where("confidence_score >= ?", 0.8)
|
|
188
|
+
Article.similar_to("new iPhone launch", limit: 5)
|
|
177
189
|
```
|
|
178
190
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
Find records similar to a piece of text (embeds the query, then nearest-neighbor search):
|
|
191
|
+
#### Filtering
|
|
182
192
|
|
|
183
193
|
```ruby
|
|
184
|
-
Article.
|
|
194
|
+
Article.where(label: "sports")
|
|
195
|
+
Article.where("confidence_score >= ?", 0.8)
|
|
185
196
|
```
|
|
186
197
|
|
|
198
|
+
---
|
|
199
|
+
|
|
187
200
|
## Example: Support ticket routing
|
|
188
201
|
|
|
189
202
|
```ruby
|
|
@@ -195,16 +208,18 @@ class SupportTicket < ApplicationRecord
|
|
|
195
208
|
end
|
|
196
209
|
|
|
197
210
|
# Train once
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
211
|
+
c = RailsAiKit.classifier("SupportTicket")
|
|
212
|
+
c.train("billing", examples: ["My payment failed", "Refund request", "Invoice issue"])
|
|
213
|
+
c.train("technical", examples: ["App crashed", "Login not working", "Error message"])
|
|
214
|
+
c.train("account", examples: ["Change email", "Close my account", "Password reset"])
|
|
202
215
|
|
|
203
216
|
# Incoming ticket
|
|
204
217
|
ticket = SupportTicket.create!(message: "My payment failed last night")
|
|
205
218
|
ticket.label # => "billing" → route to billing queue
|
|
206
219
|
```
|
|
207
220
|
|
|
221
|
+
---
|
|
222
|
+
|
|
208
223
|
## Configuration reference
|
|
209
224
|
|
|
210
225
|
| Option | Description | Default |
|
|
@@ -212,27 +227,33 @@ ticket.label # => "billing" → route to billing queue
|
|
|
212
227
|
| `embedding_provider` | `:openai` or `:cohere` | `:openai` |
|
|
213
228
|
| `embedding_dimensions` | Vector size (must match provider) | `1536` |
|
|
214
229
|
| `api_keys` | Hash of provider => API key | `{}` |
|
|
215
|
-
| `default_classifier_name` |
|
|
230
|
+
| `default_classifier_name` | Classifier name when none given | `"default"` |
|
|
231
|
+
|
|
232
|
+
---
|
|
216
233
|
|
|
217
234
|
## Generators
|
|
218
235
|
|
|
219
236
|
| Generator | Purpose |
|
|
220
237
|
|-----------|---------|
|
|
221
|
-
| `rails g rails_ai_kit:install` |
|
|
222
|
-
| `rails g rails_ai_kit:vector_columns ModelName content_column` |
|
|
238
|
+
| `rails g rails_ai_kit:install` | Enable pgvector + create `rails_ai_kit_labels` (for Classifier) |
|
|
239
|
+
| `rails g rails_ai_kit:vector_columns ModelName content_column` | Add `embedding`, `label`, `confidence_score` to a table |
|
|
223
240
|
|
|
224
|
-
|
|
241
|
+
---
|
|
225
242
|
|
|
226
|
-
|
|
227
|
-
2. **Classification** – New content is embedded and compared to all label vectors with cosine distance. The nearest label wins; confidence is `1 - distance`.
|
|
228
|
-
3. **Storage** – Your table holds the content, its embedding, the predicted label, and confidence. The gem only adds one table for label vectors.
|
|
243
|
+
## How Classifier works
|
|
229
244
|
|
|
230
|
-
|
|
245
|
+
1. **Label vectors** – Each label is a vector (average of example embeddings), stored in `rails_ai_kit_labels`.
|
|
246
|
+
2. **Classification** – New content is embedded and compared to label vectors (cosine distance). Nearest label wins; confidence = `1 - distance`.
|
|
247
|
+
3. **Storage** – Your table holds content, embedding, predicted label, and confidence. The gem adds one table for label vectors only.
|
|
231
248
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Roadmap
|
|
252
|
+
|
|
253
|
+
- **Classifier:** hierarchical labels, confidence threshold, hybrid search, incremental learning
|
|
254
|
+
- **More features** – additional AI capabilities as the gem evolves
|
|
255
|
+
|
|
256
|
+
---
|
|
236
257
|
|
|
237
258
|
## Development
|
|
238
259
|
|
|
@@ -243,21 +264,26 @@ bundle exec rake install
|
|
|
243
264
|
|
|
244
265
|
Run tests (when added) with `bundle exec rspec` or `bundle exec rake test`.
|
|
245
266
|
|
|
267
|
+
---
|
|
268
|
+
|
|
246
269
|
## License
|
|
247
270
|
|
|
248
271
|
MIT.
|
|
249
272
|
|
|
273
|
+
---
|
|
274
|
+
|
|
250
275
|
## How it’s built
|
|
251
276
|
|
|
252
|
-
- **Configuration**
|
|
253
|
-
- **Embedding providers**
|
|
254
|
-
- **EmbeddingService** –
|
|
255
|
-
- **
|
|
256
|
-
- **
|
|
257
|
-
- **
|
|
258
|
-
|
|
277
|
+
- **Configuration** – Embedding provider, dimensions, API keys.
|
|
278
|
+
- **Embedding providers** – Base + OpenAI and Cohere (`embed`, `embed_batch`).
|
|
279
|
+
- **EmbeddingService** – `RailsAiKit.embedding` / `RailsAiKit.embed(text)`.
|
|
280
|
+
- **Classifier** – Label training, `classify`, `classify_by_embedding`, `batch_classify`; uses `rails_ai_kit_labels` + Neighbor for similarity.
|
|
281
|
+
- **VectorClassify** – ActiveRecord concern: `vector_classify` macro, `similar_to` scope.
|
|
282
|
+
- **Generators** – Install (labels table), vector_columns (embedding/label/confidence on a model).
|
|
283
|
+
|
|
284
|
+
---
|
|
259
285
|
|
|
260
286
|
## Related
|
|
261
287
|
|
|
262
|
-
- [pgvector](https://github.com/pgvector/pgvector) –
|
|
288
|
+
- [pgvector](https://github.com/pgvector/pgvector) – Vector similarity search for Postgres
|
|
263
289
|
- [Neighbor](https://github.com/ankane/neighbor) – Nearest neighbor search for Rails (used by this gem)
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "rails/generators"
|
|
4
|
-
require "rails/generators/active_record/migration
|
|
4
|
+
require "rails/generators/active_record/migration"
|
|
5
5
|
|
|
6
6
|
module RailsAiKit
|
|
7
7
|
module Generators
|
|
8
8
|
class VectorColumnsGenerator < Rails::Generators::NamedBase
|
|
9
|
-
|
|
9
|
+
include ActiveRecord::Generators::Migration
|
|
10
|
+
|
|
11
|
+
source_root File.expand_path("vector_columns/templates", __dir__)
|
|
10
12
|
|
|
11
13
|
desc "Adds embedding, label, and confidence_score columns to an existing table for vector_classify"
|
|
12
14
|
|
|
@@ -16,9 +18,9 @@ module RailsAiKit
|
|
|
16
18
|
class_option :embedding_dimensions, type: :numeric, default: 1536,
|
|
17
19
|
desc: "Vector dimensions (must match your embedding provider)"
|
|
18
20
|
|
|
19
|
-
def
|
|
21
|
+
def add_vector_columns_migration
|
|
20
22
|
migration_template "add_vector_columns.rb",
|
|
21
|
-
"db/migrate
|
|
23
|
+
"db/migrate/add_rails_ai_kit_vector_columns_to_#{table_name}.rb"
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
private
|
|
@@ -27,10 +29,6 @@ module RailsAiKit
|
|
|
27
29
|
name.underscore.pluralize
|
|
28
30
|
end
|
|
29
31
|
|
|
30
|
-
def migration_timestamp
|
|
31
|
-
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
|
32
|
-
end
|
|
33
|
-
|
|
34
32
|
def dimensions
|
|
35
33
|
options[:embedding_dimensions] || (defined?(RailsAiKit) && RailsAiKit.configuration.embedding_dimensions) || 1536
|
|
36
34
|
end
|
|
@@ -6,7 +6,13 @@ module RailsAiKit
|
|
|
6
6
|
class Classifier
|
|
7
7
|
attr_reader :classifier_name
|
|
8
8
|
|
|
9
|
-
def initialize(classifier_name: nil)
|
|
9
|
+
def initialize(classifier_name: nil, **kwargs)
|
|
10
|
+
if kwargs.any?
|
|
11
|
+
raise ArgumentError,
|
|
12
|
+
"Classifier accepts only classifier_name: (optional). " \
|
|
13
|
+
"Labels are trained with .train(label_name, examples: [...]). " \
|
|
14
|
+
"Unknown: #{kwargs.keys.join(', ')}"
|
|
15
|
+
end
|
|
10
16
|
@classifier_name = classifier_name || RailsAiKit.configuration.default_classifier_name
|
|
11
17
|
end
|
|
12
18
|
|
data/lib/rails_ai_kit/version.rb
CHANGED
data/lib/rails_ai_kit.rb
CHANGED
|
@@ -4,7 +4,7 @@ require_relative "rails_ai_kit/version"
|
|
|
4
4
|
require_relative "rails_ai_kit/configuration"
|
|
5
5
|
|
|
6
6
|
module RailsAiKit
|
|
7
|
-
class Error < StandardError; end
|
|
7
|
+
class Error < StandardError; end
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
require_relative "rails_ai_kit/embedding_providers/base"
|
|
@@ -36,4 +36,9 @@ module RailsAiKit
|
|
|
36
36
|
def self.classifier(classifier_name = nil)
|
|
37
37
|
Classifier.new(classifier_name: classifier_name)
|
|
38
38
|
end
|
|
39
|
+
|
|
40
|
+
# Convenience: embed a single text. Same as RailsAiKit.embedding.embed(text).
|
|
41
|
+
def self.embed(text)
|
|
42
|
+
embedding.embed(text)
|
|
43
|
+
end
|
|
39
44
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rails_ai_kit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rails AI Kit Contributors
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: activerecord
|
|
@@ -66,11 +65,11 @@ dependencies:
|
|
|
66
65
|
- - ">="
|
|
67
66
|
- !ruby/object:Gem::Version
|
|
68
67
|
version: '0.2'
|
|
69
|
-
description: 'Rails AI Kit provides
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
description: 'Rails AI Kit provides AI building blocks for Rails apps: embeddings
|
|
69
|
+
(OpenAI, Cohere), vector-based classification, similarity search, and generators.
|
|
70
|
+
Start with the Classifier feature; more capabilities as the gem grows.'
|
|
72
71
|
email:
|
|
73
|
-
-
|
|
72
|
+
- imrohitkushwaha2002@gmail.com
|
|
74
73
|
executables: []
|
|
75
74
|
extensions: []
|
|
76
75
|
extra_rdoc_files: []
|
|
@@ -98,7 +97,6 @@ metadata:
|
|
|
98
97
|
homepage_uri: https://github.com/imrrohitt/rails_ai_kit
|
|
99
98
|
source_code_uri: https://github.com/imrrohitt/rails_ai_kit
|
|
100
99
|
changelog_uri: https://github.com/imrrohitt/rails_ai_kit/blob/main/CHANGELOG.md
|
|
101
|
-
post_install_message:
|
|
102
100
|
rdoc_options: []
|
|
103
101
|
require_paths:
|
|
104
102
|
- lib
|
|
@@ -113,8 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
113
111
|
- !ruby/object:Gem::Version
|
|
114
112
|
version: '0'
|
|
115
113
|
requirements: []
|
|
116
|
-
rubygems_version: 3.
|
|
117
|
-
signing_key:
|
|
114
|
+
rubygems_version: 3.6.9
|
|
118
115
|
specification_version: 4
|
|
119
|
-
summary:
|
|
116
|
+
summary: 'AI-first toolkit for Rails: embeddings, vector search, and classification'
|
|
120
117
|
test_files: []
|