htm 0.0.1
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 +7 -0
- data/.architecture/decisions/adrs/001-use-postgresql-timescaledb-storage.md +227 -0
- data/.architecture/decisions/adrs/002-two-tier-memory-architecture.md +322 -0
- data/.architecture/decisions/adrs/003-ollama-default-embedding-provider.md +339 -0
- data/.architecture/decisions/adrs/004-multi-robot-shared-memory-hive-mind.md +374 -0
- data/.architecture/decisions/adrs/005-rag-based-retrieval-with-hybrid-search.md +443 -0
- data/.architecture/decisions/adrs/006-context-assembly-strategies.md +444 -0
- data/.architecture/decisions/adrs/007-working-memory-eviction-strategy.md +461 -0
- data/.architecture/decisions/adrs/008-robot-identification-system.md +550 -0
- data/.architecture/decisions/adrs/009-never-forget-explicit-deletion-only.md +570 -0
- data/.architecture/decisions/adrs/010-redis-working-memory-rejected.md +323 -0
- data/.architecture/decisions/adrs/011-database-side-embedding-generation-with-pgai.md +585 -0
- data/.architecture/decisions/adrs/012-llm-driven-ontology-topic-extraction.md +583 -0
- data/.architecture/decisions/adrs/013-activerecord-orm-and-many-to-many-tagging.md +299 -0
- data/.architecture/decisions/adrs/014-client-side-embedding-generation-workflow.md +569 -0
- data/.architecture/decisions/adrs/015-hierarchical-tag-ontology-and-llm-extraction.md +701 -0
- data/.architecture/decisions/adrs/016-async-embedding-and-tag-generation.md +694 -0
- data/.architecture/members.yml +144 -0
- data/.architecture/reviews/2025-10-29-llm-configuration-and-async-processing-review.md +1137 -0
- data/.architecture/reviews/initial-system-analysis.md +330 -0
- data/.envrc +32 -0
- data/.irbrc +145 -0
- data/CHANGELOG.md +150 -0
- data/COMMITS.md +196 -0
- data/LICENSE +21 -0
- data/README.md +1347 -0
- data/Rakefile +51 -0
- data/SETUP.md +268 -0
- data/config/database.yml +67 -0
- data/db/migrate/20250101000001_enable_extensions.rb +14 -0
- data/db/migrate/20250101000002_create_robots.rb +14 -0
- data/db/migrate/20250101000003_create_nodes.rb +42 -0
- data/db/migrate/20250101000005_create_tags.rb +38 -0
- data/db/migrate/20250101000007_add_node_vector_indexes.rb +30 -0
- data/db/schema.sql +473 -0
- data/db/seed_data/README.md +100 -0
- data/db/seed_data/presidents.md +136 -0
- data/db/seed_data/states.md +151 -0
- data/db/seeds.rb +208 -0
- data/dbdoc/README.md +173 -0
- data/dbdoc/public.node_stats.md +48 -0
- data/dbdoc/public.node_stats.svg +41 -0
- data/dbdoc/public.node_tags.md +40 -0
- data/dbdoc/public.node_tags.svg +112 -0
- data/dbdoc/public.nodes.md +54 -0
- data/dbdoc/public.nodes.svg +118 -0
- data/dbdoc/public.nodes_tags.md +39 -0
- data/dbdoc/public.nodes_tags.svg +112 -0
- data/dbdoc/public.ontology_structure.md +48 -0
- data/dbdoc/public.ontology_structure.svg +38 -0
- data/dbdoc/public.operations_log.md +42 -0
- data/dbdoc/public.operations_log.svg +130 -0
- data/dbdoc/public.relationships.md +39 -0
- data/dbdoc/public.relationships.svg +41 -0
- data/dbdoc/public.robot_activity.md +46 -0
- data/dbdoc/public.robot_activity.svg +35 -0
- data/dbdoc/public.robots.md +35 -0
- data/dbdoc/public.robots.svg +90 -0
- data/dbdoc/public.schema_migrations.md +29 -0
- data/dbdoc/public.schema_migrations.svg +26 -0
- data/dbdoc/public.tags.md +35 -0
- data/dbdoc/public.tags.svg +60 -0
- data/dbdoc/public.topic_relationships.md +45 -0
- data/dbdoc/public.topic_relationships.svg +32 -0
- data/dbdoc/schema.json +1437 -0
- data/dbdoc/schema.svg +154 -0
- data/docs/api/database.md +806 -0
- data/docs/api/embedding-service.md +532 -0
- data/docs/api/htm.md +797 -0
- data/docs/api/index.md +259 -0
- data/docs/api/long-term-memory.md +1096 -0
- data/docs/api/working-memory.md +665 -0
- data/docs/architecture/adrs/001-postgresql-timescaledb.md +314 -0
- data/docs/architecture/adrs/002-two-tier-memory.md +411 -0
- data/docs/architecture/adrs/003-ollama-embeddings.md +421 -0
- data/docs/architecture/adrs/004-hive-mind.md +437 -0
- data/docs/architecture/adrs/005-rag-retrieval.md +531 -0
- data/docs/architecture/adrs/006-context-assembly.md +496 -0
- data/docs/architecture/adrs/007-eviction-strategy.md +645 -0
- data/docs/architecture/adrs/008-robot-identification.md +625 -0
- data/docs/architecture/adrs/009-never-forget.md +648 -0
- data/docs/architecture/adrs/010-redis-working-memory-rejected.md +323 -0
- data/docs/architecture/adrs/011-pgai-integration.md +494 -0
- data/docs/architecture/adrs/index.md +215 -0
- data/docs/architecture/hive-mind.md +736 -0
- data/docs/architecture/index.md +351 -0
- data/docs/architecture/overview.md +538 -0
- data/docs/architecture/two-tier-memory.md +873 -0
- data/docs/assets/css/custom.css +83 -0
- data/docs/assets/images/htm-core-components.svg +63 -0
- data/docs/assets/images/htm-database-schema.svg +93 -0
- data/docs/assets/images/htm-hive-mind-architecture.svg +125 -0
- data/docs/assets/images/htm-importance-scoring-framework.svg +83 -0
- data/docs/assets/images/htm-layered-architecture.svg +71 -0
- data/docs/assets/images/htm-long-term-memory-architecture.svg +115 -0
- data/docs/assets/images/htm-working-memory-architecture.svg +120 -0
- data/docs/assets/images/htm.jpg +0 -0
- data/docs/assets/images/htm_demo.gif +0 -0
- data/docs/assets/js/mathjax.js +18 -0
- data/docs/assets/videos/htm_video.mp4 +0 -0
- data/docs/database_rake_tasks.md +322 -0
- data/docs/development/contributing.md +787 -0
- data/docs/development/index.md +336 -0
- data/docs/development/schema.md +596 -0
- data/docs/development/setup.md +719 -0
- data/docs/development/testing.md +819 -0
- data/docs/guides/adding-memories.md +824 -0
- data/docs/guides/context-assembly.md +1009 -0
- data/docs/guides/getting-started.md +577 -0
- data/docs/guides/index.md +118 -0
- data/docs/guides/long-term-memory.md +941 -0
- data/docs/guides/multi-robot.md +866 -0
- data/docs/guides/recalling-memories.md +927 -0
- data/docs/guides/search-strategies.md +953 -0
- data/docs/guides/working-memory.md +717 -0
- data/docs/index.md +214 -0
- data/docs/installation.md +477 -0
- data/docs/multi_framework_support.md +519 -0
- data/docs/quick-start.md +655 -0
- data/docs/setup_local_database.md +302 -0
- data/docs/using_rake_tasks_in_your_app.md +383 -0
- data/examples/basic_usage.rb +93 -0
- data/examples/cli_app/README.md +317 -0
- data/examples/cli_app/htm_cli.rb +270 -0
- data/examples/custom_llm_configuration.rb +183 -0
- data/examples/example_app/Rakefile +71 -0
- data/examples/example_app/app.rb +206 -0
- data/examples/sinatra_app/Gemfile +21 -0
- data/examples/sinatra_app/app.rb +335 -0
- data/lib/htm/active_record_config.rb +113 -0
- data/lib/htm/configuration.rb +342 -0
- data/lib/htm/database.rb +594 -0
- data/lib/htm/embedding_service.rb +115 -0
- data/lib/htm/errors.rb +34 -0
- data/lib/htm/job_adapter.rb +154 -0
- data/lib/htm/jobs/generate_embedding_job.rb +65 -0
- data/lib/htm/jobs/generate_tags_job.rb +82 -0
- data/lib/htm/long_term_memory.rb +965 -0
- data/lib/htm/models/node.rb +109 -0
- data/lib/htm/models/node_tag.rb +33 -0
- data/lib/htm/models/robot.rb +52 -0
- data/lib/htm/models/tag.rb +76 -0
- data/lib/htm/railtie.rb +76 -0
- data/lib/htm/sinatra.rb +157 -0
- data/lib/htm/tag_service.rb +135 -0
- data/lib/htm/tasks.rb +38 -0
- data/lib/htm/version.rb +5 -0
- data/lib/htm/working_memory.rb +182 -0
- data/lib/htm.rb +400 -0
- data/lib/tasks/db.rake +19 -0
- data/lib/tasks/htm.rake +147 -0
- data/lib/tasks/jobs.rake +312 -0
- data/mkdocs.yml +190 -0
- data/scripts/install_local_database.sh +309 -0
- metadata +341 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# HTM Local Database Setup Script
|
|
3
|
+
#
|
|
4
|
+
# This script performs a complete, automated installation of PostgreSQL 17
|
|
5
|
+
# with all required extensions for the HTM (Hierarchical Temporal Memory) library:
|
|
6
|
+
# - PostgreSQL 17 (from Homebrew)
|
|
7
|
+
# - pgvector - vector similarity search for embeddings
|
|
8
|
+
# - pg_trgm - trigram matching for fuzzy text search
|
|
9
|
+
#
|
|
10
|
+
# This is the only script you need to run to get a fully functional
|
|
11
|
+
# local database environment for HTM development.
|
|
12
|
+
#
|
|
13
|
+
# Requirements:
|
|
14
|
+
# - macOS with Homebrew installed
|
|
15
|
+
#
|
|
16
|
+
# Usage:
|
|
17
|
+
# bash scripts/install_local_database.sh
|
|
18
|
+
|
|
19
|
+
set -e # Exit on error
|
|
20
|
+
|
|
21
|
+
echo "=========================================="
|
|
22
|
+
echo "HTM Local Database Setup"
|
|
23
|
+
echo "=========================================="
|
|
24
|
+
echo
|
|
25
|
+
|
|
26
|
+
# Check for existing PostgreSQL
|
|
27
|
+
if brew list postgresql@17 &>/dev/null || brew list postgresql@16 &>/dev/null; then
|
|
28
|
+
echo "⚠️ Found existing PostgreSQL installation"
|
|
29
|
+
echo
|
|
30
|
+
echo "This script will:"
|
|
31
|
+
echo " 1. Stop current PostgreSQL services"
|
|
32
|
+
echo " 2. Backup your database"
|
|
33
|
+
echo " 3. Uninstall current PostgreSQL"
|
|
34
|
+
echo " 4. Install PostgreSQL 17"
|
|
35
|
+
echo " 5. Install all required extensions (pgvector, pg_trgm)"
|
|
36
|
+
echo " 6. Restore your data"
|
|
37
|
+
echo " 7. Start PostgreSQL with all extensions enabled"
|
|
38
|
+
echo
|
|
39
|
+
read -p "Continue? (y/n) " -n 1 -r
|
|
40
|
+
echo
|
|
41
|
+
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# Step 1: Stop ALL PostgreSQL processes
|
|
47
|
+
echo
|
|
48
|
+
echo "Step 1: Stopping PostgreSQL services..."
|
|
49
|
+
brew services stop postgresql@17 2>/dev/null || true
|
|
50
|
+
brew services stop postgresql@16 2>/dev/null || true
|
|
51
|
+
|
|
52
|
+
# Force kill any remaining postgres processes
|
|
53
|
+
pkill -9 postgres 2>/dev/null || true
|
|
54
|
+
sleep 2
|
|
55
|
+
|
|
56
|
+
# Check if any processes remain
|
|
57
|
+
if pgrep -q postgres; then
|
|
58
|
+
echo "⚠️ Warning: Some PostgreSQL processes are still running"
|
|
59
|
+
pkill -KILL postgres 2>/dev/null || true
|
|
60
|
+
sleep 2
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
echo "✓ Services stopped"
|
|
64
|
+
|
|
65
|
+
# Step 2: Backup database
|
|
66
|
+
BACKUP_DIR="$HOME/postgresql_backup_$(date +%Y%m%d_%H%M%S)"
|
|
67
|
+
echo
|
|
68
|
+
echo "Step 2: Backing up database to $BACKUP_DIR..."
|
|
69
|
+
|
|
70
|
+
if [ -d "/opt/homebrew/var/postgresql@17" ]; then
|
|
71
|
+
mkdir -p "$BACKUP_DIR"
|
|
72
|
+
|
|
73
|
+
# Try to export database if possible
|
|
74
|
+
CURRENT_USER=$(whoami)
|
|
75
|
+
if command -v pg_dump &>/dev/null && psql -U $CURRENT_USER -lqt 2>/dev/null | grep -qw htm_development; then
|
|
76
|
+
echo "Exporting htm_development database..."
|
|
77
|
+
pg_dump -U $CURRENT_USER htm_development > "$BACKUP_DIR/htm_development.sql" 2>/dev/null || echo "Could not export database (server may be stopped)"
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# Copy data directory
|
|
81
|
+
if [ -d "/opt/homebrew/var/postgresql@17" ]; then
|
|
82
|
+
cp -r /opt/homebrew/var/postgresql@17 "$BACKUP_DIR/data" 2>/dev/null || true
|
|
83
|
+
echo "✓ Data directory backed up"
|
|
84
|
+
fi
|
|
85
|
+
else
|
|
86
|
+
echo "No existing database found, skipping backup"
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
# Step 3: Uninstall current PostgreSQL
|
|
90
|
+
echo
|
|
91
|
+
echo "Step 3: Uninstalling current PostgreSQL..."
|
|
92
|
+
brew uninstall --force postgresql@17 2>/dev/null || true
|
|
93
|
+
brew uninstall --force postgresql@16 2>/dev/null || true
|
|
94
|
+
|
|
95
|
+
# Clean up old data directory to start fresh
|
|
96
|
+
if [ -d "/opt/homebrew/var/postgresql@17" ]; then
|
|
97
|
+
echo "Removing old data directory..."
|
|
98
|
+
rm -rf /opt/homebrew/var/postgresql@17
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
echo "✓ Uninstalled"
|
|
102
|
+
|
|
103
|
+
# Step 4: Install PostgreSQL
|
|
104
|
+
echo
|
|
105
|
+
echo "Step 4: Installing PostgreSQL 17..."
|
|
106
|
+
|
|
107
|
+
# Install standard PostgreSQL 17
|
|
108
|
+
echo "Installing postgresql@17..."
|
|
109
|
+
brew install postgresql@17
|
|
110
|
+
|
|
111
|
+
echo "✓ PostgreSQL installed"
|
|
112
|
+
|
|
113
|
+
# Step 5: Initialize and configure PostgreSQL
|
|
114
|
+
echo
|
|
115
|
+
echo "Step 5: Initializing PostgreSQL..."
|
|
116
|
+
|
|
117
|
+
# Set paths
|
|
118
|
+
PG_BIN=/opt/homebrew/opt/postgresql@17/bin
|
|
119
|
+
PG_DATA=/opt/homebrew/var/postgresql@17
|
|
120
|
+
|
|
121
|
+
# Ensure data directory is completely clean before initialization
|
|
122
|
+
if [ -d "$PG_DATA" ]; then
|
|
123
|
+
echo "Removing existing data directory to start fresh..."
|
|
124
|
+
rm -rf "$PG_DATA"
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
# Initialize database cluster (initdb will create the directory)
|
|
128
|
+
echo "Initializing database cluster..."
|
|
129
|
+
$PG_BIN/initdb -D "$PG_DATA" --username=$(whoami) --auth=trust
|
|
130
|
+
|
|
131
|
+
# Configure postgresql.conf for better performance (macOS compatible)
|
|
132
|
+
echo "Configuring PostgreSQL..."
|
|
133
|
+
cat >> "$PG_DATA/postgresql.conf" <<EOF
|
|
134
|
+
|
|
135
|
+
# HTM Optimizations (macOS compatible)
|
|
136
|
+
max_connections = 100
|
|
137
|
+
shared_buffers = 256MB
|
|
138
|
+
effective_cache_size = 1GB
|
|
139
|
+
maintenance_work_mem = 64MB
|
|
140
|
+
checkpoint_completion_target = 0.9
|
|
141
|
+
wal_buffers = 16MB
|
|
142
|
+
default_statistics_target = 100
|
|
143
|
+
random_page_cost = 1.1
|
|
144
|
+
# Note: effective_io_concurrency not supported on macOS
|
|
145
|
+
# Note: shared_preload_libraries configured later
|
|
146
|
+
EOF
|
|
147
|
+
|
|
148
|
+
# Start PostgreSQL
|
|
149
|
+
echo "Starting PostgreSQL..."
|
|
150
|
+
$PG_BIN/pg_ctl -D "$PG_DATA" -l "$PG_DATA/server.log" start
|
|
151
|
+
|
|
152
|
+
# Wait for server to be ready
|
|
153
|
+
echo "Waiting for PostgreSQL to start..."
|
|
154
|
+
for i in {1..30}; do
|
|
155
|
+
if $PG_BIN/pg_isready -q; then
|
|
156
|
+
break
|
|
157
|
+
fi
|
|
158
|
+
sleep 1
|
|
159
|
+
done
|
|
160
|
+
|
|
161
|
+
if ! $PG_BIN/pg_isready -q; then
|
|
162
|
+
echo "✗ PostgreSQL failed to start"
|
|
163
|
+
echo "Check log: $PG_DATA/server.log"
|
|
164
|
+
cat "$PG_DATA/server.log"
|
|
165
|
+
exit 1
|
|
166
|
+
fi
|
|
167
|
+
|
|
168
|
+
# Give PostgreSQL a moment to fully initialize
|
|
169
|
+
sleep 2
|
|
170
|
+
|
|
171
|
+
echo "✓ PostgreSQL started"
|
|
172
|
+
|
|
173
|
+
# Step 6: Create databases
|
|
174
|
+
echo
|
|
175
|
+
echo "Step 6: Setting up databases..."
|
|
176
|
+
|
|
177
|
+
# Get current username
|
|
178
|
+
PGUSER=$(whoami)
|
|
179
|
+
|
|
180
|
+
# Create default database for user
|
|
181
|
+
echo "Creating database for user $PGUSER..."
|
|
182
|
+
$PG_BIN/createdb -U $PGUSER $PGUSER 2>/dev/null && echo "✓ Created $PGUSER database" || {
|
|
183
|
+
# Check if it already exists
|
|
184
|
+
if $PG_BIN/psql -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGUSER; then
|
|
185
|
+
echo "✓ User database already exists"
|
|
186
|
+
else
|
|
187
|
+
echo "✗ Failed to create user database and it doesn't exist"
|
|
188
|
+
echo "Checking PostgreSQL connection..."
|
|
189
|
+
$PG_BIN/psql -U $PGUSER postgres -c "SELECT version();" 2>&1 || true
|
|
190
|
+
exit 1
|
|
191
|
+
fi
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
# Create htm_development database
|
|
195
|
+
echo "Creating htm_development database..."
|
|
196
|
+
$PG_BIN/createdb -U $PGUSER htm_development 2>/dev/null && echo "✓ Created htm_development database" || {
|
|
197
|
+
# Check if it already exists
|
|
198
|
+
if $PG_BIN/psql -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw htm_development; then
|
|
199
|
+
echo "✓ htm_development already exists"
|
|
200
|
+
else
|
|
201
|
+
echo "✗ Failed to create htm_development database and it doesn't exist"
|
|
202
|
+
echo "Checking connection..."
|
|
203
|
+
$PG_BIN/psql -U $PGUSER -l 2>&1 | head -20
|
|
204
|
+
exit 1
|
|
205
|
+
fi
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
# Restore from backup if it exists
|
|
209
|
+
if [ -f "$BACKUP_DIR/htm_development.sql" ]; then
|
|
210
|
+
echo "Restoring from backup..."
|
|
211
|
+
$PG_BIN/psql -U $PGUSER htm_development < "$BACKUP_DIR/htm_development.sql" || echo "Could not restore backup (this is OK for fresh install)"
|
|
212
|
+
fi
|
|
213
|
+
|
|
214
|
+
echo "✓ Databases created"
|
|
215
|
+
|
|
216
|
+
# Step 7: Install extension dependencies
|
|
217
|
+
echo
|
|
218
|
+
echo "Step 7: Installing extension dependencies..."
|
|
219
|
+
|
|
220
|
+
# Install pgvector
|
|
221
|
+
if ! brew list pgvector &>/dev/null; then
|
|
222
|
+
echo "Installing pgvector..."
|
|
223
|
+
brew install pgvector
|
|
224
|
+
else
|
|
225
|
+
echo "✓ pgvector already installed"
|
|
226
|
+
fi
|
|
227
|
+
|
|
228
|
+
echo "✓ Extension dependencies installed"
|
|
229
|
+
|
|
230
|
+
# Step 8: Create symlinks for extension files
|
|
231
|
+
echo
|
|
232
|
+
echo "Step 8: Creating extension file symlinks..."
|
|
233
|
+
|
|
234
|
+
# PostgreSQL from petere tap looks for extensions in its Cellar directory
|
|
235
|
+
# but Homebrew installs them in the shared location
|
|
236
|
+
PG_CELLAR_EXT=/opt/homebrew/Cellar/postgresql@17/17.6/share/extension
|
|
237
|
+
PG_CELLAR_LIB=/opt/homebrew/Cellar/postgresql@17/17.6/lib
|
|
238
|
+
PG_SHARED_EXT=/opt/homebrew/share/postgresql@17/extension
|
|
239
|
+
PG_SHARED_LIB=/opt/homebrew/lib/postgresql@17
|
|
240
|
+
|
|
241
|
+
# Create extension directory in Cellar if it doesn't exist
|
|
242
|
+
mkdir -p "$PG_CELLAR_EXT"
|
|
243
|
+
mkdir -p "$PG_CELLAR_LIB"
|
|
244
|
+
|
|
245
|
+
# Symlink pgvector files
|
|
246
|
+
if [ -f "$PG_SHARED_EXT/vector.control" ]; then
|
|
247
|
+
echo "Symlinking pgvector extension files..."
|
|
248
|
+
cd "$PG_CELLAR_EXT"
|
|
249
|
+
ln -sf "$PG_SHARED_EXT"/vector* .
|
|
250
|
+
cd "$PG_CELLAR_LIB"
|
|
251
|
+
ln -sf "$PG_SHARED_LIB"/vector.dylib .
|
|
252
|
+
echo "✓ pgvector symlinks created"
|
|
253
|
+
fi
|
|
254
|
+
|
|
255
|
+
echo "✓ Extension symlinks created"
|
|
256
|
+
|
|
257
|
+
# Step 9: Enable core extensions in database
|
|
258
|
+
echo
|
|
259
|
+
echo "Step 9: Enabling core extensions..."
|
|
260
|
+
|
|
261
|
+
# Enable extensions in database
|
|
262
|
+
echo "Enabling extensions in htm_development..."
|
|
263
|
+
$PG_BIN/psql -U $(whoami) htm_development -c "CREATE EXTENSION IF NOT EXISTS vector;" || {
|
|
264
|
+
echo "✗ Failed to enable pgvector extension"
|
|
265
|
+
echo "Check that symlinks were created correctly"
|
|
266
|
+
exit 1
|
|
267
|
+
}
|
|
268
|
+
$PG_BIN/psql -U $(whoami) htm_development -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
|
|
269
|
+
|
|
270
|
+
echo "✓ Core extensions enabled"
|
|
271
|
+
|
|
272
|
+
# Step 10: Verify installation
|
|
273
|
+
echo
|
|
274
|
+
echo "Step 10: Verifying installation..."
|
|
275
|
+
echo
|
|
276
|
+
|
|
277
|
+
# Check all extensions
|
|
278
|
+
echo "Installed extensions:"
|
|
279
|
+
$PG_BIN/psql -U $(whoami) htm_development -c "\dx"
|
|
280
|
+
|
|
281
|
+
echo
|
|
282
|
+
echo "=========================================="
|
|
283
|
+
echo "✓ Setup Complete!"
|
|
284
|
+
echo "=========================================="
|
|
285
|
+
echo
|
|
286
|
+
echo "PostgreSQL is running with required extensions:"
|
|
287
|
+
echo " ✓ pgvector (for embeddings)"
|
|
288
|
+
echo " ✓ pg_trgm (for fuzzy search)"
|
|
289
|
+
echo
|
|
290
|
+
echo "Embeddings are generated client-side using Ollama."
|
|
291
|
+
echo "Make sure Ollama is installed and running:"
|
|
292
|
+
echo " curl https://ollama.ai/install.sh | sh"
|
|
293
|
+
echo " ollama pull nomic-embed-text"
|
|
294
|
+
echo
|
|
295
|
+
echo "Database: htm_development"
|
|
296
|
+
echo "Location: $PG_DATA"
|
|
297
|
+
echo "Log: $PG_DATA/server.log"
|
|
298
|
+
echo "Backup: $BACKUP_DIR"
|
|
299
|
+
echo
|
|
300
|
+
echo "PostgreSQL commands:"
|
|
301
|
+
echo " Start: $PG_BIN/pg_ctl -D $PG_DATA -l $PG_DATA/server.log start"
|
|
302
|
+
echo " Stop: $PG_BIN/pg_ctl -D $PG_DATA stop"
|
|
303
|
+
echo " Status: $PG_BIN/pg_ctl -D $PG_DATA status"
|
|
304
|
+
echo
|
|
305
|
+
echo "Next steps:"
|
|
306
|
+
echo " 1. cd /Users/dewayne/sandbox/git_repos/madbomber/htm"
|
|
307
|
+
echo " 2. bundle exec rake htm:db:setup"
|
|
308
|
+
echo " 3. bundle exec rake htm:db:seed"
|
|
309
|
+
echo
|
metadata
ADDED
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: htm
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Dewayne VanHoozer
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: pg
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: 1.5.0
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 1.5.0
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: neighbor
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: activerecord
|
|
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: tiktoken_ruby
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :runtime
|
|
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: ruby_llm
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :runtime
|
|
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: lru_redux
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0'
|
|
89
|
+
type: :runtime
|
|
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: rake
|
|
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: minitest
|
|
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: minitest-reporters
|
|
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: debug_me
|
|
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
|
+
description: |
|
|
153
|
+
HTM (Hierarchical Temporary Memory) provides intelligent memory management for
|
|
154
|
+
LLM-based applications. It implements a two-tier memory system with
|
|
155
|
+
durable long-term storage (PostgreSQL/TimescaleDB) and token-limited working
|
|
156
|
+
memory, enabling applications to recall context from past conversations using RAG
|
|
157
|
+
(Retrieval-Augmented Generation) techniques.
|
|
158
|
+
email:
|
|
159
|
+
- dvanhoozer@gmail.com
|
|
160
|
+
executables: []
|
|
161
|
+
extensions: []
|
|
162
|
+
extra_rdoc_files: []
|
|
163
|
+
files:
|
|
164
|
+
- ".architecture/decisions/adrs/001-use-postgresql-timescaledb-storage.md"
|
|
165
|
+
- ".architecture/decisions/adrs/002-two-tier-memory-architecture.md"
|
|
166
|
+
- ".architecture/decisions/adrs/003-ollama-default-embedding-provider.md"
|
|
167
|
+
- ".architecture/decisions/adrs/004-multi-robot-shared-memory-hive-mind.md"
|
|
168
|
+
- ".architecture/decisions/adrs/005-rag-based-retrieval-with-hybrid-search.md"
|
|
169
|
+
- ".architecture/decisions/adrs/006-context-assembly-strategies.md"
|
|
170
|
+
- ".architecture/decisions/adrs/007-working-memory-eviction-strategy.md"
|
|
171
|
+
- ".architecture/decisions/adrs/008-robot-identification-system.md"
|
|
172
|
+
- ".architecture/decisions/adrs/009-never-forget-explicit-deletion-only.md"
|
|
173
|
+
- ".architecture/decisions/adrs/010-redis-working-memory-rejected.md"
|
|
174
|
+
- ".architecture/decisions/adrs/011-database-side-embedding-generation-with-pgai.md"
|
|
175
|
+
- ".architecture/decisions/adrs/012-llm-driven-ontology-topic-extraction.md"
|
|
176
|
+
- ".architecture/decisions/adrs/013-activerecord-orm-and-many-to-many-tagging.md"
|
|
177
|
+
- ".architecture/decisions/adrs/014-client-side-embedding-generation-workflow.md"
|
|
178
|
+
- ".architecture/decisions/adrs/015-hierarchical-tag-ontology-and-llm-extraction.md"
|
|
179
|
+
- ".architecture/decisions/adrs/016-async-embedding-and-tag-generation.md"
|
|
180
|
+
- ".architecture/members.yml"
|
|
181
|
+
- ".architecture/reviews/2025-10-29-llm-configuration-and-async-processing-review.md"
|
|
182
|
+
- ".architecture/reviews/initial-system-analysis.md"
|
|
183
|
+
- ".envrc"
|
|
184
|
+
- ".irbrc"
|
|
185
|
+
- CHANGELOG.md
|
|
186
|
+
- COMMITS.md
|
|
187
|
+
- LICENSE
|
|
188
|
+
- README.md
|
|
189
|
+
- Rakefile
|
|
190
|
+
- SETUP.md
|
|
191
|
+
- config/database.yml
|
|
192
|
+
- db/migrate/20250101000001_enable_extensions.rb
|
|
193
|
+
- db/migrate/20250101000002_create_robots.rb
|
|
194
|
+
- db/migrate/20250101000003_create_nodes.rb
|
|
195
|
+
- db/migrate/20250101000005_create_tags.rb
|
|
196
|
+
- db/migrate/20250101000007_add_node_vector_indexes.rb
|
|
197
|
+
- db/schema.sql
|
|
198
|
+
- db/seed_data/README.md
|
|
199
|
+
- db/seed_data/presidents.md
|
|
200
|
+
- db/seed_data/states.md
|
|
201
|
+
- db/seeds.rb
|
|
202
|
+
- dbdoc/README.md
|
|
203
|
+
- dbdoc/public.node_stats.md
|
|
204
|
+
- dbdoc/public.node_stats.svg
|
|
205
|
+
- dbdoc/public.node_tags.md
|
|
206
|
+
- dbdoc/public.node_tags.svg
|
|
207
|
+
- dbdoc/public.nodes.md
|
|
208
|
+
- dbdoc/public.nodes.svg
|
|
209
|
+
- dbdoc/public.nodes_tags.md
|
|
210
|
+
- dbdoc/public.nodes_tags.svg
|
|
211
|
+
- dbdoc/public.ontology_structure.md
|
|
212
|
+
- dbdoc/public.ontology_structure.svg
|
|
213
|
+
- dbdoc/public.operations_log.md
|
|
214
|
+
- dbdoc/public.operations_log.svg
|
|
215
|
+
- dbdoc/public.relationships.md
|
|
216
|
+
- dbdoc/public.relationships.svg
|
|
217
|
+
- dbdoc/public.robot_activity.md
|
|
218
|
+
- dbdoc/public.robot_activity.svg
|
|
219
|
+
- dbdoc/public.robots.md
|
|
220
|
+
- dbdoc/public.robots.svg
|
|
221
|
+
- dbdoc/public.schema_migrations.md
|
|
222
|
+
- dbdoc/public.schema_migrations.svg
|
|
223
|
+
- dbdoc/public.tags.md
|
|
224
|
+
- dbdoc/public.tags.svg
|
|
225
|
+
- dbdoc/public.topic_relationships.md
|
|
226
|
+
- dbdoc/public.topic_relationships.svg
|
|
227
|
+
- dbdoc/schema.json
|
|
228
|
+
- dbdoc/schema.svg
|
|
229
|
+
- docs/api/database.md
|
|
230
|
+
- docs/api/embedding-service.md
|
|
231
|
+
- docs/api/htm.md
|
|
232
|
+
- docs/api/index.md
|
|
233
|
+
- docs/api/long-term-memory.md
|
|
234
|
+
- docs/api/working-memory.md
|
|
235
|
+
- docs/architecture/adrs/001-postgresql-timescaledb.md
|
|
236
|
+
- docs/architecture/adrs/002-two-tier-memory.md
|
|
237
|
+
- docs/architecture/adrs/003-ollama-embeddings.md
|
|
238
|
+
- docs/architecture/adrs/004-hive-mind.md
|
|
239
|
+
- docs/architecture/adrs/005-rag-retrieval.md
|
|
240
|
+
- docs/architecture/adrs/006-context-assembly.md
|
|
241
|
+
- docs/architecture/adrs/007-eviction-strategy.md
|
|
242
|
+
- docs/architecture/adrs/008-robot-identification.md
|
|
243
|
+
- docs/architecture/adrs/009-never-forget.md
|
|
244
|
+
- docs/architecture/adrs/010-redis-working-memory-rejected.md
|
|
245
|
+
- docs/architecture/adrs/011-pgai-integration.md
|
|
246
|
+
- docs/architecture/adrs/index.md
|
|
247
|
+
- docs/architecture/hive-mind.md
|
|
248
|
+
- docs/architecture/index.md
|
|
249
|
+
- docs/architecture/overview.md
|
|
250
|
+
- docs/architecture/two-tier-memory.md
|
|
251
|
+
- docs/assets/css/custom.css
|
|
252
|
+
- docs/assets/images/htm-core-components.svg
|
|
253
|
+
- docs/assets/images/htm-database-schema.svg
|
|
254
|
+
- docs/assets/images/htm-hive-mind-architecture.svg
|
|
255
|
+
- docs/assets/images/htm-importance-scoring-framework.svg
|
|
256
|
+
- docs/assets/images/htm-layered-architecture.svg
|
|
257
|
+
- docs/assets/images/htm-long-term-memory-architecture.svg
|
|
258
|
+
- docs/assets/images/htm-working-memory-architecture.svg
|
|
259
|
+
- docs/assets/images/htm.jpg
|
|
260
|
+
- docs/assets/images/htm_demo.gif
|
|
261
|
+
- docs/assets/js/mathjax.js
|
|
262
|
+
- docs/assets/videos/htm_video.mp4
|
|
263
|
+
- docs/database_rake_tasks.md
|
|
264
|
+
- docs/development/contributing.md
|
|
265
|
+
- docs/development/index.md
|
|
266
|
+
- docs/development/schema.md
|
|
267
|
+
- docs/development/setup.md
|
|
268
|
+
- docs/development/testing.md
|
|
269
|
+
- docs/guides/adding-memories.md
|
|
270
|
+
- docs/guides/context-assembly.md
|
|
271
|
+
- docs/guides/getting-started.md
|
|
272
|
+
- docs/guides/index.md
|
|
273
|
+
- docs/guides/long-term-memory.md
|
|
274
|
+
- docs/guides/multi-robot.md
|
|
275
|
+
- docs/guides/recalling-memories.md
|
|
276
|
+
- docs/guides/search-strategies.md
|
|
277
|
+
- docs/guides/working-memory.md
|
|
278
|
+
- docs/index.md
|
|
279
|
+
- docs/installation.md
|
|
280
|
+
- docs/multi_framework_support.md
|
|
281
|
+
- docs/quick-start.md
|
|
282
|
+
- docs/setup_local_database.md
|
|
283
|
+
- docs/using_rake_tasks_in_your_app.md
|
|
284
|
+
- examples/basic_usage.rb
|
|
285
|
+
- examples/cli_app/README.md
|
|
286
|
+
- examples/cli_app/htm_cli.rb
|
|
287
|
+
- examples/custom_llm_configuration.rb
|
|
288
|
+
- examples/example_app/Rakefile
|
|
289
|
+
- examples/example_app/app.rb
|
|
290
|
+
- examples/sinatra_app/Gemfile
|
|
291
|
+
- examples/sinatra_app/app.rb
|
|
292
|
+
- lib/htm.rb
|
|
293
|
+
- lib/htm/active_record_config.rb
|
|
294
|
+
- lib/htm/configuration.rb
|
|
295
|
+
- lib/htm/database.rb
|
|
296
|
+
- lib/htm/embedding_service.rb
|
|
297
|
+
- lib/htm/errors.rb
|
|
298
|
+
- lib/htm/job_adapter.rb
|
|
299
|
+
- lib/htm/jobs/generate_embedding_job.rb
|
|
300
|
+
- lib/htm/jobs/generate_tags_job.rb
|
|
301
|
+
- lib/htm/long_term_memory.rb
|
|
302
|
+
- lib/htm/models/node.rb
|
|
303
|
+
- lib/htm/models/node_tag.rb
|
|
304
|
+
- lib/htm/models/robot.rb
|
|
305
|
+
- lib/htm/models/tag.rb
|
|
306
|
+
- lib/htm/railtie.rb
|
|
307
|
+
- lib/htm/sinatra.rb
|
|
308
|
+
- lib/htm/tag_service.rb
|
|
309
|
+
- lib/htm/tasks.rb
|
|
310
|
+
- lib/htm/version.rb
|
|
311
|
+
- lib/htm/working_memory.rb
|
|
312
|
+
- lib/tasks/db.rake
|
|
313
|
+
- lib/tasks/htm.rake
|
|
314
|
+
- lib/tasks/jobs.rake
|
|
315
|
+
- mkdocs.yml
|
|
316
|
+
- scripts/install_local_database.sh
|
|
317
|
+
homepage: https://github.com/madbomber/htm
|
|
318
|
+
licenses:
|
|
319
|
+
- MIT
|
|
320
|
+
metadata:
|
|
321
|
+
homepage_uri: https://github.com/madbomber/htm
|
|
322
|
+
source_code_uri: https://github.com/madbomber/htm
|
|
323
|
+
changelog_uri: https://github.com/madbomber/htm/blob/main/CHANGELOG.md
|
|
324
|
+
rdoc_options: []
|
|
325
|
+
require_paths:
|
|
326
|
+
- lib
|
|
327
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
328
|
+
requirements:
|
|
329
|
+
- - ">="
|
|
330
|
+
- !ruby/object:Gem::Version
|
|
331
|
+
version: 3.0.0
|
|
332
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
333
|
+
requirements:
|
|
334
|
+
- - ">="
|
|
335
|
+
- !ruby/object:Gem::Version
|
|
336
|
+
version: '0'
|
|
337
|
+
requirements: []
|
|
338
|
+
rubygems_version: 3.7.2
|
|
339
|
+
specification_version: 4
|
|
340
|
+
summary: Hierarchical Temporary Memory for LLM robots
|
|
341
|
+
test_files: []
|