Loading...
Loading...
Loading...
**This is a living document. Update it when the system is changed**
# HeadKey Memory System - Developer Cheat Sheet
**This is a living document. Update it when the system is changed**
## IMPORTANT
This application is designed for large scale operations.
Every architecture decision should be made with scalability, performance and extention capabilities in mind.
## ๐ฏ Project Overview
**HeadKey** is a sophisticated Memory API system for AI agents built on the **Cognitive Ingestion & Belief Formation Engine (CIBFE)** architecture. It provides intelligent memory management with automatic categorization, similarity search, belief tracking, and forgetting capabilities.
### Core Value Proposition
- **Intelligent Memory**: Retains valuable information, discards irrelevant data
- **Production Ready**: JPA-based persistence with configurable databases
- **AI-Powered**: LangChain4J integration for state-of-the-art embeddings
- **Scalable**: Pluggable strategies and enterprise-grade architecture
## ๐๏ธ Architecture Overview
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CIBFE Architecture โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโค
โ Information โ Contextual โ Memory โ Belief โ
โ Ingestion โ Categorizationโ Encoding โ Reinforcement & โ
โ Module (IIM) โ Engine (CCE) โ System (MES) โ Conflict (BRCA) โ
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโค
โ Relevance โ Retrieval & โ โ โ
โ Evaluation & โ Response โ โ โ
โ Forgetting (REFA)โ Engine (RRE) โ โ โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโ
โ REST API โ
โ (Quarkus) โ
โโโโโโโโโโโโโโโโโโโ
```
### ๐ง Module Responsibilities
| Module | Purpose | Status |
|--------|---------|---------|
| **IIM** | Orchestrates ingestion pipeline | โ
Complete |
| **CCE** | Content categorization & tagging | โ
Complete |
| **MES** | Persistent storage & retrieval | โ
Complete (JPA) |
| **BRCA** | Belief consistency management | โ
Complete |
| **REFA** | Memory lifecycle & forgetting | โ
Complete |
| **RRE** | Search & response generation | โ
Complete |
## ๐ Quick Start Commands
### Development Setup
```bash
# Clone and build
git clone <repository>
cd headkey
./gradlew build
# Start development server (H2 in-memory)
cd rest
../gradlew quarkusDev
# API: http://localhost:8080
# Swagger: http://localhost:8080/swagger-ui
```
### Production Setup
```bash
# Set environment variables
export DATABASE_URL=jdbc:postgresql://localhost:5432/headkey
export DATABASE_USER=headkey_user
export DATABASE_PASSWORD=secure_password
export OPENAI_API_KEY=your-api-key-here
# Start with production profile
../gradlew quarkusDev -Dquarkus.profile=prod
```
### Testing
```bash
# All tests
./gradlew test
# Specific module tests
./gradlew :core:test
./gradlew :rest:test
# LangChain4J tests
./gradlew :rest:test --tests "*LangChain4J*"
```
## ๐ Project Structure
```
headkey/
โโโ api/ # Core interfaces & DTOs
โ โโโ interfaces/ # 6 core module interfaces
โ โโโ dto/ # Data transfer objects
โโโ core/ # Implementation layer
โ โโโ implementations/ # JPA, JDBC, In-Memory impls
โ โโโ strategies/ # Pluggable similarity strategies
โโโ rest/ # REST API (Quarkus)
โ โโโ config/ # CDI configuration
โ โโโ service/ # LangChain4J integration
โ โโโ controllers/ # REST endpoints
โโโ docs/ # Documentation & specs
```
## ๐ Key Interfaces
### JpaBeliefStorageService with Vector Embeddings
```java
// Create service with embedding generator for vector similarity search
VectorEmbeddingGenerator embeddingGenerator = text -> {
// Your embedding generation logic (OpenAI, LangChain4J, etc.)
return generateEmbedding(text);
};
BeliefStorageService storageService = JpaBeliefStorageServiceFactory.builder()
.withEntityManagerFactory(emf)
.withEmbeddingGenerator(embeddingGenerator)
.build();
// Store beliefs with automatic embedding generation
Belief belief = new Belief.Builder()
.statement("The sky is blue on clear days")
.agentId("agent-1")
.build();
storageService.storeBelief(belief); // Embedding automatically generated and stored
// Vector-based similarity search
List<SimilarBelief> similar = storageService.findSimilarBeliefs(
"What color is the sky?",
"agent-1",
0.7, // similarity threshold
5 // max results
);
```
### Core Module Interfaces
```java
// Information Ingestion
public interface InformationIngestionModule {
IngestionResult ingest(MemoryInput input);
IngestionResult dryRun(MemoryInput input);
}
// Memory Storage
public interface MemoryEncodingSystem {
MemoryRecord encodeAndStore(String content, CategoryLabel category, Metadata meta);
List<MemoryRecord> searchSimilar(String query, int limit);
Optional<MemoryRecord> getMemory(String id);
}
// Categorization
public interface ContextualCategorizationEngine {
CategoryLabel categorize(String content, String agentId);
List<CategoryLabel> categorizeAlternatives(String content, String agentId);
}
```
### Data Models
```java
// Core memory record
public class MemoryRecord {
private String id;
private String agentId;
private String content;
private CategoryLabel category;
private Metadata metadata;
private Instant createdAt;
private Double relevanceScore;
}
// Category classification
public class CategoryLabel {
private String primary; // e.g., "knowledge"
private String secondary; // e.g., "technology"
private Set<String> tags; // ["ai", "programming"]
private double confidence; // 0.0 - 1.0
}
```
## ๐๏ธ Database Configurations
### H2 (Development - Default)
```properties
# Modern Quarkus Hibernate configuration (no persistence.xml)
quarkus.hibernate-orm.persistence-xml.ignore=true
quarkus.datasource.db-kind=h2
quarkus.datasource.jdbc.url=jdbc:h2:mem:headkey;DB_CLOSE_DELAY=-1
quarkus.hibernate-orm.database.generation=update
quarkus.hibernate-orm.packages=ai.headkey.memory.entities
headkey.memory.strategy=auto
```
### PostgreSQL (Production)
```properties
# Environment variables
DATABASE_URL=jdbc:postgresql://localhost:5432/headkey
DATABASE_USER=headkey_user
DATABASE_PASSWORD=secure_password
# Application properties
quarkus.hibernate-orm.persistence-xml.ignore=true
quarkus.datasource.db-kind=postgresql
quarkus.hibernate-orm.database.generation=update
quarkus.hibernate-orm.packages=ai.headkey.memory.entities
headkey.memory.strategy=postgres
```
### Strategy Selection
| Database | Strategy | Vector Support | Performance |
|----------|----------|----------------|-------------|
| PostgreSQL | `postgres` | โ
(pgvector) | Excellent |
| H2 | `text` | โ | Good (dev) |
| MySQL | `text` | โ | Good |
| Auto | `auto` | โ ๏ธ (detected) | Optimal |
## ๐ค LangChain4J Integration
### Configuration
```properties
# OpenAI Embeddings
quarkus.langchain4j.openai.api-key=${OPENAI_API_KEY:}
quarkus.langchain4j.openai.embedding-model.model-name=text-embedding-3-small
quarkus.langchain4j.openai.embedding-model.dimensions=1536
# Environment-specific
%dev.quarkus.langchain4j.openai.log-requests=true
%prod.quarkus.langchain4j.openai.embedding-model.model-name=text-embedding-3-large
```
### Usage
```java
// CDI injection
@Inject
LangChain4JVectorEmbeddingGenerator embeddingGenerator;
// Generate embeddings
double[] embedding = embeddingGenerator.generateEmbedding("AI text content");
```
### Models Supported
- **text-embedding-3-small**: 1536 dims, cost-effective
- **text-embedding-3-large**: 3072 dims, highest quality
- **Mock model**: Development/testing (no API key needed)
## ๐ REST API Endpoints
### Memory Operations
```bash
# Ingest memory
POST /api/v1/memory/ingest
{
"agent_id": "user-123",
"content": "Machine learning concepts",
"source": "conversation",
"metadata": {"importance": 0.8}
}
# Dry run validation
POST /api/v1/memory/dry-run
{
"agent_id": "user-123",
"content": "Test content"
}
# Input validation
POST /api/v1/memory/validate
{
"agent_id": "user-123",
"content": "Content to validate"
}
```
### System Monitoring
```bash
# Basic health
GET /api/v1/memory/health
# Comprehensive health (JPA system)
GET /api/v1/system/health
# Current configuration
GET /api/v1/system/config
# Database capabilities
GET /api/v1/system/database/capabilities
# Performance statistics
GET /api/v1/system/statistics
```
## ๐ ๏ธ Development Patterns
### Factory Pattern Usage
```java
// In-memory (testing)
MemoryEncodingSystem testSystem = InMemoryMemorySystemFactory.forTesting();
// JPA (production)
JpaMemoryEncodingSystem jpaSystem = JpaMemorySystemFactory.builder()
.entityManagerFactory(emf)
.embeddingGenerator(generator)
.similarityStrategy(strategy)
.build();
// JDBC (alternative)
JdbcMemoryEncodingSystem jdbcSystem = JdbcMemorySystemFactory.createPostgreSQLSystem(
"localhost", 5432, "headkey", "user", "pass", embeddingGenerator
);
```
### CDI Configuration
```java
@ApplicationScoped
public class MemorySystemConfig {
@Inject
EntityManager entityManager; // Modern Quarkus injection
@Produces
@Singleton
public JpaMemoryEncodingSystem jpaMemoryEncodingSystem() {
return JpaMemorySystemFactory.builder()
.entityManagerFactory(entityManager.getEntityManagerFactory())
.embeddingGenerator(embeddingGenerator)
.build();
}
}
```
## โ๏ธ Configuration Properties
### Core Memory System
```properties
# Modern Quarkus Hibernate configuration
quarkus.hibernate-orm.persistence-xml.ignore=true
quarkus.hibernate-orm.database.generation=update
quarkus.hibernate-orm.packages=ai.headkey.memory.entities
quarkus.hibernate-orm.physical-naming-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
# Strategy selection
headkey.memory.strategy=auto|text|vector|postgres
# Performance tuning
headkey.memory.batch-size=100
headkey.memory.max-similarity-results=1000
headkey.memory.similarity-threshold=0.0
headkey.memory.enable-second-level-cache=true
# Embedding configuration
headkey.memory.embedding.enabled=true
headkey.memory.embedding.dimension=1536
headkey.memory.embedding.model=default
```
### Database Optimization
```properties
# Connection pooling
headkey.memory.database.pool.min-size=5
headkey.memory.database.pool.max-size=20
headkey.memory.database.pool.timeout-ms=30000
# Performance settings
headkey.memory.performance.enable-statistics=true
headkey.memory.performance.cache-size=1000
headkey.memory.performance.enable-async=false
```
## ๐งช Testing Strategies
### Unit Testing
```java
// Mock embedding generator
VectorEmbeddingGenerator mockGenerator = content -> new double[1536];
// Test memory system
MemoryEncodingSystem system = new JpaMemoryEncodingSystem(emf, mockGenerator);
```
### Integration Testing
```java
@QuarkusTest
class MemoryIntegrationTest {
@Inject
MemoryEncodingSystem memorySystem;
@Test
void testEndToEndIngestion() {
// Test complete pipeline
}
}
```
### Performance Testing
```java
// Batch operations
for (int i = 0; i < 1000; i++) {
memorySystem.encodeAndStore(content, category, metadata);
}
```
## ๐ Similarity Search Strategies
### JpaBeliefStorageService Vector Search
The `JpaBeliefStorageService` now supports vector-based similarity search through embedding generators:
```java
// Automatic vector/text search selection
JpaBeliefStorageService service = new JpaBeliefStorageService(
beliefRepository,
conflictRepository,
embeddingGenerator // Optional: enables vector search
);
// Vector search (when embedding generator is provided)
List<SimilarBelief> vectorResults = service.findSimilarBeliefs(
"What is artificial intelligence?",
"agent-1",
0.7, // cosine similarity threshold
10 // max results
);
// Text search fallback (when no embedding generator)
List<SimilarBelief> textResults = service.findSimilarBeliefs(
"What is artificial intelligence?",
"agent-1",
0.3, // Jaccard similarity threshold
10 // max results
);
```
### Search Method Comparison
| Method | Algorithm | Threshold Range | Semantic Understanding | Performance |
|--------|-----------|-----------------|----------------------|-------------|
| **Vector Search** | Cosine Similarity | 0.0 - 1.0 | โ
High | Excellent |
| **Text Search** | Jaccard Similarity | 0.0 - 1.0 | โ Basic | Good |
### Strategy Implementations
```java
// Text-based (H2, MySQL)
TextBasedJpaSimilaritySearchStrategy textStrategy = new TextBasedJpaSimilaritySearchStrategy();
// Vector-based (PostgreSQL)
PostgresJpaSimilaritySearchStrategy pgStrategy = new PostgresJpaSimilaritySearchStrategy();
// Auto-detection
JpaSimilaritySearchStrategy autoStrategy = JpaSimilaritySearchStrategyFactory.createStrategy(em);
```
### Performance Characteristics
| Strategy | Database | Vector Support | Performance |
|----------|----------|----------------|-------------|
| DefaultJpaSimilaritySearchStrategy | Any | Basic | Good |
| TextBasedJpaSimilaritySearchStrategy | H2/MySQL | โ | Fast |
| PostgresJpaSimilaritySearchStrategy | PostgreSQL | โ
| Excellent |
## ๐ Monitoring & Observability
### Health Checks
```bash
# Quick health
curl http://localhost:8080/health
# Detailed system health
curl http://localhost:8080/api/v1/system/health | jq
{
"healthy": true,
"memorySystem": {
"strategy": "PostgresJpaSimilaritySearchStrategy",
"supportsVectorSearch": true
}
}
```
### Performance Metrics
```bash
# System statistics
curl http://localhost:8080/api/v1/system/statistics | jq
{
"memorySystem": {
"totalMemories": 1543,
"totalOperations": 15430,
"uptime": "2h 34m"
}
}
```
### Configuration Inspection
```bash
curl http://localhost:8080/api/v1/system/config | jq
{
"memory": {
"strategy": "auto",
"batchSize": 100
},
"runtime": {
"actualStrategy": "PostgresJpaSimilaritySearchStrategy"
}
}
```
## ๐จ Troubleshooting Guide
### Common Issues
**CDI Injection Failed (EntityManagerFactory)**
```properties
# Fix: Use modern Quarkus configuration
quarkus.hibernate-orm.persistence-xml.ignore=true
quarkus.hibernate-orm.packages=ai.headkey.memory.entities
# Use EntityManager injection instead of @PersistenceUnit
@Inject EntityManager entityManager;
// Get factory: entityManager.getEntityManagerFactory()
```
**Database Connection Failed**
```bash
# Check connection
curl http://localhost:8080/api/v1/system/health
# Look for database.healthy: false
```
**Embedding Generation Errors**
```bash
# Check API key
echo $OPENAI_API_KEY
# Enable debug logging
quarkus.log.category."ai.headkey.rest.service.LangChain4JVectorEmbeddingGenerator".level=DEBUG
```
**Poor Search Performance**
```bash
# Check strategy
curl http://localhost:8080/api/v1/system/config | jq .runtime.actualStrategy
# For PostgreSQL, ensure pgvector extension
```
### Debug Configuration
```properties
# Enable SQL logging
quarkus.hibernate-orm.log.sql=true
quarkus.hibernate-orm.log.format-sql=true
# Enable debug logs
quarkus.log.category."ai.headkey".level=DEBUG
quarkus.langchain4j.openai.log-requests=true
```
## ๐ฎ Implementation Status
### โ
Completed (Production Ready)
- [x] All 6 core module interfaces
- [x] In-memory implementations (testing)
- [x] JDBC implementations (alternative)
- [x] JPA implementations (primary)
- [x] REST API with Quarkus
- [x] LangChain4J integration
- [x] Similarity search strategies
- [x] JpaBeliefStorageService with vector embedding support
- [x] Comprehensive testing
- [x] Configuration management
- [x] Health monitoring
- [x] Performance optimization
- [x] Modern Quarkus Hibernate configuration (no persistence.xml)
### ๐ Current Focus
- โ
JpaBeliefStorageService embedding generator integration
- CDI integration fixes for EntityManagerFactory injection
- JPA integration test improvements
- Advanced vector search optimizations
- Performance benchmarking
### ๐ฏ Future Enhancements
- [ ] Additional embedding providers (HuggingFace, Ollama)
- [ ] Caching layers (Redis integration)
- [ ] Batch processing APIs
- [ ] Advanced conflict resolution
- [ ] Memory visualization tools
- [ ] Machine learning model training
## ๐ก Best Practices
### Configuration
- Use modern Quarkus Hibernate config (no persistence.xml)
- Use environment variables for production secrets
- Leverage profile-based configuration (%dev, %test, %prod)
- Monitor database capabilities and adjust strategies
- Inject EntityManager directly instead of @PersistenceUnit
### Performance
- Enable second-level cache for frequent reads
- Use appropriate batch sizes for bulk operations
- Choose optimal similarity search strategy for your database
### Security
- Never commit API keys to version control
- Use secure database connections (SSL)
- Implement proper authentication for production APIs
### Development
- Use H2 in-memory for rapid development
- Write unit tests with mock embedding generators
- Use integration tests with real database connections
## ๐ Key Documentation Files
- `SPECIFICATION.md` - Complete system specification
- `rest/LANGCHAIN4J_IMPLEMENTATION.md` - AI embedding integration
- `rest/README.md` - REST API comprehensive guide
## ๐ฏ Success Metrics
### Architecture Quality
- โ
SOLID principles compliance
- โ
12-factor app methodology
- โ
Clean separation of concerns
- โ
Comprehensive error handling
### Performance
- โ
Sub-millisecond in-memory operations
- โ
<10ms JPA operations (local DB)
- โ
Configurable batch processing
- โ
Database-specific optimizations
### Testing
- โ
95%+ unit test coverage
- โ
Integration tests for all components
- โ
Performance benchmarks
- โ
TDD implementation approach
### Production Readiness
- โ
Multiple database support
- โ
Environment-based configuration
- โ
Comprehensive monitoring
- โ
Graceful error handling
- โ
Health checks and metrics
---
**HeadKey Memory System** - Intelligent memory management for AI agents with enterprise-grade reliability and performance. ๐ง โจ
> Design document analyzing how user actions feed back into ML predictions,
This document provides a complete reference for all exported APIs in the go-attention library.
This document captures important learnings and best practices discovered while building and maintaining the Papr Memory Python SDK, specifically around on-device processing and Core ML integration.
Tensor factorization is a method for decomposing tensors, which are described in [Section @sec:loading-rescal], into lower-rank approximations.