Skip to content

Tags: anatolykoptev/memdb

Tags

memdb-go/v0.23.2

Toggle memdb-go/v0.23.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release memdb-go 0.23.2 (#400)

Co-authored-by: krolik-release-bot[bot] <306658548+krolik-release-bot[bot]@users.noreply.github.com>

memdb-go/v0.23.1

Toggle memdb-go/v0.23.1's commit message
fix(goreleaser): rename archives to strip -SNAPSHOT-<sha> suffix

v0.23.0

Toggle v0.23.0's commit message
v0.23.0 — M10 user_profiles + perf + security audit (72.5% LLM Judge)

Headline: 72.5% LLM Judge on LoCoMo chat-50 stratified (excl cat-5,
Memobase methodology). Up from M9 70.0% (+2.5pp). Position: between
MemOS (73.31%) and Zep (75.14%); -3.28pp behind Memobase leader (75.78%).

What shipped (8 streams + 5 audit fixes):
- S1 user_profiles schema + cube_id security fix (#121, #129)
- S2 PROFILE-EXTRACT — Memobase verbatim prompt extractor (#124)
- S3 PROFILE-RETRIEVE — chat prompt injection (#123)
- S4 LEVELS-API — l1/l2/l3 query param (#122)
- S5 HELM chart for K8s install (#120)
- S6 CE-PRECOMPUTE — pre-compute pairwise CE scores at D3 (#125)
- S7 PageRank background goroutine + D1 boost (#127, #132)
- S8 REWARD-SCAFFOLD — feedback_events tables (#128)
- C1+C2+C3+I4+P3 — security audit fixes

Performance: 7.5x faster ingest (40min vs 5h M9). Pure-Go stack.

See docs/release-notes/v0.23.0.md for full notes.

v2.2.0

Toggle v2.2.0's commit message
chore(locomo): polish dual-speaker harness — drop walrus, unused para…

…m, magic constant (#95)

Follow-up to PR #89 quality review (3 Minor items from reviewer):
- test_query_dual.py: drop unused walrus binding
- query.py: drop unused `query` parameter from _build_dual_speaker_system_prompt
- query.py: promote magic 0.99 threshold to _CHAT_RETRIEVAL_SUPPRESS_THRESHOLD constant

Co-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.22.0

Toggle v0.22.0's commit message
chore(release): m9 stage 3 v3 final numbers — 70% llm judge headline (#…

…116)

Write verified M9 Stage 3 v3 benchmark numbers into all release docs:
- MILESTONES.md: new 2026-04-26 section with chat-50 + retrieval-only tables
  and public leaderboard comparison (between Mem0 66.88% and MemOS 73.31%)
- CHANGELOG.md: prepend "Headline result" subsection to v0.22.0 entry
- docs/release-notes/v0.22.0.md: replace "measurement in flight" placeholder
  with actual ## Headline benchmark result section (70.0% LLM Judge table)
- README.md: update comparison table row from TBD to 70.0% (excl cat-5)

Add result artifacts (git add -f to override gitignore):
- m9-stage3-v3-retrieval.json (25M, 1986 predictions)
- m9-stage3-v3-retrieval-score.json (1.5M)
- m9-stage3-v3-chat50-preds.json (971K)
- m9-stage3-v3-chat50-score.json (33K)
- m9-stage3-v3-summary.md

Co-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v2.0.0

Toggle v2.0.0's commit message
Merge pull request #49 from anatolykoptev/docs/v2.0.0-release-prep

docs: CHANGELOG v2.0.0 + Phase D final milestone

v1.1.0

Toggle v1.1.0's commit message
Merge pull request #11 from anatolykoptev/chore/changelog-v1.1.0

docs: CHANGELOG.md + v1.1.0 release prep

v1.0.4

Toggle v1.0.4's commit message
feat(search): cross-encoder rerank via embed-server /v1/rerank

* feat(feedback): NativeFeedback skeleton + validation + response types

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(search): CrossEncoderRerank HTTP client for embed-server /v1/rerank

Adds a best-effort cross-encoder reranker backed by embed-server's Cohere-
compatible /v1/rerank endpoint (BGE-reranker-v2-m3).

Design:
- Pure HTTP client + reorder logic, no service coupling yet (wired in CE3).
- Empty URL or any error returns input unchanged, the pipeline keeps going.
- MaxDocs caps the documents shipped over the wire (default 50) so a large
  top-K of multi-KB memories cannot blow up embed-server tokenization.
- Items missing the text field pass through unchanged.
- On success overwrites metadata.relativity with the CE score and sets
  metadata.cross_encoder_reranked=true.
- Errors go through slog.Default().Warn for ops visibility (LLMRerank is
  silent; CE errors are rarer and worth surfacing).

Tests cover: reorder, empty input, no URL, HTTP 5xx, timeout, MaxDocs cap,
items missing the text key.

* feat(config): CROSS_ENCODER_* env vars for cross-encoder rerank

Wires the step-6.05 cross-encoder reranker into the search service with
sensible defaults. No SearchParams flag — the env is the on/off knob so
every handler, MCP path, and profile gets consistent behavior.

Env vars (with defaults):
  CROSS_ENCODER_URL       http://embed-server:8082
  CROSS_ENCODER_MODEL     bge-reranker-v2-m3
  CROSS_ENCODER_TIMEOUT_MS  2000
  CROSS_ENCODER_MAX_DOCS  50

Changes:
- Config struct: adds CrossEncoderURL/Model/Timeout/MaxDocs fields.
- Load(): reads the env vars with defaults above.
- SearchService: adds CrossEncoder CrossEncoderConfig field (zero value = off).
- server_init_search: populates svc.CrossEncoder when URL is non-empty and
  logs the resulting configuration for operational visibility.
- config_test.go: covers default values, env overrides, and the empty-env
  fallback behavior.

* fix(feedback): use writeJSON envelope for 500 response (review I1)

* fix(ci): errcheck excludes for Close/Fprint — idiomatic ignorables

* feat(search): add step 6.05 cross-encoder rerank before LLM rerank

Wires the cross-encoder into the main pipeline. The new step:
- Runs AFTER cosine (step 6) and BEFORE LLM rerank (step 6.1).
- Applies to text_mem only (skill/tool/pref keep cosine ordering).
- Gated solely on s.CrossEncoder.URL != "" and len(text) > 1, so no
  SearchParams flag is needed. Env is the on/off knob.
- Overwrites metadata.relativity with the CE score so downstream steps
  (temporal decay, relativity threshold) operate on the sharper signal.
- ceRerankDur is added to the postProcessResults return tuple and logged
  alongside llm_rerank and iterative timings.

Also fixes a latent sort bug in cross_encoder_rerank.go: sorting the head
slice with an external scores array made Less/Swap inconsistent once any
elements were swapped. Now we build an index permutation ("order") from
scores, sort the permutation, then materialize the reordered slice so
scores[order[i]] always corresponds to the correct position.

Tests (cross_encoder_step_test.go):
- CrossEncoderCalledWhenURLSet: httptest stub, verifies text is reordered
  by CE score after the full post-process chain runs.
- CrossEncoderSkippedWhenURLEmpty: zero-value config, verifies cosine
  ordering is preserved and no cross_encoder_reranked flag is set.
- ReturnsCrossEncoderDuration: ceRerankDur > 0 when CE runs.

* docs(roadmap-search): Phase 3 cross-encoder rerank shipped (apr 2026)

Replaces the 'Phase 3 NLI Reranker deferred' section with the shipped
cross-encoder implementation:

- Renames phase to 'Cross-Encoder Reranker' and flips status to
  Реализовано (апрель 2026).
- Documents embed-server /v1/rerank (Cohere-compatible) + BGE-reranker-v2-m3
  as a concept superior to the original NLI path: reuses the existing
  embed-server, is a state-of-the-art cross-encoder, and the API shape
  allows drop-in replacement with commercial rerankers.
- Adds implementation details: file paths, env vars, MaxDocs guard, metadata
  writeback, timing log, and the 7+3+3 test coverage breakdown.
- Adds the +3-5 points LoCoMo line to the 'Путь к лидерству' projection.
- Updates the Go-vs-Python-vs-MemOS feature table to include the
  cross-encoder row with MemDB ✅ / MemOS ✅ (optional NLI).

* fix(ci): sync .golangci.yml with main (rebase took wrong side)

---------

Co-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

v1.0.0

Toggle v1.0.0's commit message
v1.0.0 — first public release

MemDB self-hosted memory database for AI agents, forked from MemOS,
rebuilt as a Go service + Postgres (pgvector + Apache AGE).

See CHANGELOG / README for details.