1#![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
33pub 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}