v1.2.3 - ABC
[v1.2.3] - ABC - 8/20/2026
v1.2.3 improves Neo4j-compatible Cypher behavior, Bolt transaction safety, retrieval quality tooling, local/remote reranking fixes, and Heimdall provider support.
Highlights
- LiteLLM is now available as a Heimdall chat provider.
- Added reproducible BEIR retrieval benchmarking with recorded SciFact results.
- Restored configurable local and remote reranking.
- Updated
llama.cpptob10411;LLAMA_LOAD_MODE_MMAPis supported. - Fixed several correlated Cypher aggregation, traversal, list, and subquery behaviors.
- Hardened Bolt explicit transaction lifecycle management.
Retrieval Benchmarks
Recorded SciFact results use the official 300 test qrels with bge-m3:latest at 1,024 dimensions.
| Retrieval profile | Recall@100 | nDCG@10 |
|---|---|---|
| BM25 V2 | 0.88422 | 0.59974 |
| Accurate HNSW, equal RRF weights | 0.93767 | 0.65534 |
| Exact CPU brute force, equal RRF weights | 0.94433 | 0.67932 |
Native BGE-M3 reranking was measured over the same 100 candidates:
| Profile | Recall@100 | nDCG@10 | MRR@10 | MAP@100 |
|---|---|---|---|---|
| Exact equal RRF, no reranker | 0.93563 | 0.67043 | 0.64404 | 0.63486 |
| Exact equal RRF with native BGE-M3 | 0.93563 | 0.72292 | 0.69447 | 0.69215 |
| Absolute change | 0.00000 | +0.05248 | +0.05042 | +0.05729 |
Reranking preserves Recall@100 because it reorders the same candidates, placing more relevant documents near the top.
These are configuration-specific measurements, not leaderboard claims.
Search and Reranking
- Hybrid retrieval now uses equal RRF weights across query lengths.
- Oversized Ollama embedding input is chunked through the shared chunker before provider evaluation.
- Local GGUF rerankers support rank pooling and classifier output dimensions.
- Query-document pairs use model templates or separator tokens.
- Non-scalar reranker outputs are rejected rather than treated as relevance scores.
- Pooling, attention, context, flash-attention, and provider settings remain configurable for local, Ollama, OpenAI, and HTTP rerankers.
Cypher Compatibility Fixes
WITH-attachedWHEREclauses now correctly evaluate label tests, label conjunctions, boolean combinations, function calls, and null predicates.- Correlated relationship matches now retain rows through
collect(DISTINCT ...). - List subscripts preserve node bindings through later
WITHprojections. - Relationship list properties now work correctly with
INpredicates. - Compound multi-hop patterns now use anchors bound by earlier
MATCHclauses. - Correlated
EXISTSandNOT EXISTSnow evaluate inner predicates using outer bindings. - Uncorrelated node-pattern
EXISTSsubqueries now evaluate correctly. - Empty Cypher deletes no longer perform unnecessary commit work.
Bolt Transaction Safety
Explicit Bolt transactions now enforce the client-configured lifetime and own a single cleanup attempt across every terminal path.
Key behavior:
- Per-connection executors are supplied by
NewWithDatabaseManageror aSessionExecutorFactory. - A directly supplied
TransactionalExecutorremains supported only withMaxConnections: 1. - Multi-connection servers reject
BEGINwhen given a shared raw executor. BEGINvalidatestx_timeoutas a PackStream long ornull.- Missing,
null, zero, and negative timeout values disable the client deadline, matching Neo4j 5.26 behavior. - Huge positive timeout values saturate instead of failing.
- Positive lifetimes begin after validated
BEGINreaches backend allocation. - Transaction expiry cancels active
RUNoperations and admitted deferred result flushes. - Expiry triggers one rollback after the operation releases transaction ownership, before responding.
- Cleanup uses an uncancelled five-second request context.
- Cleanup errors, panics, and uncertain commit outcomes close the connection rather than allowing unsafe reuse.
RESET,ROLLBACK,GOODBYE, and connection loss use the same exactly-once rollback arbitration.- Persistent Badger/WAL-backed transactions follow the same cleanup rules.
- Deferred
PULLandDISCARDflush errors requireRESET. - Pending result and flush state is discarded on terminal paths so only
CommitTransactionowns commit durability.
Heimdall
- Heimdall can now use LiteLLM as a chat provider.
- LiteLLM provider initialization and request handling incorporate review feedback.
- The Heimdall watcher once again acquires its pre-execution mutex.
Runtime Updates
llama.cppis updated tob10411.LLAMA_LOAD_MODE_MMAPconfigures model loading behavior.
What's Changed
- fix: enforce Bolt explicit transaction lifecycle by @linuxdynasty in #295
- feat: add LiteLLM as a Heimdall chat provider by @prodmanpd in #292
- fix(cypher): evaluate label tests and function calls in a WITH-attached WHERE by @linuxdynasty in #300
New Contributors
- @prodmanpd made their first contribution in #292
Full Changelog: v1.2.2...v1.2.3