htm 0.0.10 → 0.0.14

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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/.dictate.toml +46 -0
  3. data/.envrc +2 -0
  4. data/CHANGELOG.md +86 -3
  5. data/README.md +86 -7
  6. data/Rakefile +14 -2
  7. data/bin/htm_mcp.rb +621 -0
  8. data/config/database.yml +20 -13
  9. data/db/migrate/00010_add_soft_delete_to_associations.rb +29 -0
  10. data/db/migrate/00011_add_performance_indexes.rb +21 -0
  11. data/db/migrate/00012_add_tags_trigram_index.rb +18 -0
  12. data/db/migrate/00013_enable_lz4_compression.rb +43 -0
  13. data/db/schema.sql +49 -92
  14. data/docs/api/index.md +1 -1
  15. data/docs/api/yard/HTM.md +2 -4
  16. data/docs/architecture/index.md +1 -1
  17. data/docs/development/index.md +1 -1
  18. data/docs/getting-started/index.md +1 -1
  19. data/docs/guides/index.md +1 -1
  20. data/docs/images/telemetry-architecture.svg +153 -0
  21. data/docs/telemetry.md +391 -0
  22. data/examples/README.md +171 -1
  23. data/examples/cli_app/README.md +1 -1
  24. data/examples/cli_app/htm_cli.rb +1 -1
  25. data/examples/mcp_client.rb +529 -0
  26. data/examples/sinatra_app/app.rb +1 -1
  27. data/examples/telemetry/README.md +147 -0
  28. data/examples/telemetry/SETUP_README.md +169 -0
  29. data/examples/telemetry/demo.rb +498 -0
  30. data/examples/telemetry/grafana/dashboards/htm-metrics.json +457 -0
  31. data/lib/htm/configuration.rb +261 -70
  32. data/lib/htm/database.rb +46 -22
  33. data/lib/htm/embedding_service.rb +24 -14
  34. data/lib/htm/errors.rb +15 -1
  35. data/lib/htm/jobs/generate_embedding_job.rb +19 -0
  36. data/lib/htm/jobs/generate_propositions_job.rb +103 -0
  37. data/lib/htm/jobs/generate_tags_job.rb +24 -0
  38. data/lib/htm/loaders/markdown_chunker.rb +79 -0
  39. data/lib/htm/loaders/markdown_loader.rb +41 -15
  40. data/lib/htm/long_term_memory/fulltext_search.rb +138 -0
  41. data/lib/htm/long_term_memory/hybrid_search.rb +324 -0
  42. data/lib/htm/long_term_memory/node_operations.rb +209 -0
  43. data/lib/htm/long_term_memory/relevance_scorer.rb +355 -0
  44. data/lib/htm/long_term_memory/robot_operations.rb +34 -0
  45. data/lib/htm/long_term_memory/tag_operations.rb +428 -0
  46. data/lib/htm/long_term_memory/vector_search.rb +109 -0
  47. data/lib/htm/long_term_memory.rb +51 -1153
  48. data/lib/htm/models/node.rb +35 -2
  49. data/lib/htm/models/node_tag.rb +31 -0
  50. data/lib/htm/models/robot_node.rb +31 -0
  51. data/lib/htm/models/tag.rb +44 -0
  52. data/lib/htm/proposition_service.rb +169 -0
  53. data/lib/htm/query_cache.rb +214 -0
  54. data/lib/htm/sql_builder.rb +178 -0
  55. data/lib/htm/tag_service.rb +16 -6
  56. data/lib/htm/tasks.rb +8 -2
  57. data/lib/htm/telemetry.rb +224 -0
  58. data/lib/htm/version.rb +1 -1
  59. data/lib/htm.rb +64 -3
  60. data/lib/tasks/doc.rake +1 -1
  61. data/lib/tasks/htm.rake +259 -13
  62. data/mkdocs.yml +96 -96
  63. metadata +75 -18
  64. data/.aigcm_msg +0 -1
  65. data/.claude/settings.local.json +0 -92
  66. data/CLAUDE.md +0 -603
  67. data/examples/cli_app/temp.log +0 -93
  68. data/lib/htm/loaders/paragraph_chunker.rb +0 -112
  69. data/notes/ARCHITECTURE_REVIEW.md +0 -1167
  70. data/notes/IMPLEMENTATION_SUMMARY.md +0 -606
  71. data/notes/MULTI_FRAMEWORK_IMPLEMENTATION.md +0 -451
  72. data/notes/next_steps.md +0 -100
  73. data/notes/plan.md +0 -627
  74. data/notes/tag_ontology_enhancement_ideas.md +0 -222
  75. data/notes/timescaledb_removal_summary.md +0 -200
data/lib/tasks/htm.rake CHANGED
@@ -68,21 +68,28 @@ namespace :htm do
68
68
  end
69
69
  end
70
70
 
71
- desc "Test database connection"
72
- task :test do
71
+ desc "Verify database connection (respects RAILS_ENV)"
72
+ task :verify do
73
73
  require 'htm'
74
- config = HTM::Database.default_config
75
- raise "Database not configured. Set HTM_DBURL environment variable." unless config
76
74
 
77
- puts "Testing HTM database connection..."
75
+ env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
76
+ config = HTM::ActiveRecordConfig.load_database_config
77
+
78
+ puts "Verifying HTM database connection (#{env})..."
78
79
  puts " Host: #{config[:host]}"
79
80
  puts " Port: #{config[:port]}"
80
- puts " Database: #{config[:dbname]}"
81
- puts " User: #{config[:user]}"
81
+ puts " Database: #{config[:database]}"
82
+ puts " User: #{config[:username]}"
82
83
 
83
84
  begin
84
85
  require 'pg'
85
- conn = PG.connect(config)
86
+ conn = PG.connect(
87
+ host: config[:host],
88
+ port: config[:port],
89
+ dbname: config[:database],
90
+ user: config[:username],
91
+ password: config[:password]
92
+ )
86
93
 
87
94
  # Check pgvector
88
95
  pgvector = conn.exec("SELECT extversion FROM pg_extension WHERE extname='vector'").first
@@ -100,16 +107,18 @@ namespace :htm do
100
107
  end
101
108
  end
102
109
 
103
- desc "Open PostgreSQL console"
110
+ desc "Open PostgreSQL console (respects RAILS_ENV)"
104
111
  task :console do
105
112
  require 'htm'
106
- config = HTM::Database.default_config
107
- raise "Database not configured. Set HTM_DBURL environment variable." unless config
108
113
 
114
+ env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
115
+ config = HTM::ActiveRecordConfig.load_database_config
116
+
117
+ puts "Connecting to #{config[:database]} (#{env})..."
109
118
  exec "psql", "-h", config[:host],
110
119
  "-p", config[:port].to_s,
111
- "-U", config[:user],
112
- "-d", config[:dbname]
120
+ "-U", config[:username],
121
+ "-d", config[:database]
113
122
  end
114
123
 
115
124
  desc "Seed database with sample data"
@@ -277,6 +286,120 @@ namespace :htm do
277
286
  puts " Errors: #{errors}"
278
287
  puts " Nodes with embeddings: #{final_with_embeddings}"
279
288
  end
289
+
290
+ desc "Rebuild propositions for all non-proposition nodes. Extracts atomic facts and creates new nodes."
291
+ task :propositions do
292
+ require 'htm'
293
+ require 'ruby-progressbar'
294
+
295
+ # Ensure database connection
296
+ HTM::ActiveRecordConfig.establish_connection!
297
+
298
+ # Find all non-proposition nodes (nodes that haven't been extracted from)
299
+ source_nodes = HTM::Models::Node.non_propositions
300
+ source_count = source_nodes.count
301
+
302
+ # Count existing proposition nodes
303
+ existing_propositions = HTM::Models::Node.propositions.count
304
+
305
+ puts "\nHTM Propositions Rebuild"
306
+ puts "=" * 50
307
+ puts "Current state:"
308
+ puts " Source nodes (non-propositions): #{source_count}"
309
+ puts " Existing proposition nodes: #{existing_propositions}"
310
+ puts "\nThis will extract propositions from ALL #{source_count} source nodes."
311
+ puts "Existing proposition nodes will be deleted and regenerated."
312
+ puts "This operation may take a long time depending on your LLM provider."
313
+ print "\nType 'yes' to confirm: "
314
+
315
+ confirmation = $stdin.gets&.strip
316
+ unless confirmation == 'yes'
317
+ puts "Aborted."
318
+ next
319
+ end
320
+
321
+ # Delete existing proposition nodes
322
+ if existing_propositions > 0
323
+ puts "\nDeleting #{existing_propositions} existing proposition nodes..."
324
+ deleted = HTM::Models::Node.propositions.delete_all
325
+ puts " Deleted #{deleted} proposition nodes"
326
+ end
327
+
328
+ puts "\nExtracting propositions from #{source_count} nodes..."
329
+ puts "(This may take a while depending on your LLM provider)\n"
330
+
331
+ # Get a robot ID for linking proposition nodes
332
+ # Use the first robot or create a system robot
333
+ robot = HTM::Models::Robot.first || HTM::Models::Robot.create!(name: 'proposition_rebuilder')
334
+
335
+ # Create progress bar with ETA
336
+ progressbar = ProgressBar.create(
337
+ total: source_count,
338
+ format: '%t: |%B| %c/%C (%p%%) %e',
339
+ title: 'Extracting',
340
+ output: $stdout,
341
+ smoothing: 0.5
342
+ )
343
+
344
+ # Track stats
345
+ errors = 0
346
+ nodes_processed = 0
347
+ propositions_created = 0
348
+
349
+ source_nodes.find_each do |node|
350
+ begin
351
+ # Extract propositions
352
+ propositions = HTM::PropositionService.extract(node.content)
353
+
354
+ if propositions.any?
355
+ propositions.each do |proposition_text|
356
+ token_count = HTM.count_tokens(proposition_text)
357
+
358
+ # Create proposition node
359
+ prop_node = HTM::Models::Node.create!(
360
+ content: proposition_text,
361
+ token_count: token_count,
362
+ metadata: { is_proposition: true, source_node_id: node.id }
363
+ )
364
+
365
+ # Link to robot
366
+ HTM::Models::RobotNode.find_or_create_by!(
367
+ robot_id: robot.id,
368
+ node_id: prop_node.id
369
+ )
370
+
371
+ # Generate embedding for proposition node
372
+ begin
373
+ result = HTM::EmbeddingService.generate(proposition_text)
374
+ prop_node.update!(embedding: result[:storage_embedding])
375
+ rescue StandardError => e
376
+ progressbar.log " Warning: Embedding failed for proposition: #{e.message}"
377
+ end
378
+
379
+ propositions_created += 1
380
+ end
381
+ end
382
+
383
+ nodes_processed += 1
384
+ rescue StandardError => e
385
+ errors += 1
386
+ progressbar.log " Error on node #{node.id}: #{e.message}"
387
+ end
388
+
389
+ progressbar.increment
390
+ end
391
+
392
+ progressbar.finish
393
+
394
+ # Final stats
395
+ final_proposition_count = HTM::Models::Node.propositions.count
396
+
397
+ puts "\nRebuild complete!"
398
+ puts " Source nodes processed: #{nodes_processed}"
399
+ puts " Propositions created: #{propositions_created}"
400
+ puts " Errors: #{errors}"
401
+ puts " Total proposition nodes: #{final_proposition_count}"
402
+ end
280
403
  end
281
404
 
282
405
  namespace :schema do
@@ -293,6 +416,129 @@ namespace :htm do
293
416
  end
294
417
  end
295
418
 
419
+ desc "Create database if it doesn't exist (respects RAILS_ENV)"
420
+ task :create do
421
+ require 'htm'
422
+
423
+ env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
424
+ config = HTM::ActiveRecordConfig.load_database_config
425
+ db_name = config[:database]
426
+
427
+ puts "Creating database: #{db_name} (#{env})"
428
+
429
+ admin_config = config.dup
430
+ admin_config[:database] = 'postgres'
431
+
432
+ begin
433
+ require 'pg'
434
+ admin_conn = PG.connect(
435
+ host: admin_config[:host],
436
+ port: admin_config[:port],
437
+ dbname: admin_config[:database],
438
+ user: admin_config[:username],
439
+ password: admin_config[:password]
440
+ )
441
+
442
+ result = admin_conn.exec_params(
443
+ "SELECT 1 FROM pg_database WHERE datname = $1",
444
+ [db_name]
445
+ )
446
+
447
+ if result.ntuples == 0
448
+ admin_conn.exec("CREATE DATABASE #{PG::Connection.quote_ident(db_name)}")
449
+ puts "✓ Database created: #{db_name}"
450
+
451
+ # Connect to new database and enable extensions
452
+ db_conn = PG.connect(
453
+ host: config[:host],
454
+ port: config[:port],
455
+ dbname: db_name,
456
+ user: config[:username],
457
+ password: config[:password]
458
+ )
459
+ %w[vector pg_trgm].each do |ext|
460
+ db_conn.exec("CREATE EXTENSION IF NOT EXISTS #{ext}")
461
+ end
462
+ db_conn.close
463
+ puts "✓ Extensions enabled (pgvector, pg_trgm)"
464
+ else
465
+ puts "✓ Database already exists: #{db_name}"
466
+ end
467
+
468
+ admin_conn.close
469
+ rescue PG::Error => e
470
+ puts "✗ Error: #{e.message}"
471
+ exit 1
472
+ end
473
+ end
474
+
475
+ namespace :tags do
476
+ desc "Soft delete orphaned tags and stale node_tags entries"
477
+ task :cleanup do
478
+ require 'htm'
479
+
480
+ # Ensure database connection
481
+ HTM::ActiveRecordConfig.establish_connection!
482
+
483
+ puts "\nHTM Tag Cleanup"
484
+ puts "=" * 50
485
+
486
+ # Step 1: Find active node_tags pointing to soft-deleted or missing nodes
487
+ stale_node_tags = HTM::Models::NodeTag
488
+ .joins("LEFT JOIN nodes ON nodes.id = node_tags.node_id")
489
+ .where("nodes.id IS NULL OR nodes.deleted_at IS NOT NULL")
490
+
491
+ stale_count = stale_node_tags.count
492
+
493
+ # Step 2: Find orphaned tags using the Tag.orphaned scope
494
+ orphaned_tags = HTM::Models::Tag.orphaned
495
+ orphan_count = orphaned_tags.count
496
+
497
+ if stale_count == 0 && orphan_count == 0
498
+ puts "No cleanup needed."
499
+ puts " Stale node_tags entries: 0"
500
+ puts " Orphaned tags: 0"
501
+ next
502
+ end
503
+
504
+ puts "Found:"
505
+ puts " Stale node_tags entries: #{stale_count} (pointing to deleted/missing nodes)"
506
+ puts " Orphaned tags: #{orphan_count} (no active nodes)"
507
+
508
+ if orphan_count > 0
509
+ puts "\nOrphaned tags:"
510
+ orphaned_tags.limit(20).pluck(:name).each do |name|
511
+ puts " - #{name}"
512
+ end
513
+ puts " ... and #{orphan_count - 20} more" if orphan_count > 20
514
+ end
515
+
516
+ print "\nSoft delete these entries? (yes/no): "
517
+ confirmation = $stdin.gets&.strip
518
+
519
+ unless confirmation == 'yes'
520
+ puts "Cancelled."
521
+ next
522
+ end
523
+
524
+ now = Time.current
525
+
526
+ # Soft delete stale node_tags first
527
+ if stale_count > 0
528
+ soft_deleted_node_tags = stale_node_tags.update_all(deleted_at: now)
529
+ puts "\nSoft deleted #{soft_deleted_node_tags} stale node_tags entries."
530
+ end
531
+
532
+ # Then soft delete orphaned tags
533
+ if orphan_count > 0
534
+ soft_deleted_tags = orphaned_tags.update_all(deleted_at: now)
535
+ puts "Soft deleted #{soft_deleted_tags} orphaned tags."
536
+ end
537
+
538
+ puts "\nCleanup complete (soft delete)."
539
+ end
540
+ end
541
+
296
542
  end
297
543
 
298
544
  namespace :doc do
data/mkdocs.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  # MkDocs Configuration for HTM Documentation
2
- site_name: HTM - Hierarchical Temporary Memory
2
+ site_name: HTM - Hierarchical Temporal Memory
3
3
  site_description: Intelligent memory management for LLM robots with two-tier architecture and RAG-based retrieval
4
4
  site_author: Dewayne VanHoozer
5
5
  site_url: https://madbomber.github.io/htm
@@ -172,101 +172,101 @@ nav:
172
172
  - Installation: getting-started/installation.md
173
173
  - Quick Start: getting-started/quick-start.md
174
174
  - Architecture:
175
- - architecture/index.md
176
- - Overview: architecture/overview.md
177
- - Two-Tier Memory: architecture/two-tier-memory.md
178
- - Hive Mind: architecture/hive-mind.md
179
- - ADRs:
180
- - architecture/adrs/index.md
181
- - ADR-001 PostgreSQL & TimescaleDB: architecture/adrs/001-postgresql-timescaledb.md
182
- - ADR-002 Two-Tier Memory: architecture/adrs/002-two-tier-memory.md
183
- - ADR-003 Ollama Embeddings: architecture/adrs/003-ollama-embeddings.md
184
- - ADR-004 Hive Mind: architecture/adrs/004-hive-mind.md
185
- - ADR-005 RAG Retrieval: architecture/adrs/005-rag-retrieval.md
186
- - ADR-006 Context Assembly: architecture/adrs/006-context-assembly.md
187
- - ADR-007 Eviction Strategy: architecture/adrs/007-eviction-strategy.md
188
- - ADR-008 Robot Identification: architecture/adrs/008-robot-identification.md
189
- - ADR-009 Never-Forget Philosophy: architecture/adrs/009-never-forget.md
190
- - ADR-010 Redis Working Memory (Rejected): architecture/adrs/010-redis-working-memory-rejected.md
191
- - ADR-011 pgai Integration: architecture/adrs/011-pgai-integration.md
175
+ - architecture/index.md
176
+ - Overview: architecture/overview.md
177
+ - Two-Tier Memory: architecture/two-tier-memory.md
178
+ - Hive Mind: architecture/hive-mind.md
179
+ - ADRs:
180
+ - architecture/adrs/index.md
181
+ - ADR-001 PostgreSQL & TimescaleDB: architecture/adrs/001-postgresql-timescaledb.md
182
+ - ADR-002 Two-Tier Memory: architecture/adrs/002-two-tier-memory.md
183
+ - ADR-003 Ollama Embeddings: architecture/adrs/003-ollama-embeddings.md
184
+ - ADR-004 Hive Mind: architecture/adrs/004-hive-mind.md
185
+ - ADR-005 RAG Retrieval: architecture/adrs/005-rag-retrieval.md
186
+ - ADR-006 Context Assembly: architecture/adrs/006-context-assembly.md
187
+ - ADR-007 Eviction Strategy: architecture/adrs/007-eviction-strategy.md
188
+ - ADR-008 Robot Identification: architecture/adrs/008-robot-identification.md
189
+ - ADR-009 Never-Forget Philosophy: architecture/adrs/009-never-forget.md
190
+ - ADR-010 Redis Working Memory (Rejected): architecture/adrs/010-redis-working-memory-rejected.md
191
+ - ADR-011 pgai Integration: architecture/adrs/011-pgai-integration.md
192
192
  - Guides:
193
- - guides/index.md
194
- - Getting Started: guides/getting-started.md
195
- - Adding Memories: guides/adding-memories.md
196
- - Recalling Memories: guides/recalling-memories.md
197
- - Working Memory: guides/working-memory.md
198
- - Long-Term Memory: guides/long-term-memory.md
199
- - Multi-Robot Usage: guides/multi-robot.md
200
- - Search Strategies: guides/search-strategies.md
201
- - Context Assembly: guides/context-assembly.md
193
+ - guides/index.md
194
+ - Getting Started: guides/getting-started.md
195
+ - Adding Memories: guides/adding-memories.md
196
+ - Recalling Memories: guides/recalling-memories.md
197
+ - Working Memory: guides/working-memory.md
198
+ - Long-Term Memory: guides/long-term-memory.md
199
+ - Multi-Robot Usage: guides/multi-robot.md
200
+ - Search Strategies: guides/search-strategies.md
201
+ - Context Assembly: guides/context-assembly.md
202
202
  - API Reference:
203
- - api/index.md
204
- - HTM Class: api/htm.md
205
- - Working Memory: api/working-memory.md
206
- - Long-Term Memory: api/long-term-memory.md
207
- - Embedding Service: api/embedding-service.md
208
- - Database: api/database.md
209
- - YARD Reference:
210
- - api/yard-reference.md
211
- - HTM Module: api/yard/HTM.md
212
- - Core Classes:
213
- - Configuration: api/yard/HTM/Configuration.md
214
- - Database: api/yard/HTM/Database.md
215
- - LongTermMemory: api/yard/HTM/LongTermMemory.md
216
- - WorkingMemory: api/yard/HTM/WorkingMemory.md
217
- - Services:
218
- - EmbeddingService: api/yard/HTM/EmbeddingService.md
219
- - TagService: api/yard/HTM/TagService.md
220
- - JobAdapter: api/yard/HTM/JobAdapter.md
221
- - Utilities:
222
- - CircuitBreaker: api/yard/HTM/CircuitBreaker.md
223
- - Observability: api/yard/HTM/Observability.md
224
- - Timeframe: api/yard/HTM/Timeframe.md
225
- - TimeframeExtractor: api/yard/HTM/TimeframeExtractor.md
226
- - Internal:
227
- - ActiveRecordConfig: api/yard/HTM/ActiveRecordConfig.md
228
- - Railtie: api/yard/HTM/Railtie.md
229
- - Errors:
230
- - Error: api/yard/HTM/Error.md
231
- - AuthorizationError: api/yard/HTM/AuthorizationError.md
232
- - CircuitBreakerOpenError: api/yard/HTM/CircuitBreakerOpenError.md
233
- - DatabaseError: api/yard/HTM/DatabaseError.md
234
- - EmbeddingError: api/yard/HTM/EmbeddingError.md
235
- - NotFoundError: api/yard/HTM/NotFoundError.md
236
- - QueryTimeoutError: api/yard/HTM/QueryTimeoutError.md
237
- - ResourceExhaustedError: api/yard/HTM/ResourceExhaustedError.md
238
- - TagError: api/yard/HTM/TagError.md
239
- - ValidationError: api/yard/HTM/ValidationError.md
240
- - Result Types:
241
- - Timeframe Result: api/yard/HTM/Timeframe/Result.md
242
- - TimeframeExtractor Result: api/yard/HTM/TimeframeExtractor/Result.md
203
+ - api/index.md
204
+ - HTM Class: api/htm.md
205
+ - Working Memory: api/working-memory.md
206
+ - Long-Term Memory: api/long-term-memory.md
207
+ - Embedding Service: api/embedding-service.md
208
+ - Database: api/database.md
209
+ - YARD Reference:
210
+ - api/yard-reference.md
211
+ - HTM Module: api/yard/HTM.md
212
+ - Core Classes:
213
+ - Configuration: api/yard/HTM/Configuration.md
214
+ - Database: api/yard/HTM/Database.md
215
+ - LongTermMemory: api/yard/HTM/LongTermMemory.md
216
+ - WorkingMemory: api/yard/HTM/WorkingMemory.md
217
+ - Services:
218
+ - EmbeddingService: api/yard/HTM/EmbeddingService.md
219
+ - TagService: api/yard/HTM/TagService.md
220
+ - JobAdapter: api/yard/HTM/JobAdapter.md
221
+ - Utilities:
222
+ - CircuitBreaker: api/yard/HTM/CircuitBreaker.md
223
+ - Observability: api/yard/HTM/Observability.md
224
+ - Timeframe: api/yard/HTM/Timeframe.md
225
+ - TimeframeExtractor: api/yard/HTM/TimeframeExtractor.md
226
+ - Internal:
227
+ - ActiveRecordConfig: api/yard/HTM/ActiveRecordConfig.md
228
+ - Railtie: api/yard/HTM/Railtie.md
229
+ - Errors:
230
+ - Error: api/yard/HTM/Error.md
231
+ - AuthorizationError: api/yard/HTM/AuthorizationError.md
232
+ - CircuitBreakerOpenError: api/yard/HTM/CircuitBreakerOpenError.md
233
+ - DatabaseError: api/yard/HTM/DatabaseError.md
234
+ - EmbeddingError: api/yard/HTM/EmbeddingError.md
235
+ - NotFoundError: api/yard/HTM/NotFoundError.md
236
+ - QueryTimeoutError: api/yard/HTM/QueryTimeoutError.md
237
+ - ResourceExhaustedError: api/yard/HTM/ResourceExhaustedError.md
238
+ - TagError: api/yard/HTM/TagError.md
239
+ - ValidationError: api/yard/HTM/ValidationError.md
240
+ - Result Types:
241
+ - Timeframe Result: api/yard/HTM/Timeframe/Result.md
242
+ - TimeframeExtractor Result: api/yard/HTM/TimeframeExtractor/Result.md
243
243
  - Development:
244
- - development/index.md
245
- - Setup: development/setup.md
246
- - Testing: development/testing.md
247
- - Contributing: development/contributing.md
248
- - Database Schema: development/schema.md
249
- - Database Tables:
250
- - database/README.md
251
- - Core Tables:
252
- - Robots: database/public.robots.md
253
- - Nodes: database/public.nodes.md
254
- - Tags: database/public.tags.md
255
- - File Sources: database/public.file_sources.md
256
- - Join Tables:
257
- - Node Tags: database/public.node_tags.md
258
- - Nodes Tags (Legacy): database/public.nodes_tags.md
259
- - Robot Nodes: database/public.robot_nodes.md
260
- - Views & Stats:
261
- - Node Stats: database/public.node_stats.md
262
- - Robot Activity: database/public.robot_activity.md
263
- - Topic Relationships: database/public.topic_relationships.md
264
- - Ontology Structure: database/public.ontology_structure.md
265
- - Relationships: database/public.relationships.md
266
- - System:
267
- - Operations Log: database/public.operations_log.md
268
- - Schema Migrations: database/public.schema_migrations.md
269
- - Multi-Framework Support: multi_framework_support.md
270
- - Database Rake Tasks: database_rake_tasks.md
271
- - Using Rake Tasks: using_rake_tasks_in_your_app.md
272
- - Setup Local Database: setup_local_database.md
244
+ - development/index.md
245
+ - Setup: development/setup.md
246
+ - Testing: development/testing.md
247
+ - Contributing: development/contributing.md
248
+ - Database Schema: development/schema.md
249
+ - Database Tables:
250
+ - database/README.md
251
+ - Core Tables:
252
+ - Robots: database/public.robots.md
253
+ - Nodes: database/public.nodes.md
254
+ - Tags: database/public.tags.md
255
+ - File Sources: database/public.file_sources.md
256
+ - Join Tables:
257
+ - Node Tags: database/public.node_tags.md
258
+ - Nodes Tags (Legacy): database/public.nodes_tags.md
259
+ - Robot Nodes: database/public.robot_nodes.md
260
+ - Views & Stats:
261
+ - Node Stats: database/public.node_stats.md
262
+ - Robot Activity: database/public.robot_activity.md
263
+ - Topic Relationships: database/public.topic_relationships.md
264
+ - Ontology Structure: database/public.ontology_structure.md
265
+ - Relationships: database/public.relationships.md
266
+ - System:
267
+ - Operations Log: database/public.operations_log.md
268
+ - Schema Migrations: database/public.schema_migrations.md
269
+ - Multi-Framework Support: multi_framework_support.md
270
+ - Database Rake Tasks: database_rake_tasks.md
271
+ - Using Rake Tasks: using_rake_tasks_in_your_app.md
272
+ - Setup Local Database: setup_local_database.md