Skip to content

Releases: hivellm/vectorizer

v3.0.0

21 Apr 12:09

Choose a tag to compare

Removed

  • Standalone JavaScript SDK dropped (sdks/javascript/). The TypeScript SDK ships compiled CommonJS + ESM and is fully usable from plain JavaScript, so maintaining a parallel JS-only package doubled CI/release work for no functional difference. The published @hivehub/vectorizer-sdk-js package on npm remains installable; no new releases will ship. Migrate by replacing @hivehub/vectorizer-sdk-js with @hivehub/vectorizer-sdk — the runtime API and import paths are identical. Removed: 60 source files, the .github/workflows/sdk-javascript-test.yml CI workflow, and docs/users/sdks/JAVASCRIPT.md. The pending rulebook tasks phase4_split-sdk-javascript-client and phase6_sdk-javascript-rpc were deleted as obsolete. The GUI's package.json was bumped from @hivellm/vectorizer-sdk@^1.1.2 to @hivehub/vectorizer-sdk@^3.0.0 (run pnpm install in gui/ to refresh the lockfile).
  • TypeScript SDK is on @hivehub, not @hivellm. The published package has been at @hivehub/vectorizer-sdk for some time; this release corrects all stale doc references — docs/users/{getting-started,sdks,collections,vectors,guides,api}/*.md, sdks/README.md, sdks/PUBLISHING_STATUS.md, sdks/PUBLISHING.md, sdks/COVERAGE_REPORT.md, root README.md — and the GUI dependency. Historical patch notes (docs/patches/v*.md) keep the old @hivellm/vectorizer-sdk strings as a point-in-time record.
  • Framework integration packages dropped from the repo. sdks/langchain/, sdks/langchain-js/, sdks/langflow/, sdks/n8n/, sdks/tensorflow/, and sdks/pytorch/ were thin adapters around the language-native SDKs and added maintenance burden out of proportion to their usage. Their published versions remain installable from PyPI / npm but no new releases will ship; integrate against the corresponding SDK directly (Python, TypeScript, JavaScript, Rust, Go, C#). Removed: 38 source files plus the two docs/users/guides/N8N_INTEGRATION.md / LANGFLOW_INTEGRATION.md user guides. Cross-referencing READMEs (README.md, sdks/README.md, sdks/PUBLISHING*.md, sdks/COVERAGE_REPORT.md, docs/users/guides/README.md, docs/users/api/{README,INTEGRATION}.md, docs/specs/{API_REFERENCE,ROADMAP}.md, docs/migration/rpc-default.md) updated to drop the integration sections and the comparison-matrix rows. The pending rulebook task phase6_sdk-framework-integrations-rpc (which planned to wire RPC into these adapters) was deleted as obsolete.

Added

  • FastEmbed backend wired into the server bootstrap (phase8_wire-real-embedding-providers). fastembed 5.13 was declared as an optional dep in crates/vectorizer/Cargo.toml (in the default feature set) but had no active call sites; the server hard-coded Bm25Embedding::new(512) in all three bootstrap embedding-manager sites (main, file-watcher, final) and never consulted config.yml > embedding.model. This change adds a FastEmbedProvider adapter at crates/vectorizer/src/embedding/providers/fastembed.rs (wraps fastembed::TextEmbedding behind a parking_lot::Mutex because the inference handle requires &mut self — batching still happens inside the single locked call) and a try_build_fastembed_provider(model_id, cache_dir) factory that returns a typed error when the fastembed Cargo feature is off. Server bootstrap at crates/vectorizer-server/src/server/core/bootstrap.rs gains resolve_embedding_model_name + build_default_provider helpers that parse embedding.model from the top-level of config.yml and dispatch: "bm25" (default) → Bm25Embedding::new(512), "fastembed:<id>"FastEmbedProvider::from_config(id, data_dir().join("fastembed")). Unknown prefixes fail fast at boot so operators see the bad config immediately. Supported fastembed ids (short alias + enum-debug form both accepted): all-MiniLM-L6-v2 (dim 384), all-MiniLM-L12-v2, all-mpnet-base-v2 (dim 768), bge-small-en-v1.5 (dim 384, fastembed default), bge-base-en-v1.5, bge-large-en-v1.5 (dim 1024) — each with a -q suffix variant for the int8-quantized model. Model weights are cached under data_dir().join("fastembed") (the same directory that holds vectorizer.vecdb). Closes F6 from docs/releases/v3.0.0-verification.md.

Added

  • C# SDK RPC transport (Vectorizer.Sdk.Rpc 3.0.0, phase6_sdk-csharp-rpc). New NuGet package at sdks/csharp/src/Vectorizer.Rpc/ ships the binary VectorizerRPC fast path for .NET 8.0+ alongside a REST fallback. API surface: RpcClient (TCP + MessagePack framing with multiplexed per-connection IDs), RpcClientPool (bounded by MaxConnections semaphore, lazy dial, HELLO auto-sent on first acquire), IVectorizerClient + RpcVectorizerClient / HttpVectorizerClient (transport-agnostic typed surface), VectorizerClientFactory.Create(url) and services.AddVectorizerClient(url) (both route through the same EndpointParser.Parse(string url) helper). URL grammar mirrors the Rust / Go / Python / TypeScript parsers byte-for-byte: vectorizer://host[:port] → RPC (default port 15503), host[:port] (no scheme) → RPC, http(s)://… → REST; any other scheme throws ArgumentException, and URLs carrying credentials in the userinfo section are rejected (credentials go in HELLO, not the URL). MessagePack-csharp's Int32/Int64MessagePackFormatter emits the fixed 5- and 9-byte forms rather than rmp-serde's compact encoding, so FrameCodec writes bytes directly through MessagePackWriter.Write(long) / Write(uint) overloads that DO pick the smallest representation — every wire-spec § 11 golden vector (PING request, PONG response with nested Ok/Str maps) is asserted byte-for-byte in FrameCodecTests. Two sample projects: examples/Quickstart (console walkthrough) and examples/AspNetCore (minimal-API DI registration). Verification: dotnet test 54 / 0 / 0 (framing, endpoint, value round-trip, RPC client against an in-process mock server, pool acquire/release/blocking semantics, DI singleton + transport override). Previously-pending tasks phase6_add-rpc-protocol-server, phase6_rpc-wire-protocol-spec, phase6_make-rpc-default-transport, and the sibling Go / Python / Rust / TypeScript SDK-RPC tasks all merged before this one — the C# SDK was the last language in the phase6_sdk-*-rpc family.
  • Layered config loader (phase5_consolidate-config-files). New src/config/layered.rs exposes load_layered(base, options) that applies a mode-specific override on top of a base YAML config via deep YAML merge (scalar replace, recursive map merge, full array replace, null-clears-base). Mode is selected by the new VECTORIZER_MODE env var; values are looked up under config/modes/<mode>.yml. Bootstrap eagerly validates the merged config when VECTORIZER_MODE is set so a typo in the override surfaces at boot, not randomly later. Two mode override fragments shipped: config/modes/dev.yml (verbose logging, file watcher on, loopback bind) and config/modes/production.yml (warn logging, larger threads / batch / cache, +zstd compression, +scheduled snapshots, file watcher off). 11 unit tests cover the merge primitive (scalar/map/array/null/type-change/overrides-only-keys) plus the loader's typed errors (BaseNotFound, ModeNotFound, Schema); 4 integration tests load the real checked-in config.example.yml + every shipped mode override and assert the merged result deserializes into the strict VectorizerConfig. New operator guide at docs/deployment/configuration.md. Per-key matrix + canonical-default decisions captured in .rulebook/archive/<date>-phase5_consolidate-config-files/design.md. The legacy config.production.yml, config.cluster.yml, config.hub.yml, and the multi-tenant config.yml stay in the repo for the v3.x.0 release window — operators using the layered loader read from config.yml (base) + config/modes/<mode>.yml; operators on the existing single-file path keep working unchanged. Cluster + hub mode overrides + a migration script + the legacy-file deletion are tracked as next slots of the same task.

Changed

  • rmcp 0.10 → 1.5: MCP SDK major rewrite (phase7_rmcp-1.x-migration). rmcp went 0.10 → 1.x upstream and reshaped the core data model — Tool, Implementation, ServerInfo (alias for InitializeResult), ListToolsResult, ListResourcesResult, and CallToolRequestParams all became #[non_exhaustive], so struct-literal construction from outside the crate is no longer legal. Bumped rmcp = "0.10"rmcp = "1.5" in the three manifests (vectorizer-core, vectorizer, vectorizer-server) and rewrote every affected construction site to use the builder entry points each type now provides.

    Concretely:

    • crates/vectorizer-server/src/server/mcp/tools.rs — 31 hand-written Tool { ... } literals in get_mcp_tools() plus 1 in tools_from_inventory() now go through a local mk_tool(name, title, description, input_schema, annotations) helper that delegates to Tool::new(name, description, schema).with_title(title).with_annotations(annotations).
    • crates/vectorizer-server/src/server/core/mcp_service.rsServerInfo::new(caps).with_protocol_version(...).with_server_info(Implementation::new(...).with_title(...).with_website_url(...)).with_instructions(...) replaces the old struct-literal advertise path.
    • ListToolsResult::with_all_items(tools) + ListResourcesResult::with_all_items(vec![]) replace the struct literals that were missing the new meta field.
    • CallToolRequestParam (0.10 name) is now a deprecated alias for CallToolRequestParams (plural). Renamed every import + function-signature reference across 8 files; every construction site uses CallToolRequestParams::new(name).with_arguments(args).

    The 1.x rename means MCP client crates that depend on our vectorizer-server transitively will see the newer type names in our re-exports. No change to the on-wire protocol the clients parse — the v1.5...

Read more

vectorizer-3.0.0

21 Apr 12:09

Choose a tag to compare

A Helm chart for Vectorizer - High-performance vector database

v2.5.16 — Serve search locally on followers

03 Apr 19:46

Choose a tag to compare

Fix: POST search/scroll/recommend/count are now served locally on followers instead of being redirected to leader. These are read operations. Image: ghcr.io/hivellm/vectorizer:2.5.16

v2.5.15 — Fix vector replication in Raft HA

03 Apr 18:53

Choose a tag to compare

Fix: vector inserts now replicate to followers in Raft mode. Root cause: upsert_points() only checked static master_node (always None in Raft), not ha_manager.master_node(). Also includes NetworkError fix for Raft elections. Image: ghcr.io/hivellm/vectorizer:2.5.15

v2.5.14 — Fix Raft election (NetworkError)

03 Apr 16:37

Choose a tag to compare

Root cause fix: Raft RPC errors now use NetworkError (transient, immediate retry) instead of Unreachable (permanent backoff). This was why elections never completed — initial DNS failures marked all peers as permanently dead. Image: ghcr.io/hivellm/vectorizer:2.5.14

v2.5.13

03 Apr 15:13

Choose a tag to compare

Debug: log before/after initialize_cluster. Image: ghcr.io/hivellm/vectorizer:2.5.13

v2.5.12 — Force Raft election retry

03 Apr 06:03

Choose a tag to compare

Fix: trigger().elect() every 10s until leader elected. Image: ghcr.io/hivellm/vectorizer:2.5.12

v2.5.11

03 Apr 05:28

Choose a tag to compare

Debug: warn-level logs for cluster servers count and DNS wait. Image: ghcr.io/hivellm/vectorizer:2.5.11

v2.5.10 — Debug config parse

03 Apr 01:10

Choose a tag to compare

Debug: logs config parse result for cluster_enabled. Image: ghcr.io/hivellm/vectorizer:2.5.10

vectorizer-2.5.16

03 Apr 19:46

Choose a tag to compare

A Helm chart for Vectorizer - High-performance vector database