- Add lightweight model_manager.py: cache detection (with fastembed name
remapping), HF mirror download via huggingface_hub, auto model.onnx
fallback from quantized variants
- Config defaults: embed_model -> bge-small-en-v1.5 (384d), reranker ->
Xenova/ms-marco-MiniLM-L-6-v2 (fastembed 0.7.4 compatible)
- Add model_cache_dir and hf_mirror config options
- embed/local.py and rerank/local.py use model_manager for cache-aware loading
- Fix FastEmbedReranker to handle both float list and RerankResult formats
- E2E test uses real FastEmbedReranker instead of mock KeywordReranker
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rename the v2 search engine package to `codexlens-search` (import as
`codexlens_search`) so it can be installed independently and consumed
by the original codex-lens as a dependency. This avoids package path
conflicts since both previously used `src/codexlens/`.
Changes:
- Rename src/codexlens/ -> src/codexlens_search/
- Update pyproject.toml: name=codexlens-search, version=0.2.0
- Update all imports across source, tests, and scripts
- Add public API exports in __init__.py (Config, SearchPipeline,
IndexingPipeline, SearchResult, IndexStats)
37/37 tests pass. No functional changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SearchPipeline.search() called self._embedder.embed() which doesn't exist
on BaseEmbedder/FastEmbedEmbedder — only embed_single() and embed_batch()
are defined. This was masked by MockEmbedder in tests. Changed to
embed_single() which is the correct API for single-query embedding.
Also added scripts/test_small_e2e.py for quick end-to-end validation of
indexing pipeline and all search features on a small file set.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>