fleet-memory/hindsight-docs/docs/developer
Nicolò Boschi 1caf5ec9ee
feat: add jina-mlx reranker provider for Apple Silicon (#542)
* feat: add JinaMLXCrossEncoder for native Apple Silicon reranking

Adds a new `jina-mlx` reranker provider backed by jinaai/jina-reranker-v3-mlx,
a 0.6B multilingual listwise reranker running via the MLX framework on Apple Silicon.
The model is downloaded automatically from HuggingFace Hub on first use.

Benchmarked latencies (Apple Silicon): 1 doc→32ms, 5→45ms, 10→60ms, 20→94ms.
Sub-linear scaling because all docs are ranked in a single forward pass.

- Embeds the MLX reranker implementation (_MLXReranker / _MLPProjector) directly
  in cross_encoder.py with no transformers/PyTorch dependency
- Adds `mlx`, `mlx-lm`, `safetensors` to pyproject.toml optional deps (uv add)
- Updates configuration.md with provider docs and benchmark table

* refactor: import MLXReranker from repo rerank.py instead of duplicating code

Use importlib to load MLXReranker directly from the model repo's own rerank.py
(downloaded via snapshot_download). Also pin exact minimum versions for
mlx>=0.31.0, mlx-lm>=0.31.1, safetensors>=0.6.2 (verified against installed versions).

* refactor: move MLX reranker impl to dedicated jina_mlx_reranker.py

Replaces the importlib hack with a proper module. jina_mlx_reranker.py is
adapted from jinaai/jina-reranker-v3-mlx/rerank.py (CC BY-NC 4.0) with the
source clearly documented at the top of the file.

* docs: simplify jina-mlx reranker docs

* fix: disable GIN fastupdate on source_memory_ids index to prevent deadlocks

GIN fastupdate buffers inserts in a pending list and flushes it with
AccessExclusiveLock when full. Under concurrent test load (8 xdist workers
all running retain_async), two workers can trigger a flush simultaneously
and deadlock. Recreating the index with fastupdate=off eliminates the
flush/lock cycle at the cost of slightly slower individual inserts.

* fix: drop per-bank HNSW indexes after transaction to avoid AccessExclusiveLock deadlock

When deleting a bank, the previous code dropped HNSW indexes inside the
same transaction as the DELETE FROM memory_units. Since DROP INDEX needs
AccessExclusiveLock on the parent table and DELETE holds RowExclusiveLock,
two concurrent bank deletions deadlocked on the same table lock.

Fix: capture internal_id inside the transaction, commit, then drop the
indexes outside the transaction so no row-level locks are held.
2026-03-11 15:15:58 +01:00
..
api feat: add manual retry for failed async operations (#537) 2026-03-10 17:16:11 +01:00
admin-cli.md Fix run-db-migration for all-tenant upgrades (#530) 2026-03-10 10:10:03 +01:00
configuration.md feat: add jina-mlx reranker provider for Apple Silicon (#542) 2026-03-11 15:15:58 +01:00
development.md rename to hindsight (#2) 2025-11-25 19:28:26 +01:00
extensions.md feat: add extension hooks for root routing and error headers (#470) 2026-03-03 10:50:03 +01:00
index.md fix: misc fixes for observations and mental models (#209) 2026-01-27 15:37:57 +01:00
installation.md doc: fix build 2026-02-25 16:58:06 +01:00
mcp-server.md feat: expand MCP tool surface area with 18 new tools and enhanced parameters (#435) 2026-02-25 10:26:46 +01:00
models.md doc: add ZeroEntropy reranker to models.md (#489) 2026-03-04 13:28:25 +01:00
monitoring.md feat: add otel traceability (#330) 2026-02-10 12:20:48 +01:00
multilingual.md chore: internal renames (#204) 2026-01-27 09:53:28 +01:00
observations.mdx feat: observation_scopes field to drive observations granularity (#447) 2026-02-28 10:46:21 +01:00
performance.md doc: changelog for 0.4.12 (#397) 2026-02-18 14:55:19 +01:00
rag-vs-hindsight.md doc: mental models (#199) 2026-01-26 14:27:08 +01:00
reflect.mdx feat: increase customization for reflect, retain and consolidation (#419) 2026-02-23 20:35:32 +01:00
retain.md docs: entities vs tags vs metadata (#466) 2026-03-02 14:47:40 +01:00
retrieval.md chore: internal renames (#204) 2026-01-27 09:53:28 +01:00
services.md doc: mental models (#199) 2026-01-26 14:27:08 +01:00
storage.md bump pg0 0.11.x and improve documentation (#33) 2025-12-16 13:33:01 +01:00