Skip to content

v1.2.3 - ABC

Choose a tag to compare

@orneryd orneryd released this 20 Aug 16:41
· 63 commits to main since this release

[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.cpp to b10411; LLAMA_LOAD_MODE_MMAP is 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-attached WHERE clauses 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 WITH projections.
  • Relationship list properties now work correctly with IN predicates.
  • Compound multi-hop patterns now use anchors bound by earlier MATCH clauses.
  • Correlated EXISTS and NOT EXISTS now evaluate inner predicates using outer bindings.
  • Uncorrelated node-pattern EXISTS subqueries 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 NewWithDatabaseManager or a SessionExecutorFactory.
  • A directly supplied TransactionalExecutor remains supported only with MaxConnections: 1.
  • Multi-connection servers reject BEGIN when given a shared raw executor.
  • BEGIN validates tx_timeout as a PackStream long or null.
  • 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 BEGIN reaches backend allocation.
  • Transaction expiry cancels active RUN operations 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 PULL and DISCARD flush errors require RESET.
  • Pending result and flush state is discarded on terminal paths so only CommitTransaction owns 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.cpp is updated to b10411.
  • LLAMA_LOAD_MODE_MMAP configures 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

Full Changelog: v1.2.2...v1.2.3