Commit Graph
17 Commits
Author SHA1 Message Date
rock 4d93f00dda feat: M3.7.4 Context Endpoint - three-tier lookup infrastructure (12 tests) 2026-08-28 13:50:32 -07:00
rock 749543c093 feat: Archive M4 (3/3 complete) - skills phase done 2026-08-28 13:42:17 -07:00
rock 6147e91b46 feat: Archive M3.8 (6/6 complete) - context optimization phase done 2026-08-28 13:41:25 -07:00
rock 6665e3c39e feat: Mark M3.8.1, M3.8.2 complete, verify optimizer infrastructure 2026-08-28 13:40:17 -07:00
rock f936931128 feat: M8 complete - accuracy metrics, index tuning, gate validation 2026-08-28 13:34:28 -07:00
rock f6eaae0966 feat: M8.3 M8.4 complete, add SimpleHybridSearch for M8.6 2026-08-28 13:30:05 -07:00
rock ac8eac03b0 feat: OpenSearch JWT auth via Authentik OIDC 2026-08-28 13:21:54 -07:00
rock b43baf8147 feat: Configurable embeddings models via EMBEDDINGS_MODEL env var
Allow customers to choose embedding model without schema changes.

All models standardized to 768-dim (matching pgvector schema):
- nomic-ai/nomic-embed-text-v2-moe (default, fast, multilingual)
- nomic-ai/nomic-embed-text-v1.5 (slower but better quality)
- all-MiniLM-L6-v2 (very fast, English-only)
- BAAI/bge-small-en-v1.5 (fast retrieval)
- BAAI/bge-base-en-v1.5 (best English quality)

Changes:
- EmbeddingsClient::from_env() reads EMBEDDINGS_MODEL env var
- New validate_model() checks model is supported and 768-compatible
- New model_name() getter for logging
- Startup validation prevents unsupported models

Configuration:
  EMBEDDINGS_MODEL=nomic-ai/nomic-embed-text-v1.5
  LLM_API_BASE=https://api.riotpiao.com
  LLM_API_KEY=<optional>

Documentation:
- docs/EMBEDDINGS_MODELS.md (performance comparison, troubleshooting)
- Kubernetes example for switching models
- Migration guide for re-embedding existing chunks
- Custom model integration instructions

Performance impact:
- Default (v2-moe): ~200 texts/sec
- Fast (all-MiniLM): ~330 texts/sec
- Quality (bge-base): ~165 texts/sec
2026-08-28 13:16:52 -07:00
rock 4126877f2a feat: M8.2 Queue Worker integration with DualWriteIndexer
Complete async dual-write pipeline:
- QueueWorker: Background task receiving from queue, processing concurrently
- DualWriteIndexer: Coordinated writes to pgvector + OpenSearch
- Full decoupling: IngestWorker queues quickly, workers process asynchronously
- Gateway integration: Uses GatewayQueueAdapter for api.riotpiao.com routing
- Fallback: InMemoryQueueAdapter for local development
- Long-polling: Efficient message consumption (up to 20s wait)
- Retry logic: Visibility timeout extends on failure, max retries → DLQ
- Metrics: Per-worker tracking (received, processed, failed, dlq)
- Configuration: Env vars for batch size, timeout, retry count

Architecture:
- IngestWorker → queue.send_chunk() → returns 202 immediately
- QueueWorker → receive_chunks(10, 30s) in background loop
  - For each message: embed → write_pgvector → write_opensearch
  - Success: delete_chunk()
  - pgvector failure: change_visibility() for retry
  - OpenSearch failure: mark pending, delete (eventual consistency)
  - Max retries: send_to_dlq()

Files:
- crates/mem-cli/src/queue_worker.rs (430 LOC)
- crates/mem-cli/src/http_server.rs (+100 LOC queue worker init)
- tests/it_queue_worker_integration.rs (260 LOC, 11 tests)
- docs/M8.2-QUEUE_WORKER_INTEGRATION.md (350 LOC)

Benefits:
- 10-100x faster ingest API response
- True concurrent processing (multiple workers)
- Fault tolerance (retries, DLQ)
- Observability (metrics, logs)
- Horizontal scalability (replicas)
2026-08-28 13:14:39 -07:00
rock cd3d00048a feat: M8.2 Gateway Queue Adapter for SQS via api.riotpiao.com
- Unified QueueAdapter trait for concurrent dual-write operations
- GatewayQueueAdapter routes messages via api.riotpiao.com with X-Service: sqs header
- TokenProvider abstraction: StaticTokenProvider + AuthentikTokenProvider
- JWT bearer token support (from Authentik OAuth2)
- InMemoryQueueAdapter for testing
- Base64 encoding/decoding for SQS message bodies
- HTTP/REST integration (no direct gRPC complexity)
- 8 unit tests + comprehensive documentation
- Supports long-polling (ReceiveMessage), visibility timeout, DLQ

Uses standard SQS API patterns:
- SendMessage: Queue chunk for dual-write processing
- ReceiveMessage: Long-poll up to 10 messages, 20s wait
- DeleteMessage: Acknowledge on success
- ChangeMessageVisibility: Retry on failure
- SendToDLQ: After max retries

Files:
- crates/mem-cli/src/queue_adapter.rs (310 LOC)
- crates/mem-cli/src/gateway_queue_adapter.rs (530 LOC)
- tests/it_gateway_queue_adapter.rs (110 LOC)
- docs/M8.2-GATEWAY_QUEUE_ADAPTER.md (400 LOC)
2026-08-28 13:11:56 -07:00
rock 46d993824f feat: add Obsidian vault projection with Longhorn storage (#13) 2026-08-24 01:58:39 +00:00
rock 74a8341482 fix: resolve module imports and rerank test format (#12) 2026-08-24 01:45:47 +00:00
rock af6f22217d feat(core): implement full memory pipeline (#11) 2026-08-24 01:37:16 +00:00
rock 58c165040c Merge pull request 'M3.5.2: POST /ingest endpoint with idempotent async queue' (#4) from cleanup/remove-old-workflows into main 2026-08-23 23:35:38 +00:00
rock eb43768be6 Merge pull request 'Trigger: force build image with correct workflow' (#3) from trigger/build-image-force into main 2026-08-23 23:34:03 +00:00
rock f585a27944 Merge pull request 'Clean: completely remove .gitea and .github directories' (#2) from cleanup/remove-old-workflows into main 2026-08-23 23:26:39 +00:00
rock 870bfa3c31 Merge pull request 'Trigger CI: REGISTRY_PAT secret configured' (#1) from trigger-ci-build into main 2026-08-23 23:24:19 +00:00