2026-09-05 00:31:28 -07:00
|
|
|
# Poimen Memory System
|
2026-08-19 09:52:07 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
Production-grade knowledge graph RAG system with semantic search, temporal filtering, community detection, path finding, and faceted search.
|
2026-09-02 11:51:15 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
## Quick Start
|
2026-08-19 09:52:07 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
```bash
|
|
|
|
|
# Build
|
|
|
|
|
cargo build --release
|
2026-08-19 09:52:07 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
# Run
|
|
|
|
|
cargo run --release -- --config config/default.toml
|
|
|
|
|
```
|
2026-08-19 09:52:07 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
## API Documentation
|
|
|
|
|
|
|
|
|
|
See [`API.md`](./API.md) for complete endpoint specifications, request/response formats, and usage examples.
|
|
|
|
|
|
|
|
|
|
### Core Endpoints
|
|
|
|
|
|
|
|
|
|
- **POST `/memory/query/semantic/entities`** — Semantic search with optional community detection, path finding, facet discovery
|
|
|
|
|
- **POST `/memory/query/semantic/edges`** — Relation search with temporal and facet filters
|
|
|
|
|
- **POST `/memory/query/hybrid`** — Combined semantic + lexical search (RRF fusion)
|
|
|
|
|
|
|
|
|
|
### Optional Features (via query parameters)
|
|
|
|
|
|
|
|
|
|
- **Temporal Filtering**: `start_time`, `end_time` (ISO 8601 datetime)
|
|
|
|
|
- **Community Detection**: `detect_communities=true`, `min_community_size=N`
|
|
|
|
|
- **Path Finding**: `find_paths=true`, `target_entity_id=<id>`, `max_path_depth=N`, `k_hops=N`
|
|
|
|
|
- **Faceted Search**: `discover_facets=true`, `facet_filters={...}`
|
2026-09-02 11:30:11 -07:00
|
|
|
|
|
|
|
|
## Architecture
|
2026-08-19 09:52:07 -07:00
|
|
|
|
|
|
|
|
```
|
2026-09-05 00:31:28 -07:00
|
|
|
crates/mem-cli/src/
|
|
|
|
|
├── query/
|
|
|
|
|
│ ├── semantic_retriever.rs (vector + lexical search)
|
|
|
|
|
│ ├── community_detector.rs (Louvain algorithm)
|
|
|
|
|
│ ├── path_finder.rs (BFS/DFS graph traversal)
|
|
|
|
|
│ └── faceted_search.rs (multi-dimension filtering)
|
|
|
|
|
├── handlers/
|
|
|
|
|
│ └── semantic.rs (HTTP endpoints)
|
|
|
|
|
└── http_server.rs (Actix-web server)
|
|
|
|
|
|
|
|
|
|
crates/mem-core/src/
|
|
|
|
|
├── domain.rs (data structures)
|
|
|
|
|
├── entity.rs, edge.rs (graph entities)
|
|
|
|
|
└── scoring.rs (relevance metrics)
|
|
|
|
|
|
|
|
|
|
crates/mem-store/src/
|
|
|
|
|
└── *_repo.rs (database persistence)
|
2026-08-19 09:52:07 -07:00
|
|
|
```
|
|
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
## Testing
|
2026-09-02 11:30:11 -07:00
|
|
|
|
|
|
|
|
```bash
|
2026-09-05 00:31:28 -07:00
|
|
|
# Run all tests
|
|
|
|
|
cargo test --lib
|
2026-09-02 11:30:11 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
# Run specific test suite
|
|
|
|
|
cargo test --lib query::semantic
|
|
|
|
|
cargo test --lib handlers::semantic
|
2026-08-19 09:52:07 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
# With output
|
|
|
|
|
cargo test --lib -- --nocapture
|
2026-09-02 11:30:11 -07:00
|
|
|
```
|
2026-08-28 12:32:08 -07:00
|
|
|
|
2026-09-02 11:30:11 -07:00
|
|
|
## Configuration
|
2026-08-28 12:32:08 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
See `config/default.toml` for:
|
|
|
|
|
- Database connection strings
|
|
|
|
|
- JWT authentication settings
|
|
|
|
|
- Rate limiting thresholds
|
|
|
|
|
- Embeddings model configuration
|
2026-08-28 12:32:08 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
## Production Deployment
|
2026-08-19 09:52:07 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
1. Build release binary: `cargo build --release`
|
|
|
|
|
2. Set environment: `JWT_SECRET`, `DATABASE_URL`, `OPENAI_API_KEY`
|
|
|
|
|
3. Run: `./target/release/mem-cli`
|
|
|
|
|
4. Health check: `GET http://localhost:8080/health`
|
2026-08-19 09:52:07 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
## Development
|
2026-08-19 09:52:07 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
**Quality Standards**:
|
|
|
|
|
- CRAP score < 3.2 (low complexity)
|
|
|
|
|
- DRY > 98% (minimal duplication)
|
|
|
|
|
- SOLID 5.0/5 (excellent design)
|
|
|
|
|
- 230+ comprehensive tests (100% pass rate)
|
|
|
|
|
- Performance: P50 latency < 500ms
|
2026-08-19 09:52:07 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
**Adding New Features**:
|
2026-09-02 11:30:11 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
1. Create core module in `crates/mem-cli/src/query/`
|
|
|
|
|
2. Add optional parameters to request struct
|
|
|
|
|
3. Extend response with optional field (use `skip_serializing_if`)
|
|
|
|
|
4. Add handler logic (delegate to core module)
|
|
|
|
|
5. Write 25-35 tests (unit + integration)
|
|
|
|
|
6. Document in API.md
|
2026-09-02 11:30:11 -07:00
|
|
|
|
2026-09-05 00:31:28 -07:00
|
|
|
See `CLAUDE.md` for project context and constraints.
|