ş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
tek process, tek collection, tek dosya
tek FastAPI process'iStreamable HTTPpushsorgurepo başına jobhybrid searchupsertmanifest · job'larAgentClaude Code · CursorGitHubwebhook · pollerMCP · /mcpsearch · read · listFastAPI/search /ask · CLIRetrieveryönlendir → dense | BM25Indexertree-sitter · BGE-M3Milvus 2.6dense + sparseSQLiterepo'lar · job'lar · cacheBackend3Veritabanı2Kuyruk1Dış2
ParçaNedenElenen
Milvus 2.6BM25 yerleşik bir Function → ikinci index yok; partition key repo filtrelerini ucuzlatıyorpgvector (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ıyorOpenAI / Voyage embedding'leri (kod dışarı çıkıyor; flag olarak duruyor)
tree-sitterchunk = kod birimi, atıf = file:line — sembolsabit pencereler, LLM ile chunking
sha256 manifestrename, mode, submodule uç durumları yok oluyor; yerel dizinler aynı yoldan geçiyorgit diff
webhook + pollerpush anında tazelik, artı bir emniyet ağıyalnız cron, yalnız webhook
SQLite + tek workertek dosya, Redis yok, repo başına tek bekleyen jobPostgres + 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.

#milvus #bge-m3 #tree-sitter #architecture

Bu notu beyaz tahtada gör →