@gsep/adapters-storage-postgres
v0.8.0
Published
PostgreSQL storage adapter for GSEP
Readme
@gsep/adapters-storage-postgres
PostgreSQL storage adapter for GSEP (Genomic Self-Evolving Prompts)
Installation
npm install @gsep/core @gsep/adapters-storage-postgresUsage
import { PGA } from '@gsep/core';
import { ClaudeAdapter } from '@gsep/adapters-llm-anthropic';
import { PostgresAdapter } from '@gsep/adapters-storage-postgres';
const pga = new PGA({
llm: new ClaudeAdapter({
apiKey: process.env.ANTHROPIC_API_KEY,
}),
storage: new PostgresAdapter({
connectionString: process.env.DATABASE_URL,
autoInitialize: true, // Creates tables automatically
}),
});
await pga.initialize();
const genome = await pga.createGenome({ name: 'my-assistant' });
const response = await genome.chat('Hello!', { userId: 'user123' });
console.log(response);Configuration
PostgresAdapter(config)
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| connectionString | string | required | PostgreSQL connection string |
| maxConnections | number | 20 | Maximum pool size |
| autoInitialize | boolean | true | Auto-create database schema |
Connection String Format
postgresql://user:password@host:port/databaseExample:
postgresql://postgres:secret@localhost:5432/pgaDatabase Schema
The adapter automatically creates the following tables:
pga_genomes- Genome metadatapga_alleles- Gene alleles (Layer 0, 1, 2)pga_user_dna- User cognitive profilespga_interactions- Interaction logspga_mutations- Mutation historypga_feedback- User feedback signalspga_analytics- Pre-aggregated stats
See sql/schema.sql for full schema.
Manual Schema Setup
If you prefer to manage migrations yourself:
const adapter = new PostgresAdapter({
connectionString: process.env.DATABASE_URL,
autoInitialize: false, // Don't auto-create tables
});
// Run your own migrations
await runMigrations();
// Then initialize GSEP (will skip schema creation)
await pga.initialize();Performance
Connection Pooling
The adapter uses pg connection pooling by default:
const adapter = new PostgresAdapter({
connectionString: process.env.DATABASE_URL,
maxConnections: 50, // Increase for high load
});Indexes
All critical queries are indexed:
- Genome lookups:
pga_genomes(id) - Allele selection:
pga_alleles(genome_id, layer, gene, status) - User DNA:
pga_user_dna(user_id, genome_id) - Analytics queries: All have composite indexes
Production Checklist
✅ Use connection pooling (maxConnections: 20+)
✅ Enable SSL for remote databases
✅ Set up database backups
✅ Monitor connection pool usage
✅ Use read replicas for analytics queries
✅ Consider partitioning pga_interactions table for high volume
Troubleshooting
"relation does not exist" error
// Ensure autoInitialize is true
const adapter = new PostgresAdapter({
connectionString: process.env.DATABASE_URL,
autoInitialize: true, // ← This creates tables
});
await pga.initialize();Connection timeout
// Increase max connections
const adapter = new PostgresAdapter({
connectionString: process.env.DATABASE_URL,
maxConnections: 50, // Default is 20
});SSL connection required
postgresql://user:pass@host:5432/db?sslmode=requireLicense
MIT © Luis Alfredo Velasquez Duran
