ragdoll-rails 0.1.8 → 0.1.9
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 +18 -21
- data/config/routes.rb +1 -1
- data/lib/generators/ragdoll/init/templates/INSTALL +3 -2
- data/lib/generators/ragdoll/init_generator.rb +68 -0
- data/lib/ragdoll/rails/engine.rb +18 -1
- data/lib/ragdoll/rails/version.rb +1 -1
- metadata +146 -6
- data/lib/generators/ragdoll/init/init_generator.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b281102216de9a922f017373bc1510946bbb530c229d8e2362aaf09257125450
|
4
|
+
data.tar.gz: 7af9bf6f7a3024445e70088d9698d1f5baafa1adb3ecd03f8efb6aee1799d707
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c9457bed61b4c8c26dbffb8b448d777c0f4df3244320eddb020c4b9386328dca3249c5f2af7fbdab622f6727b0e86354ef6d5e2b216e483b7946a6bfa2f81ec
|
7
|
+
data.tar.gz: 2aa4a94c63eb0bd651f865801ec36624326281b62f6b26043d18def963a7905155a9c25746f17272811c162cceb322656672f7385b0f62a50972083293b9264d
|
data/README.md
CHANGED
@@ -157,14 +157,12 @@ Ragdoll.add_text('Content', title: 'Guide')
|
|
157
157
|
Ragdoll.add_directory('/knowledge-base', recursive: true)
|
158
158
|
|
159
159
|
# Manage documents
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
client.list_documents(limit: 50)
|
160
|
+
Ragdoll.update_document(id: 123, title: 'New Title')
|
161
|
+
Ragdoll.delete_document(id: 123)
|
162
|
+
Ragdoll.list_documents(limit: 50)
|
164
163
|
|
165
164
|
# Bulk operations
|
166
|
-
|
167
|
-
client.add_directory('/docs', recursive: true)
|
165
|
+
Ragdoll.add_directory(path: '/docs', recursive: true)
|
168
166
|
```
|
169
167
|
|
170
168
|
## 🏗️ Rails Integration Examples
|
@@ -194,15 +192,11 @@ end
|
|
194
192
|
|
195
193
|
```ruby
|
196
194
|
class SupportBot
|
197
|
-
def initialize
|
198
|
-
@ragdoll = Ragdoll::Client.new
|
199
|
-
end
|
200
|
-
|
201
195
|
def answer_question(question, category: nil)
|
202
196
|
filters = { document_type: 'pdf' } if category == 'manual'
|
203
197
|
|
204
|
-
context =
|
205
|
-
question,
|
198
|
+
context = Ragdoll.get_context(
|
199
|
+
query: question,
|
206
200
|
limit: 3,
|
207
201
|
threshold: 0.8,
|
208
202
|
filters: filters
|
@@ -229,10 +223,8 @@ end
|
|
229
223
|
```ruby
|
230
224
|
class ProcessDocumentsJob < ApplicationJob
|
231
225
|
def perform(file_paths)
|
232
|
-
ragdoll = Ragdoll::Client.new
|
233
|
-
|
234
226
|
file_paths.each do |path|
|
235
|
-
|
227
|
+
Ragdoll.add_document(path: path)
|
236
228
|
end
|
237
229
|
end
|
238
230
|
end
|
@@ -434,12 +426,17 @@ healthy = Ragdoll.client.healthy?
|
|
434
426
|
# spec/support/ragdoll_helpers.rb
|
435
427
|
module RagdollHelpers
|
436
428
|
def setup_test_documents
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
429
|
+
temp_file = Tempfile.new(['test_doc', '.txt'])
|
430
|
+
temp_file.write("Rails is a web framework")
|
431
|
+
temp_file.rewind
|
432
|
+
|
433
|
+
begin
|
434
|
+
result = Ragdoll.add_document(path: temp_file.path)
|
435
|
+
@doc = Ragdoll::Document.find(result[:document_id]) if result[:success]
|
436
|
+
ensure
|
437
|
+
temp_file.close
|
438
|
+
temp_file.unlink
|
439
|
+
end
|
443
440
|
end
|
444
441
|
end
|
445
442
|
|
data/config/routes.rb
CHANGED
@@ -21,10 +21,11 @@ Next steps:
|
|
21
21
|
export GOOGLE_API_KEY="your-api-key-here"
|
22
22
|
export GOOGLE_PROJECT_ID="your-project-id"
|
23
23
|
|
24
|
-
2.
|
24
|
+
2. Run database migrations:
|
25
25
|
|
26
|
-
rails ragdoll:install:migrations
|
27
26
|
rails db:migrate
|
27
|
+
|
28
|
+
Note: Migrations have been automatically copied to your db/migrate directory.
|
28
29
|
|
29
30
|
3. Ensure you have PostgreSQL with pgvector extension installed:
|
30
31
|
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require 'rails/generators/active_record'
|
5
|
+
|
6
|
+
module Ragdoll
|
7
|
+
class InitGenerator < ::Rails::Generators::Base
|
8
|
+
include ::Rails::Generators::Migration
|
9
|
+
|
10
|
+
desc "Create Ragdoll configuration initializer and install migrations"
|
11
|
+
source_root File.expand_path("init/templates", __dir__)
|
12
|
+
|
13
|
+
def create_initializer_file
|
14
|
+
template "ragdoll_config.rb", "config/initializers/ragdoll_config.rb"
|
15
|
+
end
|
16
|
+
|
17
|
+
def copy_migrations
|
18
|
+
say "Installing Ragdoll migrations..."
|
19
|
+
|
20
|
+
# Find the ragdoll gem path
|
21
|
+
begin
|
22
|
+
ragdoll_path = Gem::Specification.find_by_name('ragdoll').gem_dir
|
23
|
+
rescue Gem::MissingSpecError
|
24
|
+
# If not found as a gem (e.g., using path in Gemfile), try to find it relative to this engine
|
25
|
+
ragdoll_path = File.expand_path("../../../../../ragdoll", __dir__)
|
26
|
+
end
|
27
|
+
|
28
|
+
migration_source_path = File.join(ragdoll_path, 'db/migrate')
|
29
|
+
|
30
|
+
if File.exist?(migration_source_path)
|
31
|
+
Dir.glob("#{migration_source_path}/*.rb").each do |migration_file|
|
32
|
+
migration_name = File.basename(migration_file)
|
33
|
+
|
34
|
+
# Check if migration already exists in the app
|
35
|
+
if migration_exists?(migration_name)
|
36
|
+
say_status "skip", migration_name, :yellow
|
37
|
+
else
|
38
|
+
copy_file migration_file, "db/migrate/#{migration_name}"
|
39
|
+
say_status "copied", migration_name, :green
|
40
|
+
end
|
41
|
+
end
|
42
|
+
else
|
43
|
+
say "Warning: Could not find Ragdoll migrations at #{migration_source_path}", :red
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def show_readme
|
48
|
+
readme "INSTALL" if behavior == :invoke
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def application_name
|
54
|
+
::Rails.application.class.name.split("::").first.underscore
|
55
|
+
end
|
56
|
+
|
57
|
+
def migration_exists?(filename)
|
58
|
+
Dir.glob("#{destination_root}/db/migrate/*.rb").any? do |existing_file|
|
59
|
+
File.basename(existing_file) == filename
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Required for Rails::Generators::Migration
|
64
|
+
def self.next_migration_number(dirname)
|
65
|
+
::ActiveRecord::Generators::Base.next_migration_number(dirname)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/ragdoll/rails/engine.rb
CHANGED
@@ -5,7 +5,24 @@ require 'rails/engine'
|
|
5
5
|
module Ragdoll
|
6
6
|
module Rails
|
7
7
|
class Engine < ::Rails::Engine
|
8
|
-
isolate_namespace Ragdoll
|
8
|
+
isolate_namespace Ragdoll::Rails
|
9
|
+
engine_name 'ragdoll'
|
10
|
+
|
11
|
+
# Configure the engine to use migrations from the ragdoll gem
|
12
|
+
# Find the ragdoll gem path
|
13
|
+
begin
|
14
|
+
ragdoll_path = Gem::Specification.find_by_name('ragdoll').gem_dir
|
15
|
+
rescue Gem::MissingSpecError
|
16
|
+
# If not found as a gem (e.g., using path in Gemfile), try to find it relative to this engine
|
17
|
+
ragdoll_path = File.expand_path("../../../../ragdoll", __dir__)
|
18
|
+
end
|
19
|
+
|
20
|
+
migration_path = File.join(ragdoll_path, 'db/migrate')
|
21
|
+
|
22
|
+
# Set the migration paths for this engine to point to ragdoll gem
|
23
|
+
if File.exist?(migration_path)
|
24
|
+
config.paths["db/migrate"] = [migration_path]
|
25
|
+
end
|
9
26
|
|
10
27
|
config.generators do |g|
|
11
28
|
g.test_framework :rspec
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ragdoll-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dewayne VanHoozer
|
@@ -15,28 +15,168 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - ">="
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0
|
18
|
+
version: '0'
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - ">="
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: 0
|
25
|
+
version: '0'
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rails
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 8.0.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
39
|
+
version: 8.0.2
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: sidekiq
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: amazing_print
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
type: :development
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: debug_me
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: claude-on-rails
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: rspec
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rspec-core
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
type: :development
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: rspec-expectations
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
type: :development
|
132
|
+
prerelease: false
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
name: rspec-mocks
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
type: :development
|
146
|
+
prerelease: false
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
- !ruby/object:Gem::Dependency
|
153
|
+
name: factory_bot_rails
|
154
|
+
requirement: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
type: :development
|
160
|
+
prerelease: false
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
- !ruby/object:Gem::Dependency
|
167
|
+
name: database_cleaner-active_record
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
type: :development
|
174
|
+
prerelease: false
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
40
180
|
description: Rails engine providing ActiveRecord integration, background jobs, and
|
41
181
|
UI components for the Ragdoll RAG (Retrieval-Augmented Generation) system
|
42
182
|
email:
|
@@ -49,9 +189,9 @@ files:
|
|
49
189
|
- Rakefile
|
50
190
|
- config/initializers/ragdoll.rb
|
51
191
|
- config/routes.rb
|
52
|
-
- lib/generators/ragdoll/init/init_generator.rb
|
53
192
|
- lib/generators/ragdoll/init/templates/INSTALL
|
54
193
|
- lib/generators/ragdoll/init/templates/ragdoll_config.rb
|
194
|
+
- lib/generators/ragdoll/init_generator.rb
|
55
195
|
- lib/ragdoll-rails.rb
|
56
196
|
- lib/ragdoll/rails.rb
|
57
197
|
- lib/ragdoll/rails/configuration.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails/generators'
|
4
|
-
|
5
|
-
module Ragdoll
|
6
|
-
module Generators
|
7
|
-
class InitGenerator < Rails::Generators::Base
|
8
|
-
desc "Create Ragdoll configuration initializer"
|
9
|
-
source_root File.expand_path("templates", __dir__)
|
10
|
-
|
11
|
-
def create_initializer_file
|
12
|
-
template "ragdoll_config.rb", "config/initializers/ragdoll_config.rb"
|
13
|
-
end
|
14
|
-
|
15
|
-
def show_readme
|
16
|
-
readme "INSTALL" if behavior == :invoke
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def application_name
|
22
|
-
Rails.application.class.name.split("::").first.underscore
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|