şema · olgun
Stack, ve neden
Yerleşik BM25'li Milvus, yerel BGE-M3, tree-sitter, sha256 manifest, SQLite, aynı process'te MCP.
Tek process, tek collection, tek veritabanı dosyası. Her parça bir özellik listesine göre değil, dört zor probleme göre seçildi.
MCP · /mcpsearch_code · read_code · list_repos, aynı process
FastAPI + typer/search /ask, webhook'lar, CLI
Retrieveryönlendir → dense | BM25 → (RRF, rerank flag arkasında)
Milvus 2.6dense + BM25 sparse tek collection'da, repo_id partition key
BGE-M3 · tree-sitter · sha256 manifestembed · chunk · diff
SQLite + tek workerrepo'lar, dosyalar, job'lar, enrichment cache'i
| Parça | Neden | Elenen |
|---|---|---|
| Milvus 2.6 | BM25 yerleşik bir Function → ikinci index yok; partition key repo filtrelerini ucuzlatıyor | pgvector (BM25 yok), Qdrant (BM25 client tarafında), Elasticsearch (ayrı bir dünya) |
| BGE-M3, yerel, 1024d | çok dilli: MiniLM'in 0.04 aldığı Türkçe düzyazıda 0.684; kod makineden dışarı çıkmıyor | OpenAI / Voyage embedding'leri (kod dışarı çıkıyor; flag olarak duruyor) |
| tree-sitter | chunk = kod birimi, atıf = file:line — sembol | sabit pencereler, LLM ile chunking |
| sha256 manifest | rename, mode, submodule uç durumları yok oluyor; yerel dizinler aynı yoldan geçiyor | git diff |
| webhook + poller | push anında tazelik, artı bir emniyet ağı | yalnız cron, yalnız webhook |
| SQLite + tek worker | tek dosya, Redis yok, repo başına tek bekleyen job | Postgres + Celery |
Sistem dünyayla HTTP üzerinden konuşuyor ve index'lediği repo'lara asla yazmıyor. Personal access token'lar git header'ı olarak taşınıyor ve her hata mesajından temizleniyor.