Back to .md Directory

HeadKey Memory System - Developer Cheat Sheet

Documents a memory API system for AI agents built on the CIBFE architecture, covering setup, configuration, and usage.

May 2, 2026
0 downloads
0 views
ai agent rag eval openai
View source

What this file does

Documents a memory API system for AI agents built on the CIBFE architecture, covering setup, configuration, and usage.

When to use it

  • You are onboarding to the HeadKey project
  • You need to configure or extend the memory system
  • You are troubleshooting embedding or database issues
  • You want to understand the project's architecture and interfaces

Assumes this stack

JavaQuarkusHibernateLangChain4JPostgreSQLH2

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

ModulePurposeStatus
IIMOrchestrates ingestion pipelineโœ… Complete
CCEContent categorization & taggingโœ… Complete
MESPersistent storage & retrievalโœ… Complete (JPA)
BRCABelief consistency managementโœ… Complete
REFAMemory lifecycle & forgettingโœ… Complete
RRESearch & response generationโœ… Complete

๐Ÿš€ Quick Start Commands

Development Setup

# 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

# 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

# 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

// 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

// 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

// 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)

# 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)

# 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

DatabaseStrategyVector SupportPerformance
PostgreSQLpostgresโœ… (pgvector)Excellent
H2textโŒGood (dev)
MySQLtextโŒGood
Autoautoโš ๏ธ (detected)Optimal

๐Ÿค– LangChain4J Integration

Configuration

# 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

// 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

# 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

# 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

// 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

@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

# 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

# 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

// Mock embedding generator
VectorEmbeddingGenerator mockGenerator = content -> new double[1536];

// Test memory system
MemoryEncodingSystem system = new JpaMemoryEncodingSystem(emf, mockGenerator);

Integration Testing

@QuarkusTest
class MemoryIntegrationTest {
    @Inject
    MemoryEncodingSystem memorySystem;

    @Test
    void testEndToEndIngestion() {
        // Test complete pipeline
    }
}

Performance Testing

// 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:

// 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

MethodAlgorithmThreshold RangeSemantic UnderstandingPerformance
Vector SearchCosine Similarity0.0 - 1.0โœ… HighExcellent
Text SearchJaccard Similarity0.0 - 1.0โŒ BasicGood

Strategy Implementations

// Text-based (H2, MySQL)
TextBasedJpaSimilaritySearchStrategy textStrategy = new TextBasedJpaSimilaritySearchStrategy();

// Vector-based (PostgreSQL)
PostgresJpaSimilaritySearchStrategy pgStrategy = new PostgresJpaSimilaritySearchStrategy();

// Auto-detection
JpaSimilaritySearchStrategy autoStrategy = JpaSimilaritySearchStrategyFactory.createStrategy(em);

Performance Characteristics

StrategyDatabaseVector SupportPerformance
DefaultJpaSimilaritySearchStrategyAnyBasicGood
TextBasedJpaSimilaritySearchStrategyH2/MySQLโŒFast
PostgresJpaSimilaritySearchStrategyPostgreSQLโœ…Excellent

๐Ÿ“Š Monitoring & Observability

Health Checks

# 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

# System statistics
curl http://localhost:8080/api/v1/system/statistics | jq
{
  "memorySystem": {
    "totalMemories": 1543,
    "totalOperations": 15430,
    "uptime": "2h 34m"
  }
}

Configuration Inspection

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)

# 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

# Check connection
curl http://localhost:8080/api/v1/system/health
# Look for database.healthy: false

Embedding Generation Errors

# Check API key
echo $OPENAI_API_KEY
# Enable debug logging
quarkus.log.category."ai.headkey.rest.service.LangChain4JVectorEmbeddingGenerator".level=DEBUG

Poor Search Performance

# Check strategy
curl http://localhost:8080/api/v1/system/config | jq .runtime.actualStrategy
# For PostgreSQL, ensure pgvector extension

Debug Configuration

# 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)

  • All 6 core module interfaces
  • In-memory implementations (testing)
  • JDBC implementations (alternative)
  • JPA implementations (primary)
  • REST API with Quarkus
  • LangChain4J integration
  • Similarity search strategies
  • JpaBeliefStorageService with vector embedding support
  • Comprehensive testing
  • Configuration management
  • Health monitoring
  • Performance optimization
  • 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. ๐Ÿง โœจ

What's inside

15 sections including architecture diagram, quick start commands, project structure, interfaces, database configs, REST endpoints, and troubleshooting guide

Change this for your project

  • Replace savantly-net/headkey-legacy-poc with your repository URL
  • Replace ai.headkey.memory.entities with your own package name
  • Replace OPENAI_API_KEY with your actual API key environment variable
  • Replace headkey.memory.strategy=auto with your chosen strategy

Where it goes

Keep it in your repository where the agent or team that needs it will read it.

Worth borrowing

  • Factory pattern for creating storage services with different backends
  • Strategy pattern for similarity search algorithms
  • Profile-based configuration for dev vs production environments

Related Documents