Skip to main content

cortex_retrieval/
lib.rs

1//! Read-only retrieval — never mutates memory tables.
2#![warn(missing_docs)]
3
4use cortex_core::CortexResult;
5
6pub mod embedding;
7pub mod fts5;
8pub mod lexical;
9pub mod resolve;
10pub mod score;
11pub mod snippet;
12
13pub use embedding::{
14    cosine_similarity, EmbedError, EmbedRecord, EmbedResult, Embedder, LocalStubEmbedder,
15    OllamaEmbedder, DEFAULT_OLLAMA_EMBED_MODEL, DEFAULT_OLLAMA_ENDPOINT, NOMIC_EMBED_DIM,
16    OLLAMA_BACKEND_ID_PREFIX, STUB_BACKEND_ID, STUB_DIM,
17};
18pub use fts5::{compose_fuzzy_boost, normalize_bm25, query_fts5, Fts5Hit, FUZZY_BOOST_WEIGHT};
19pub use lexical::{LexicalDocument, LexicalExplanation, LexicalHit, LexicalIndex};
20pub use resolve::{
21    resolve_conflicts, AuthorityLevel, AuthorityProofHint, ConflictingMemoryInput,
22    PrecedenceEvidence, ProofClosureHint, ResolutionReason, ResolutionState, ResolverOutput,
23};
24pub use score::{
25    compose_lexical_semantic, score, DomainOverlapExplanation, HybridScoreExplanation,
26    ScoreComponent, ScoreInputs, FTS5_WEIGHT_WITH_SEM, LEX_WEIGHT_WITH_SEM, SEM_WEIGHT_WITH_SEM,
27};
28pub use snippet::{
29    extract as extract_snippet, snippet_ansi_highlighted, snippet_plain_text, tokenize_query,
30    Snippet, MAX_SNIPPET_CHARS, SNIPPET_LEAD_CHARS,
31};
32
33/// Placeholder search hook (`memory search --explain` wiring starts here).
34pub fn search_stub(query: &str) -> CortexResult<()> {
35    if query.trim().is_empty() {
36        return Err(cortex_core::CortexError::Validation(
37            "search query must not be empty".into(),
38        ));
39    }
40    Ok(())
41}