htm 0.0.17 → 0.0.18
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/.architecture/decisions/adrs/001-use-postgresql-timescaledb-storage.md +1 -1
- data/.architecture/decisions/adrs/011-database-side-embedding-generation-with-pgai.md +4 -4
- data/.architecture/decisions/adrs/012-llm-driven-ontology-topic-extraction.md +1 -1
- data/.envrc +12 -25
- data/.irbrc +7 -7
- data/.tbls.yml +2 -2
- data/CHANGELOG.md +71 -0
- data/README.md +1 -1
- data/Rakefile +8 -3
- data/SETUP.md +12 -12
- data/bin/htm_mcp +0 -4
- data/db/seed_data/README.md +2 -2
- data/db/seeds.rb +2 -2
- data/docs/api/database.md +37 -37
- data/docs/api/htm.md +1 -1
- data/docs/api/yard/HTM/ActiveRecordConfig.md +2 -2
- data/docs/api/yard/HTM/Configuration.md +26 -15
- data/docs/api/yard/HTM/Database.md +7 -8
- data/docs/api/yard/HTM/JobAdapter.md +1 -1
- data/docs/api/yard/HTM/Railtie.md +2 -2
- data/docs/architecture/adrs/001-postgresql-timescaledb.md +1 -1
- data/docs/architecture/adrs/011-pgai-integration.md +4 -4
- data/docs/database_rake_tasks.md +5 -5
- data/docs/development/rake-tasks.md +11 -11
- data/docs/development/setup.md +21 -21
- data/docs/development/testing.md +1 -1
- data/docs/getting-started/installation.md +20 -20
- data/docs/getting-started/quick-start.md +12 -12
- data/docs/guides/getting-started.md +2 -2
- data/docs/guides/long-term-memory.md +1 -1
- data/docs/guides/mcp-server.md +17 -17
- data/docs/guides/robot-groups.md +8 -8
- data/docs/index.md +4 -4
- data/docs/multi_framework_support.md +8 -8
- data/docs/setup_local_database.md +19 -19
- data/docs/using_rake_tasks_in_your_app.md +14 -14
- data/examples/README.md +50 -6
- data/examples/basic_usage.rb +31 -21
- data/examples/cli_app/README.md +8 -8
- data/examples/cli_app/htm_cli.rb +5 -5
- data/examples/config_file_example/README.md +256 -0
- data/examples/config_file_example/config/htm.local.yml +34 -0
- data/examples/config_file_example/custom_config.yml +22 -0
- data/examples/config_file_example/show_config.rb +125 -0
- data/examples/custom_llm_configuration.rb +7 -7
- data/examples/example_app/Rakefile +2 -2
- data/examples/example_app/app.rb +8 -8
- data/examples/file_loader_usage.rb +9 -9
- data/examples/mcp_client.rb +5 -5
- data/examples/rails_app/Gemfile.lock +48 -56
- data/examples/rails_app/README.md +1 -1
- data/examples/robot_groups/multi_process.rb +5 -5
- data/examples/robot_groups/robot_worker.rb +5 -5
- data/examples/robot_groups/same_process.rb +9 -9
- data/examples/sinatra_app/app.rb +1 -1
- data/examples/timeframe_demo.rb +1 -1
- data/lib/htm/active_record_config.rb +12 -25
- data/lib/htm/circuit_breaker.rb +0 -2
- data/lib/htm/config/defaults.yml +246 -0
- data/lib/htm/config.rb +888 -0
- data/lib/htm/database.rb +23 -27
- data/lib/htm/embedding_service.rb +0 -4
- data/lib/htm/integrations/sinatra.rb +3 -7
- data/lib/htm/job_adapter.rb +1 -15
- data/lib/htm/jobs/generate_embedding_job.rb +1 -7
- data/lib/htm/jobs/generate_propositions_job.rb +2 -12
- data/lib/htm/jobs/generate_tags_job.rb +1 -8
- data/lib/htm/loaders/defaults_loader.rb +143 -0
- data/lib/htm/loaders/xdg_config_loader.rb +116 -0
- data/lib/htm/mcp/cli.rb +200 -58
- data/lib/htm/mcp/server.rb +3 -3
- data/lib/htm/proposition_service.rb +2 -12
- data/lib/htm/railtie.rb +3 -4
- data/lib/htm/tag_service.rb +1 -8
- data/lib/htm/version.rb +1 -1
- data/lib/htm.rb +124 -5
- metadata +24 -4
- data/config/database.yml +0 -77
- data/lib/htm/configuration.rb +0 -799
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: ../..
|
|
3
3
|
specs:
|
|
4
|
-
htm (0.0.
|
|
4
|
+
htm (0.0.18)
|
|
5
5
|
activerecord
|
|
6
|
+
anyway_config (>= 2.6)
|
|
6
7
|
baran
|
|
7
8
|
chronic
|
|
8
9
|
fast-mcp
|
|
@@ -91,18 +92,20 @@ GEM
|
|
|
91
92
|
tzinfo (~> 2.0, >= 2.0.5)
|
|
92
93
|
addressable (2.8.8)
|
|
93
94
|
public_suffix (>= 2.0.2, < 8.0)
|
|
95
|
+
anyway_config (2.7.2)
|
|
96
|
+
ruby-next-core (~> 1.0)
|
|
94
97
|
baran (0.2.1)
|
|
95
98
|
base64 (0.3.0)
|
|
96
99
|
benchmark (0.5.0)
|
|
97
100
|
bigdecimal (3.3.1)
|
|
98
101
|
bindex (0.8.1)
|
|
99
102
|
builder (3.3.0)
|
|
100
|
-
cgi (0.5.
|
|
103
|
+
cgi (0.5.1)
|
|
101
104
|
chronic (0.10.2)
|
|
102
|
-
concurrent-ruby (1.3.
|
|
105
|
+
concurrent-ruby (1.3.6)
|
|
103
106
|
connection_pool (3.0.2)
|
|
104
107
|
crass (1.0.6)
|
|
105
|
-
date (3.5.
|
|
108
|
+
date (3.5.1)
|
|
106
109
|
debug_me (1.1.3)
|
|
107
110
|
drb (2.2.3)
|
|
108
111
|
dry-configurable (1.3.0)
|
|
@@ -134,7 +137,7 @@ GEM
|
|
|
134
137
|
dry-inflector (~> 1.0)
|
|
135
138
|
dry-logic (~> 1.4)
|
|
136
139
|
zeitwerk (~> 2.6)
|
|
137
|
-
erb (6.0.
|
|
140
|
+
erb (6.0.1)
|
|
138
141
|
erubi (1.13.1)
|
|
139
142
|
event_stream_parser (1.0.0)
|
|
140
143
|
faraday (2.14.0)
|
|
@@ -158,26 +161,14 @@ GEM
|
|
|
158
161
|
activesupport (>= 6.1)
|
|
159
162
|
i18n (1.14.7)
|
|
160
163
|
concurrent-ruby (~> 1.0)
|
|
161
|
-
io-console (0.8.
|
|
162
|
-
irb (1.
|
|
164
|
+
io-console (0.8.2)
|
|
165
|
+
irb (1.16.0)
|
|
163
166
|
pp (>= 0.6.0)
|
|
164
167
|
rdoc (>= 4.0.0)
|
|
165
168
|
reline (>= 0.4.2)
|
|
166
|
-
json (2.
|
|
167
|
-
kaminari (1.2.2)
|
|
168
|
-
activesupport (>= 4.1.0)
|
|
169
|
-
kaminari-actionview (= 1.2.2)
|
|
170
|
-
kaminari-activerecord (= 1.2.2)
|
|
171
|
-
kaminari-core (= 1.2.2)
|
|
172
|
-
kaminari-actionview (1.2.2)
|
|
173
|
-
actionview
|
|
174
|
-
kaminari-core (= 1.2.2)
|
|
175
|
-
kaminari-activerecord (1.2.2)
|
|
176
|
-
activerecord
|
|
177
|
-
kaminari-core (= 1.2.2)
|
|
178
|
-
kaminari-core (1.2.2)
|
|
169
|
+
json (2.18.0)
|
|
179
170
|
logger (1.7.0)
|
|
180
|
-
loofah (2.
|
|
171
|
+
loofah (2.25.0)
|
|
181
172
|
crass (~> 1.0.2)
|
|
182
173
|
nokogiri (>= 1.12.0)
|
|
183
174
|
lru_redux (1.1.0)
|
|
@@ -194,13 +185,14 @@ GEM
|
|
|
194
185
|
mime-types-data (3.2025.0924)
|
|
195
186
|
mini_mime (1.1.5)
|
|
196
187
|
mini_portile2 (2.8.9)
|
|
197
|
-
minitest (
|
|
188
|
+
minitest (6.0.0)
|
|
189
|
+
prism (~> 1.5)
|
|
198
190
|
multipart-post (2.4.1)
|
|
199
191
|
neighbor (0.6.0)
|
|
200
192
|
activerecord (>= 7.1)
|
|
201
|
-
net-http (0.
|
|
193
|
+
net-http (0.9.1)
|
|
202
194
|
uri (>= 0.11.1)
|
|
203
|
-
net-imap (0.
|
|
195
|
+
net-imap (0.6.2)
|
|
204
196
|
date
|
|
205
197
|
net-protocol
|
|
206
198
|
net-pop (0.1.2)
|
|
@@ -217,11 +209,12 @@ GEM
|
|
|
217
209
|
pp (0.6.3)
|
|
218
210
|
prettyprint
|
|
219
211
|
prettyprint (0.2.0)
|
|
212
|
+
prism (1.7.0)
|
|
220
213
|
propshaft (1.3.1)
|
|
221
214
|
actionpack (>= 7.0.0)
|
|
222
215
|
activesupport (>= 7.0.0)
|
|
223
216
|
rack
|
|
224
|
-
psych (5.
|
|
217
|
+
psych (5.3.1)
|
|
225
218
|
date
|
|
226
219
|
stringio
|
|
227
220
|
public_suffix (7.0.0)
|
|
@@ -269,14 +262,15 @@ GEM
|
|
|
269
262
|
zeitwerk (~> 2.6)
|
|
270
263
|
rake (13.3.1)
|
|
271
264
|
rake-compiler-dock (1.10.0)
|
|
272
|
-
rb_sys (0.9.
|
|
265
|
+
rb_sys (0.9.123)
|
|
273
266
|
rake-compiler-dock (= 1.10.0)
|
|
274
|
-
rdoc (
|
|
267
|
+
rdoc (7.0.1)
|
|
275
268
|
erb
|
|
276
269
|
psych (>= 4.0.0)
|
|
277
270
|
tsort
|
|
278
271
|
reline (0.6.3)
|
|
279
272
|
io-console (~> 0.5)
|
|
273
|
+
ruby-next-core (1.1.2)
|
|
280
274
|
ruby-progressbar (1.13.0)
|
|
281
275
|
ruby_llm (1.9.1)
|
|
282
276
|
base64
|
|
@@ -290,11 +284,11 @@ GEM
|
|
|
290
284
|
zeitwerk (~> 2)
|
|
291
285
|
ruby_llm-schema (0.2.5)
|
|
292
286
|
securerandom (0.4.1)
|
|
293
|
-
stringio (3.
|
|
287
|
+
stringio (3.2.0)
|
|
294
288
|
thor (1.4.0)
|
|
295
|
-
tiktoken_ruby (0.0.
|
|
289
|
+
tiktoken_ruby (0.0.14.1)
|
|
296
290
|
rb_sys (~> 0.9)
|
|
297
|
-
timeout (0.
|
|
291
|
+
timeout (0.6.0)
|
|
298
292
|
tsort (0.2.0)
|
|
299
293
|
tzinfo (2.0.6)
|
|
300
294
|
concurrent-ruby (~> 1.0)
|
|
@@ -309,7 +303,7 @@ GEM
|
|
|
309
303
|
base64
|
|
310
304
|
websocket-extensions (>= 0.1.0)
|
|
311
305
|
websocket-extensions (0.1.5)
|
|
312
|
-
zeitwerk (2.7.
|
|
306
|
+
zeitwerk (2.7.4)
|
|
313
307
|
|
|
314
308
|
PLATFORMS
|
|
315
309
|
arm64-darwin-25
|
|
@@ -318,7 +312,6 @@ PLATFORMS
|
|
|
318
312
|
DEPENDENCIES
|
|
319
313
|
debug_me
|
|
320
314
|
htm!
|
|
321
|
-
kaminari
|
|
322
315
|
pg (~> 1.5)
|
|
323
316
|
propshaft
|
|
324
317
|
puma (~> 6.0)
|
|
@@ -338,18 +331,19 @@ CHECKSUMS
|
|
|
338
331
|
activestorage (7.2.3) sha256=4c1422bbfaa60c89e7b43cc38ade7bd3b8dc81024c48a21c1ac56814cf34ca2f
|
|
339
332
|
activesupport (7.2.3) sha256=5675c9770dac93e371412684249f9dc3c8cec104efd0624362a520ae685c7b10
|
|
340
333
|
addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057
|
|
334
|
+
anyway_config (2.7.2) sha256=30f6b087c0b41afdd43fe46c81d65a16f052a8489dab453abaeb4ea67aa74bad
|
|
341
335
|
baran (0.2.1) sha256=6c19e835c6f73c70e7073fb3d3cb48d2c85606e0b1484914b4c01a3cecdd7892
|
|
342
336
|
base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
|
|
343
337
|
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
|
|
344
338
|
bigdecimal (3.3.1) sha256=eaa01e228be54c4f9f53bf3cc34fe3d5e845c31963e7fcc5bedb05a4e7d52218
|
|
345
339
|
bindex (0.8.1) sha256=7b1ecc9dc539ed8bccfc8cb4d2732046227b09d6f37582ff12e50a5047ceb17e
|
|
346
340
|
builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f
|
|
347
|
-
cgi (0.5.
|
|
341
|
+
cgi (0.5.1) sha256=e93fcafc69b8a934fe1e6146121fa35430efa8b4a4047c4893764067036f18e9
|
|
348
342
|
chronic (0.10.2) sha256=766f2fcce6ac3cc152249ed0f2b827770d3e517e2e87c5fba7ed74f4889d2dc3
|
|
349
|
-
concurrent-ruby (1.3.
|
|
343
|
+
concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab
|
|
350
344
|
connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a
|
|
351
345
|
crass (1.0.6) sha256=dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d
|
|
352
|
-
date (3.5.
|
|
346
|
+
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
|
|
353
347
|
debug_me (1.1.3) sha256=ae8cf61993350d9b3cbe337a7f9a0f595be5b4976c10891a4e1eacc63d09f717
|
|
354
348
|
drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
|
|
355
349
|
dry-configurable (1.3.0) sha256=882d862858567fc1210d2549d4c090f34370fc1bb7c5c1933de3fe792e18afa8
|
|
@@ -359,7 +353,7 @@ CHECKSUMS
|
|
|
359
353
|
dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2
|
|
360
354
|
dry-schema (1.14.1) sha256=2fcd7539a7099cacae6a22f6a3a2c1846fe5afeb1c841cde432c89c6cb9b9ff1
|
|
361
355
|
dry-types (1.8.3) sha256=b5d97a45e0ed273131c0c3d5bc9f5633c2d1242e092ee47401ce7d5eab65c1bc
|
|
362
|
-
erb (6.0.
|
|
356
|
+
erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
|
|
363
357
|
erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
|
|
364
358
|
event_stream_parser (1.0.0) sha256=a2683bab70126286f8184dc88f7968ffc4028f813161fb073ec90d171f7de3c8
|
|
365
359
|
faraday (2.14.0) sha256=8699cfe5d97e55268f2596f9a9d5a43736808a943714e3d9a53e6110593941cd
|
|
@@ -368,17 +362,13 @@ CHECKSUMS
|
|
|
368
362
|
faraday-retry (2.3.2) sha256=2402d2029032ebd238a2046221e67f6ef0da78c5a8ce8cd4f8b9c62e4d6451d1
|
|
369
363
|
fast-mcp (1.6.0) sha256=d68abb45d2daab9e7ae2934417460e4bf9ac87493c585dc5bb626f1afb7d12c4
|
|
370
364
|
globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11
|
|
371
|
-
htm (0.0.
|
|
365
|
+
htm (0.0.18)
|
|
372
366
|
i18n (1.14.7) sha256=ceba573f8138ff2c0915427f1fc5bdf4aa3ab8ae88c8ce255eb3ecf0a11a5d0f
|
|
373
|
-
io-console (0.8.
|
|
374
|
-
irb (1.
|
|
375
|
-
json (2.
|
|
376
|
-
kaminari (1.2.2) sha256=c4076ff9adccc6109408333f87b5c4abbda5e39dc464bd4c66d06d9f73442a3e
|
|
377
|
-
kaminari-actionview (1.2.2) sha256=1330f6fc8b59a4a4ef6a549ff8a224797289ebf7a3a503e8c1652535287cc909
|
|
378
|
-
kaminari-activerecord (1.2.2) sha256=0dd3a67bab356a356f36b3b7236bcb81cef313095365befe8e98057dd2472430
|
|
379
|
-
kaminari-core (1.2.2) sha256=3bd26fec7370645af40ca73b9426a448d09b8a8ba7afa9ba3c3e0d39cdbb83ff
|
|
367
|
+
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
|
|
368
|
+
irb (1.16.0) sha256=2abe56c9ac947cdcb2f150572904ba798c1e93c890c256f8429981a7675b0806
|
|
369
|
+
json (2.18.0) sha256=b10506aee4183f5cf49e0efc48073d7b75843ce3782c68dbeb763351c08fd505
|
|
380
370
|
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
|
|
381
|
-
loofah (2.
|
|
371
|
+
loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6
|
|
382
372
|
lru_redux (1.1.0) sha256=ee71d0ccab164c51de146c27b480a68b3631d5b4297b8ffe8eda1c72de87affb
|
|
383
373
|
mail (2.9.0) sha256=6fa6673ecd71c60c2d996260f9ee3dd387d4673b8169b502134659ece6d34941
|
|
384
374
|
marcel (1.1.0) sha256=fdcfcfa33cc52e93c4308d40e4090a5d4ea279e160a7f6af988260fa970e0bee
|
|
@@ -386,11 +376,11 @@ CHECKSUMS
|
|
|
386
376
|
mime-types-data (3.2025.0924) sha256=f276bca15e59f35767cbcf2bc10e023e9200b30bd6a572c1daf7f4cc24994728
|
|
387
377
|
mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef
|
|
388
378
|
mini_portile2 (2.8.9) sha256=0cd7c7f824e010c072e33f68bc02d85a00aeb6fce05bb4819c03dfd3c140c289
|
|
389
|
-
minitest (
|
|
379
|
+
minitest (6.0.0) sha256=4ca597fc1d735ea18d2b4b98c5fb1d5a6da4a6f35ddf32bd5fa3eded33a453be
|
|
390
380
|
multipart-post (2.4.1) sha256=9872d03a8e552020ca096adadbf5e3cb1cd1cdd6acd3c161136b8a5737cdb4a8
|
|
391
381
|
neighbor (0.6.0) sha256=e2bd0bb98e1d6403892d1d0cf3683ae9429be51d6a6a14859135dc71cf9c27d3
|
|
392
|
-
net-http (0.
|
|
393
|
-
net-imap (0.
|
|
382
|
+
net-http (0.9.1) sha256=25ba0b67c63e89df626ed8fac771d0ad24ad151a858af2cc8e6a716ca4336996
|
|
383
|
+
net-imap (0.6.2) sha256=08caacad486853c61676cca0c0c47df93db02abc4a8239a8b67eb0981428acc6
|
|
394
384
|
net-pop (0.1.2) sha256=848b4e982013c15b2f0382792268763b748cce91c9e91e36b0f27ed26420dff3
|
|
395
385
|
net-protocol (0.2.2) sha256=aa73e0cba6a125369de9837b8d8ef82a61849360eba0521900e2c3713aa162a8
|
|
396
386
|
net-smtp (0.5.1) sha256=ed96a0af63c524fceb4b29b0d352195c30d82dd916a42f03c62a3a70e5b70736
|
|
@@ -399,8 +389,9 @@ CHECKSUMS
|
|
|
399
389
|
pg (1.6.2) sha256=58614afd405cc9c2c9e15bffe8432e0d6cfc58b722344ad4a47c73a85189c875
|
|
400
390
|
pp (0.6.3) sha256=2951d514450b93ccfeb1df7d021cae0da16e0a7f95ee1e2273719669d0ab9df6
|
|
401
391
|
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
|
|
392
|
+
prism (1.7.0) sha256=10062f734bf7985c8424c44fac382ac04a58124ea3d220ec3ba9fe4f2da65103
|
|
402
393
|
propshaft (1.3.1) sha256=9acc664ef67e819ffa3d95bd7ad4c3623ea799110c5f4dee67fa7e583e74c392
|
|
403
|
-
psych (5.
|
|
394
|
+
psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974
|
|
404
395
|
public_suffix (7.0.0) sha256=f7090b5beb0e56f9f10d79eed4d5fbe551b3b425da65877e075dad47a6a1b095
|
|
405
396
|
puma (6.6.1) sha256=b9b56e4a4ea75d1bfa6d9e1972ee2c9f43d0883f011826d914e8e37b3694ea1e
|
|
406
397
|
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
|
|
@@ -414,17 +405,18 @@ CHECKSUMS
|
|
|
414
405
|
railties (7.2.3) sha256=6eb010a6bfe6f223e783f739ddfcbdb5b88b1f3a87f7739f0a0685e466250422
|
|
415
406
|
rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
|
|
416
407
|
rake-compiler-dock (1.10.0) sha256=dd62ee19df2a185a3315697e560cfa8cc9129901332152851e023fab0e94bf11
|
|
417
|
-
rb_sys (0.9.
|
|
418
|
-
rdoc (
|
|
408
|
+
rb_sys (0.9.123) sha256=c22ae84d1bca3eec0f13a45ae4ca9ba6eace93d5be270a40a9c0a9a5b92a34e5
|
|
409
|
+
rdoc (7.0.1) sha256=7ae1540c54eb8174f6549440dd2299276eac51deaa7d80ea7db9ea5b96559f53
|
|
419
410
|
reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
|
|
411
|
+
ruby-next-core (1.1.2) sha256=1b095fe2e45929f2581b3ecdb8d92b601ce4d72c12a466057c10e23b6f0c4512
|
|
420
412
|
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
|
|
421
413
|
ruby_llm (1.9.1) sha256=f7d3c72489c70041ee73d7bfe4250a989f801fbba1fad2200904091e433ba511
|
|
422
414
|
ruby_llm-schema (0.2.5) sha256=b08cd42e8de7100325e2e868672a56f1915eb23692bb808f51f214e41392104f
|
|
423
415
|
securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
|
|
424
|
-
stringio (3.
|
|
416
|
+
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
|
|
425
417
|
thor (1.4.0) sha256=8763e822ccb0f1d7bee88cde131b19a65606657b847cc7b7b4b82e772bcd8a3d
|
|
426
|
-
tiktoken_ruby (0.0.
|
|
427
|
-
timeout (0.
|
|
418
|
+
tiktoken_ruby (0.0.14.1) sha256=cff8ecf6e8a7b9e854027812b01e55c35f5f7719182c3589655008d0eeb51db1
|
|
419
|
+
timeout (0.6.0) sha256=6d722ad619f96ee383a0c557ec6eb8c4ecb08af3af62098a0be5057bf00de1af
|
|
428
420
|
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
|
|
429
421
|
tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b
|
|
430
422
|
uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
|
|
@@ -432,7 +424,7 @@ CHECKSUMS
|
|
|
432
424
|
web-console (4.2.1) sha256=e7bcf37a10ea2b4ec4281649d1cee461b32232d0a447e82c786e6841fd22fe20
|
|
433
425
|
websocket-driver (0.8.0) sha256=ed0dba4b943c22f17f9a734817e808bc84cdce6a7e22045f5315aa57676d4962
|
|
434
426
|
websocket-extensions (0.1.5) sha256=1c6ba63092cda343eb53fc657110c71c754c56484aad42578495227d717a8241
|
|
435
|
-
zeitwerk (2.7.
|
|
427
|
+
zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b
|
|
436
428
|
|
|
437
429
|
BUNDLED WITH
|
|
438
|
-
4.0.
|
|
430
|
+
4.0.2
|
|
@@ -25,7 +25,7 @@ A full-stack Rails application demonstrating HTM integration with a compelling U
|
|
|
25
25
|
bundle install
|
|
26
26
|
|
|
27
27
|
# Ensure HTM database is set up
|
|
28
|
-
export
|
|
28
|
+
export HTM_DATABASE__URL="postgresql://localhost/htm_development"
|
|
29
29
|
|
|
30
30
|
# Install Tailwind CSS
|
|
31
31
|
rails tailwindcss:install
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# 4. Dynamic scaling by spawning new processes
|
|
14
14
|
#
|
|
15
15
|
# Prerequisites:
|
|
16
|
-
# 1. Set
|
|
16
|
+
# 1. Set HTM_DATABASE__URL environment variable
|
|
17
17
|
# 2. Initialize database schema: rake db_setup
|
|
18
18
|
|
|
19
19
|
require_relative '../../lib/htm'
|
|
@@ -36,7 +36,7 @@ class RobotProcess
|
|
|
36
36
|
|
|
37
37
|
# Spawn the worker process
|
|
38
38
|
@stdin, @stdout, @stderr, @wait_thread = Open3.popen3(
|
|
39
|
-
{ '
|
|
39
|
+
{ 'HTM_DATABASE__URL' => ENV['HTM_DATABASE__URL'] },
|
|
40
40
|
'ruby', WORKER_SCRIPT, name, group_name
|
|
41
41
|
)
|
|
42
42
|
@pid = @wait_thread.pid
|
|
@@ -119,9 +119,9 @@ def run_demo
|
|
|
119
119
|
|
|
120
120
|
BANNER
|
|
121
121
|
|
|
122
|
-
unless ENV['
|
|
123
|
-
puts 'ERROR:
|
|
124
|
-
puts ' export
|
|
122
|
+
unless ENV['HTM_DATABASE__URL']
|
|
123
|
+
puts 'ERROR: HTM_DATABASE__URL not set.'
|
|
124
|
+
puts ' export HTM_DATABASE__URL="postgresql://user@localhost:5432/htm_development"'
|
|
125
125
|
exit 1
|
|
126
126
|
end
|
|
127
127
|
|
|
@@ -37,11 +37,11 @@ end
|
|
|
37
37
|
|
|
38
38
|
# Configure HTM with logger to stderr (keep stdout clean for JSON)
|
|
39
39
|
HTM.configure do |config|
|
|
40
|
-
config.
|
|
41
|
-
config.
|
|
42
|
-
config.
|
|
43
|
-
config.
|
|
44
|
-
config.
|
|
40
|
+
config.embedding.provider = :ollama
|
|
41
|
+
config.embedding.model = 'nomic-embed-text:latest'
|
|
42
|
+
config.embedding.dimensions = 768
|
|
43
|
+
config.tag.provider = :ollama
|
|
44
|
+
config.tag.model = 'gemma3:latest'
|
|
45
45
|
config.logger = Logger.new($stderr, level: Logger::WARN)
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
# synchronization of in-memory working memory across robots.
|
|
20
20
|
#
|
|
21
21
|
# Prerequisites:
|
|
22
|
-
# 1. Set
|
|
22
|
+
# 1. Set HTM_DATABASE__URL environment variable
|
|
23
23
|
# 2. Initialize database schema: rake db_setup
|
|
24
24
|
# 3. Install dependencies: bundle install
|
|
25
25
|
|
|
@@ -33,9 +33,9 @@ require 'json'
|
|
|
33
33
|
puts 'HTM Robot Group Demo - Shared Working Memory & Failover'
|
|
34
34
|
puts '=' * 60
|
|
35
35
|
|
|
36
|
-
unless ENV['
|
|
37
|
-
puts 'ERROR:
|
|
38
|
-
puts ' export
|
|
36
|
+
unless ENV['HTM_DATABASE__URL']
|
|
37
|
+
puts 'ERROR: HTM_DATABASE__URL not set. Please set it:'
|
|
38
|
+
puts ' export HTM_DATABASE__URL="postgresql://postgres@localhost:5432/htm_development"'
|
|
39
39
|
exit 1
|
|
40
40
|
end
|
|
41
41
|
|
|
@@ -43,11 +43,11 @@ begin
|
|
|
43
43
|
# Configure HTM
|
|
44
44
|
puts "\n1. Configuring HTM..."
|
|
45
45
|
HTM.configure do |config|
|
|
46
|
-
config.
|
|
47
|
-
config.
|
|
48
|
-
config.
|
|
49
|
-
config.
|
|
50
|
-
config.
|
|
46
|
+
config.embedding.provider = :ollama
|
|
47
|
+
config.embedding.model = 'nomic-embed-text:latest'
|
|
48
|
+
config.embedding.dimensions = 768
|
|
49
|
+
config.tag.provider = :ollama
|
|
50
|
+
config.tag.model = 'gemma3:latest'
|
|
51
51
|
end
|
|
52
52
|
puts '✓ HTM configured'
|
|
53
53
|
|
data/examples/sinatra_app/app.rb
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
# bundle exec ruby app.rb
|
|
15
15
|
#
|
|
16
16
|
# Environment:
|
|
17
|
-
#
|
|
17
|
+
# HTM_DATABASE__URL - PostgreSQL connection URL (required)
|
|
18
18
|
# REDIS_URL - Redis connection URL (for Sidekiq, default: redis://localhost:6379/0)
|
|
19
19
|
# OLLAMA_URL - Ollama server URL (default: http://localhost:11434)
|
|
20
20
|
#
|
data/examples/timeframe_demo.rb
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# Timeframe Demo - Demonstrates the various ways to use timeframes with recall
|
|
5
5
|
#
|
|
6
6
|
# Run with:
|
|
7
|
-
#
|
|
7
|
+
# HTM_DATABASE__URL="postgresql://localhost/htm_development" ruby examples/timeframe_demo.rb
|
|
8
8
|
|
|
9
9
|
require_relative "../lib/htm"
|
|
10
10
|
|
|
@@ -3,14 +3,17 @@
|
|
|
3
3
|
require 'active_record'
|
|
4
4
|
require 'pg'
|
|
5
5
|
require 'neighbor'
|
|
6
|
-
require 'erb'
|
|
7
|
-
require 'yaml'
|
|
8
6
|
|
|
9
7
|
class HTM
|
|
10
8
|
# ActiveRecord database configuration and model loading
|
|
9
|
+
#
|
|
10
|
+
# Uses HTM::Config for database settings. Configuration can come from:
|
|
11
|
+
# - Environment variables (HTM_DATABASE__URL, HTM_DATABASE__HOST, etc.)
|
|
12
|
+
# - Programmatic configuration via HTM.configure
|
|
13
|
+
#
|
|
11
14
|
class ActiveRecordConfig
|
|
12
15
|
class << self
|
|
13
|
-
# Establish database connection from
|
|
16
|
+
# Establish database connection from HTM::Config
|
|
14
17
|
def establish_connection!
|
|
15
18
|
config = load_database_config
|
|
16
19
|
|
|
@@ -25,27 +28,12 @@ class HTM
|
|
|
25
28
|
true
|
|
26
29
|
end
|
|
27
30
|
|
|
28
|
-
# Load
|
|
31
|
+
# Load database configuration from HTM::Config
|
|
32
|
+
#
|
|
33
|
+
# @return [Hash] ActiveRecord-compatible configuration hash
|
|
34
|
+
#
|
|
29
35
|
def load_database_config
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
unless File.exist?(config_path)
|
|
33
|
-
raise "Database configuration file not found at #{config_path}"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Read and parse ERB
|
|
37
|
-
erb_content = ERB.new(File.read(config_path)).result
|
|
38
|
-
db_config = YAML.safe_load(erb_content, aliases: true)
|
|
39
|
-
|
|
40
|
-
# Get configuration for current environment
|
|
41
|
-
config = db_config[HTM.env]
|
|
42
|
-
|
|
43
|
-
unless config
|
|
44
|
-
raise "No database configuration found for environment: #{HTM.env}"
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# Convert string keys to symbols for ActiveRecord
|
|
48
|
-
config.transform_keys(&:to_sym)
|
|
36
|
+
HTM.config.database_config
|
|
49
37
|
end
|
|
50
38
|
|
|
51
39
|
# Check if connection is established and active
|
|
@@ -56,8 +44,7 @@ class HTM
|
|
|
56
44
|
ActiveRecord::Base.connected? && ActiveRecord::Base.connection.active?
|
|
57
45
|
rescue ActiveRecord::ConnectionNotDefined, ActiveRecord::ConnectionNotEstablished
|
|
58
46
|
false
|
|
59
|
-
rescue StandardError
|
|
60
|
-
HTM.logger.debug "Connection check failed: #{e.class} - #{e.message}"
|
|
47
|
+
rescue StandardError
|
|
61
48
|
false
|
|
62
49
|
end
|
|
63
50
|
|
data/lib/htm/circuit_breaker.rb
CHANGED
|
@@ -73,8 +73,6 @@ class HTM
|
|
|
73
73
|
HTM.logger.warn "CircuitBreaker[#{@name}]: Circuit is OPEN, failing fast"
|
|
74
74
|
raise CircuitBreakerOpenError, "Circuit breaker '#{@name}' is open. Service unavailable."
|
|
75
75
|
end
|
|
76
|
-
when :half_open
|
|
77
|
-
HTM.logger.debug "CircuitBreaker[#{@name}]: Circuit is HALF-OPEN, testing service"
|
|
78
76
|
end
|
|
79
77
|
end
|
|
80
78
|
|