Files
wehub-resource-sync 15dadb5432
CI / build (push) Has been cancelled
Link Check / link-check (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:38:09 +08:00

42 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Smart default embedding model based on platform and corpus size
## Summary
Propose platform- and corpus-aware default embedding model selection for `leann build` when `--embedding-model` is not explicitly specified. This would improve out-of-the-box experience for different deployment scenarios (macOS CPU, NVIDIA GPU, etc.) without changing behavior when users pass an explicit model.
## Motivation
- **Current default**: `facebook/contriever` (~420MB, 768 dim) — heavy for CPU-only builds on large corpora
- **macOS users** often hit slow builds on 20K+ chunks; lighter models like `all-MiniLM-L6-v2` (~90MB) are much faster
- **NVIDIA GPU users** can leverage stronger models; smaller corpora benefit from quality (e.g. Qwen3-Embedding-0.6B), larger ones from balanced models (e.g. bge-base-en-v1.5)
## Proposed logic
| Platform | Chunk count | Default model |
|----------|-------------|---------------|
| **macOS** | ≥ 20,000 | `sentence-transformers/all-MiniLM-L6-v2` |
| **macOS** | < 20,000 | `intfloat/e5-small-v2` |
| **NVIDIA GPU** | < 5,000 | `Qwen/Qwen3-Embedding-0.6B` |
| **NVIDIA GPU** | ≥ 5,000 | `BAAI/bge-base-en-v1.5` |
| **Other** | any | `facebook/contriever` (unchanged) |
## Implementation notes
1. **Platform detection**: `torch.cuda.is_available()` for NVIDIA; `sys.platform == "darwin"` for macOS
2. **Chunk count**: Known only after loading/chunking; may need to either:
- Do a lightweight pre-scan (e.g. file count × rough chunks per file), or
- Defer default choice until after first chunking pass (and cache for incremental)
3. **Explicit override**: If user passes `--embedding-model`, always use it; this logic applies only when the flag is omitted
## Model references
- `sentence-transformers/all-MiniLM-L6-v2`: ~90MB, 384 dim, fast on CPU
- `intfloat/e5-small-v2`: ~90MB, 384 dim
- `Qwen/Qwen3-Embedding-0.6B`: 0.6B params, 1024 dim, strong retrieval
- `BAAI/bge-base-en-v1.5`: ~110M params, 768 dim, good MTEB scores
## Open questions
- Should we add a `--embedding-model auto` to explicitly opt into this logic?
- Pre-scan vs post-chunk decision: trade-off between accuracy and implementation complexity