fix(agentic): search API queries all requested memory_types, not just the first#238
Open
Fearvox wants to merge 1 commit into
Open
fix(agentic): search API queries all requested memory_types, not just the first#238Fearvox wants to merge 1 commit into
Fearvox wants to merge 1 commit into
Conversation
… the first The keyword and vector search paths read only `memory_types[0]`, so any request asking for multiple memory types silently returned hits from the first type and dropped the rest. retrieve_mem now iterates every requested memory type for both keyword (ES_REPO_MAP) and vector (MILVUS_REPO_MAP) search, merges the results, and sorts by score. Hybrid dedup is also fixed: previously hits were deduped by `id` alone, so two distinct collections that happen to share a backend id erased each other. Dedup now keys on `(memory_type, id)` via `_hit_identity`. Adds an offline regression test (monkeypatched repos, no live stack) that asserts both EPISODIC_MEMORY and AGENT_CASE return hits and that hybrid dedup keeps same-id hits from distinct memory types. Closes #78 Co-authored-by: Exploreunive <117084012+Exploreunive@users.noreply.github.com> Co-authored-by: Jah-yee <166608075+Jah-yee@users.noreply.github.com> Co-authored-by: wucm667 <109257021+wucm667@users.noreply.github.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
What
The search API only ever queried
memory_types[0]. A request asking for several memory types (for example[EPISODIC_MEMORY, AGENT_CASE]) silently returned hits from the first type and dropped every other type — no error, no warning, just missing results. This is the exact defect reported in #78.This PR makes
retrieve_memquery every requested memory type:get_keyword_search_results) now iterates all requested types overES_REPO_MAPinstead of indexingmemory_types[0], marks each hit with itsmemory_type, merges, and sorts by score.get_vector_search_results) does the same over a newMILVUS_REPO_MAP, replacing the singlematch mem_typeblock that handled only one type.idalone, so two distinct collections that happen to share a backendiderased each other. Dedup now keys on(memory_type, id)via the new_hit_identityhelper, and results are score-sorted via_sort_hits_by_score.Small shared helpers (
_memory_type_label,_hit_score,_sort_hits_by_score,_hit_identity) replace the repeatedmemory_types[0].value if ... else 'unknown'idiom that caused the bug in the first place.Why
memory_types[0]is a silent data-loss bug: multi-type retrieval is a documented capability, and callers requesting two or more types had no way to know the extra types were being ignored. See #78.Tests
Adds
methods/EverCore/tests/test_memory_manager_multi_type_search.py, which runs fully offline (repositories monkeypatched, no ES/Milvus/live stack required):test_keyword_search_queries_all_requested_memory_types— asserts bothEPISODIC_MEMORYandAGENT_CASEreturn hits, score-sorted.test_hybrid_dedupe_keeps_same_id_from_distinct_memory_types— asserts hybrid dedup keeps same-idhits from distinct memory types instead of collapsing them.Run locally:
Result:
2 passed.Scope
Surgical: two files only —
methods/EverCore/src/agentic_layer/memory_manager.pyand its new regression test. No README, no demo, no unrelated changes.Closes #78.
Credit
This fix builds on prior community work that diagnosed and proposed the same change. Co-authors preserved on the commit:
fix: search API silently ignores all memory_types except the first (#78)fix: support multiple memory_types in search APIfix(agentic): search API now queries all requested memory_typesCo-authored-by: Exploreunive 117084012+Exploreunive@users.noreply.github.com
Co-authored-by: Jah-yee 166608075+Jah-yee@users.noreply.github.com
Co-authored-by: wucm667 109257021+wucm667@users.noreply.github.com
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
🤖 Generated with Claude Code