Retrieval strategies
CodeRetriever exposes a single entry point, retrieve(), which runs keyword, vector, or hybrid search against a snapshot.
How retrieval works
- Snapshot resolution
-
If
snapshot_idis not provided, the active snapshot for the repository is resolved. -
Search execution
- Vector search uses
EmbeddingProvider.embed()andPostgresGraphStorage.search_vectors(). -
Keyword search uses
PostgresGraphStorage.search_fts(). -
Fusion
-
Hybrid search merges results with Reciprocal Rank Fusion (RRF).
-
Context expansion
GraphWalkeradds parent context and outgoing definitions based on graph edges.
Strategies
hybrid: vector plus keyword, merged with RRF.vector: vector search only.keyword: keyword search only.
Filters
The filters argument is pushed into SQL. Supported keys:
path_prefixlanguage/exclude_languagecategory/exclude_categoryrole/exclude_role
Example
from crader import CodeRetriever
from crader.providers.embedding import OpenAIEmbeddingProvider
from crader.storage.connector import PooledConnector
from crader.storage.postgres import PostgresGraphStorage
db_url = "postgresql://user:pass@localhost:5432/codebase"
connector = PooledConnector(dsn=db_url)
storage = PostgresGraphStorage(connector)
provider = OpenAIEmbeddingProvider(model="text-embedding-3-small")
retriever = CodeRetriever(storage, provider)
results = retriever.retrieve(
query="authentication middleware",
repo_id=repo_id,
limit=5,
strategy="hybrid",
filters={"language": "python", "path_prefix": "src/"},
)