fix(curation): add exact entity resolution for memory edits - #3481
Open
Sanderhoff-alt wants to merge 1 commit into
Open
fix(curation): add exact entity resolution for memory edits#3481Sanderhoff-alt wants to merge 1 commit into
Sanderhoff-alt wants to merge 1 commit into
Conversation
Sanderhoff-alt
force-pushed
the
fix/issue-3479
branch
3 times, most recently
from
August 14, 2026 09:44
93b4682 to
25c4153
Compare
Issue vectorize-io#3479 exposed that update_memory can map submitted entity names to the wrong existing entity through fuzzy scoring. This is especially risky for bulk corrections because the call succeeds while text remains correct. Add entity_resolution_mode to update_memory and its HTTP/MCP clients. The default fuzzy mode preserves existing behavior. The exact mode reuses only case-insensitive exact names and creates unmatched names without fuzzy candidate scoring or same-batch fuzzy deduplication. Thread the mode through the engine and resolver, cover PostgreSQL and Oracle lookup syntax, and document exact mode for user-authored corrections. Regenerate OpenAPI, the documentation skill, and Python, Go, and TypeScript client artifacts. Add resolver and curation regression tests for similar existing entities.
Sanderhoff-alt
force-pushed
the
fix/issue-3479
branch
from
August 14, 2026 09:50
25c4153 to
0488986
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
update_memoryuses fuzzy entity matching by default. During a manual or bulk correction, the entity name supplied by the caller can be matched to a different existing entity with a similar name. The request still succeeds, but the corrected memory is attached to the wrong entity. This is the behavior reported in #3479.Change
Add an optional
entity_resolution_modeparameter toupdate_memory. When the parameter is omitted or set tofuzzy, the existing fuzzy matching behavior is preserved. When it is set toexact, the resolver reuses an existing entity only when its name matches case-insensitively. A name with no exact match creates a new entity. Exact mode also disables fuzzy deduplication between entity names in the same request.Exact mode is intended for user-authored corrections and other operations where the caller already knows which entity name should be updated. Keeping fuzzy mode as the default preserves compatibility for existing callers.
Scope
The parameter is supported by the HTTP API and MCP tool and is passed through the memory engine and entity resolver. The OpenAPI specification, generated Python, Go, and TypeScript client models, and current and 0.9 documentation have been updated. Regression tests cover similar existing entities and the curation API.
Verification
The resolver and curation tests pass (43 tests), as do the HTTP curation tests (4 tests), Python Ruff check and format check, Python
ty check, OpenAPI compatibility validation, TypeScript client build, generated Python model validation, andgit diff --check.Full linting could not run because the Control Plane environment is missing
@eslint/js. The documentation build could not run because its environment is missingajv. Go client root integration tests require an API server onlocalhost:8888; package compilation and generated tests pass without that server. An unrelated existing client coverage check still reports the missingreflect.apply_all_directiveswrapper field in Python and TypeScript.Fixes #3479.