Conversation
Share radius resolution and pre-fusion dense filtering across search lanes. Preserve sparse and linkage routes, remove inert RankInput arguments, and cover defaults, boundaries, iterative queries, and RRF score separation. Fixes EverMind-AI#394
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.
Summary
Fixes #394.
agenticandllm_multiroundacceptedradiusbut bypassed the manager's dense-recall filter. A request with dense hits at cosine 0.9 and 0.2 andradius=0.5now removes the 0.2 hit before fusion on every iterative query. Existingvectorandhybridfiltering remains in place.top_k: explicit values win (including zero), unlimited searches default to 0.5, and positivetop_khas no implicit floor.RankInput.radiusarguments. Never map cosine thresholds toahybrid_retrieve(min_score=...), which would compare them with a different score scale.min_score. Add 49 regression cases covering dispatch/defaults, boundaries, sparse preservation, empty dense pools, both agent kinds, and repeated queries with real RRF/MaxSim operators.Area
Verification
Pre-PR Linux validation uses the same source/test tree as this PR; validation branches change only workflow configuration:
make lintandmake packagepassed;make testpassed on Python 3.12 and 3.13 (2599 passed, 4 skipped each);make integrationpassed on both versions (183 passed, 5 skipped, 7 deselected each).fcntlstand-in that raises on any attempted POSIX operation; the Linux runs above use the real platform without that stand-in.git diff --checkpassed. OpenAPI export has no drift./gettelemetry (1 passed), tiered API end-to-end tests (27 passed), and both-backend index contract (18 passed). The first run could not pull the upstream compose file'sminio/minioimage; the successful validation uses the same MinIO version tag fromquay.io/minio/minio. This environment-only workaround is not part of the PR; the unchanged upstream workflow may encounter the same Docker Hub pull failure.Checklist
main..envfiles, dependency folders, or generated output.Notes for Reviewers
This implements option (a) from the issue: a pre-fusion dense cosine floor. Keyword matches, cluster expansions, and case-to-skill linkage remain independent recall routes; radius is not a final-score floor or a promise of monotonically decreasing result counts. The existing
min_scorebehavior is unchanged.The intended behavior change includes default unlimited iterative searches: they now honor the documented 0.5 floor. Internal helper callers that omit the new optional argument retain unfiltered behavior. VECTOR and HYBRID already filtered dense hits before this change; the unused ranker argument was not evidence that those paths ignored radius.
By submitting this pull request, I agree that my contribution is licensed under the Apache License 2.0.