Skip to content

YantrikDB

v0.7.5 Feature

This release adds 2 notable features for engineering teams evaluating rollout.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

agent-memory ai-agents anthropic claude-code cognitive-memory database
+12 more
embeddings hnsw knowledge-graph llm llm-memory mcp memory persistent-memory python rust semantic-memory vector-db

Affected surfaces

auth rce_ssrf

Summary

AI summary

Fixed a TypeError when setting an invalid embedder and exposed larger embedding models in the default wheel.

Full changelog

Two UX hotfixes coordinated with yantrikdb-hermes-agent v0.2 plugin work (swarm msg c8734310 → response cb79ae1b). Both Python-side, no engine code changed.

1. set_embedder hostile-input guard

Pre-v0.7.5, calling db.set_embedder('any-string') accepted the string silently, then exploded at first record_text() call with:

LookupError: unknown encoding: <text>

…because Python strings have a .encode(charset) method that interprets the argument as a charset name. Took an evening of debugging on the Hermes plugin side to track this trap (reported in msg c8734310).

Fix. set_embedder now probes the embedder at set time with a sentinel string and raises TypeError immediately if .encode() doesn't return a numeric vector:

>>> db.set_embedder('not-an-embedder')
TypeError: embedder.encode(text) must return list[float] or numpy.ndarray;
got non-numeric. Common cause: passing a str (str.encode is a charset codec,
not an embedder).

Costs one extra encode() call up front. Worth it for a localized, actionable error.

2. set_embedder_named exposed in the default wheel

The embedder-download Cargo feature has been in the engine since v0.7.2 but the Python crate's defaults didn't pull it through — so the PyPI wheel could only use the bundled potion-base-2M (dim=64). Power users wanting the larger variants had to build from source.

Now the default pip install yantrikdb wheel ships with embedder-download ON:

db = YantrikDB.with_default("./mem.db")    # bundled potion-2M, dim=64, 8MB
db.record_text("Alice loves Rust", "semantic")

Or for the larger variants (downloads on first call from yantrikos/yantrikdb-models, SHA-256 verified, cached under dirs::cache_dir() / yantrikdb / models /):

# 28MB tarball, dim=256, ~92% MiniLM MTEB:
db = YantrikDB("./mem.db", embedding_dim=256)
db.set_embedder_named("potion-base-8M")

# 121MB tarball, dim=512, ~95% MiniLM MTEB:
db = YantrikDB("./mem.db", embedding_dim=512)
db.set_embedder_named("potion-base-32M")

Wheel size impact: ~0.5-1 MB extra for ureq + sha2 + dirs + tar + flate2 — all pure-Rust, no native-extension compile time.

Slim builds (--no-default-features) keep the method on the class but raise a clear actionable RuntimeError if called — better than AttributeError, which would have implied a typo.

Tests

1421 library tests pass. Both feature configs (default + --no-default-features) compile cleanly. NO engine code changed.

🤖 Generated with Claude Code

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track YantrikDB

Get notified when new releases ship.

Sign up free

About YantrikDB

All releases →

Related context

Earlier breaking changes

  • v0.7.20 `correct()` now mutates in place, preserving rid and adding revision history (BREAKING CHANGE).
  • v0.7.9 Pure-additive; existing engines keep English models on v0.1.0.

Beta — feedback welcome: [email protected]