1pub const MAX_SEARCH_LIMIT: usize = 100;
95
96pub(crate) fn warn_if_search_limit_clamped(
103 site: &'static str,
104 requested: usize,
105 warned: &std::sync::atomic::AtomicBool,
106) {
107 if requested > MAX_SEARCH_LIMIT && !warned.swap(true, std::sync::atomic::Ordering::Relaxed) {
108 tracing::warn!(
109 site,
110 requested,
111 max = MAX_SEARCH_LIMIT,
112 "requested search limit exceeds MAX_SEARCH_LIMIT and was clamped — a config-driven \
113 candidate pool (e.g. memory.retrieval.depth) larger than this will silently return \
114 a smaller ANN pool than configured"
115 );
116 }
117}
118
119pub mod admission;
120pub mod anchored_summary;
121pub mod compaction_probe;
122pub mod compression;
123pub mod compression_guidelines;
124pub mod consolidation;
125pub mod document;
126pub mod episodic_consolidation;
127pub mod episodic_graph;
128pub mod facade;
129pub mod five_signal;
130pub mod forgetting;
131pub mod hebbian_consolidation;
132pub mod optical_forgetting;
133pub mod reasoning;
134pub mod recall_view;
135pub mod retrieval_failure_logger;
136pub mod scenes;
137mod sweep_helpers;
138pub mod tiered_retrieval;
139pub mod tiers;
140
141pub mod db_vector_store;
142pub mod embed_probe;
143pub mod embedding_registry;
144pub mod embedding_store;
145pub mod error;
146pub mod eviction;
147pub mod graph;
148pub mod in_memory_store;
149mod llm_judge;
150pub mod qdrant_ops;
151pub mod quality_gate;
152pub mod response_cache;
153pub mod router;
154pub mod semantic;
155pub mod shadow;
156pub mod snapshot;
157mod sqlite_time;
158pub mod store;
159#[cfg(any(test, feature = "testing"))]
160pub mod testing;
161pub mod token_counter;
162pub mod types;
163pub mod vector_store;
164
165pub use admission::{
166 AdmissionControl, AdmissionDecision, AdmissionFactors, AdmissionRejected, AdmissionWeights,
167 GoalGateConfig, compute_content_type_prior, compute_factual_confidence, log_admission_decision,
168};
169pub use anchored_summary::AnchoredSummary;
170pub use compaction_probe::{
171 CategoryScore, CompactionProbeResult, ProbeQuestion, ProbeVerdict, answer_probe_questions,
172 generate_probe_questions, score_answers, validate_compaction,
173};
174pub use compression::{
175 CompressionLevel, RetrievalPolicy,
176 promotion::{
177 PromotionCandidate, PromotionConfig, PromotionEngine, PromotionInput, SkillWriter,
178 },
179};
180pub use compression_guidelines::{
181 build_guidelines_update_prompt, sanitize_guidelines, start_guidelines_updater,
182 truncate_to_token_budget, update_guidelines_once,
183};
184pub use consolidation::{
185 ConsolidationConfig, ConsolidationResult, TopologyOp, run_consolidation_sweep,
186 start_consolidation_loop,
187};
188#[cfg(feature = "pdf")]
189pub use document::PdfLoader;
190pub use document::{
191 Chunk, Document, DocumentError, DocumentLoader, DocumentMetadata, IngestionPipeline,
192 SplitterConfig, TextLoader, TextSplitter,
193};
194pub use embed_probe::{ProbeError, probe_vector_size};
195pub use embedding_registry::{
196 EmbedFuture, Embeddable, EmbeddingRegistry, EmbeddingRegistryError, SyncStats,
197};
198pub use embedding_store::ensure_qdrant_collection;
199pub use episodic_consolidation::{
200 EpisodicConsolidationConfig, EpisodicConsolidationResult, run_episodic_consolidation_sweep,
201 start_episodic_consolidation_loop,
202};
203pub use episodic_graph::{
204 CausalLink, EmGraphConfig, EpisodicEvent, extract_events, fetch_recent_events, link_events,
205 recall_episodic_causal, store_events, store_links,
206};
207pub use error::MemoryError;
208pub use eviction::{EbbinghausPolicy, EvictionPolicy, start_eviction_loop};
209pub use facade::{
210 CompactionContext, CompactionResult, InMemoryFacade, MemoryEntry, MemoryFacade, MemoryMatch,
211 MemorySource,
212};
213pub use forgetting::{ForgettingConfig, ForgettingResult, start_forgetting_loop};
214pub use graph::EntityLockManager;
215pub use graph::experience::{EvolutionSweepStats, ExperienceStore};
216pub use graph::ingest::{
217 BatchIdResolution, ClaudeCodeJsonl, CodexJsonl, HubDegree, ImportBatchId, IngestDocument,
218 IngestFailure, IngestLedger, IngestProgress, IngestReport, IngestSourceAdapter,
219 IngestSourceKind, LedgerEntry, SubagentJsonl, TranscriptEntry,
220};
221pub use graph::{
222 BeliefMemConfig, BeliefRevisionConfig, BeliefStore, Community, Edge, EdgeType, Entity,
223 EntityType, GraphFact, GraphOrigin, GraphProvenance, GraphStore, PendingBelief, RpeRouter,
224 RpeSignal, extract_candidate_entities, noisy_or, time_decayed_prob,
225};
226pub use hebbian_consolidation::{
227 GraphRule, HebbianConsolidationCandidate, HebbianConsolidationOutcome,
228 run_consolidation_sweep as run_hebbian_consolidation_sweep,
229 spawn_consolidation_loop as spawn_hebbian_consolidation_loop,
230};
231pub use optical_forgetting::{
232 ContentFidelity, OpticalForgettingConfig, OpticalForgettingResult,
233 run_optical_forgetting_sweep, start_optical_forgetting_loop,
234};
235pub use qdrant_ops::QdrantOps;
236pub use reasoning::{
237 Outcome, ProcessTurnConfig, ReasoningMemory, ReasoningStrategy, SelfJudgeOutcome,
238 distill_strategy, process_turn as process_reasoning_turn, run_self_judge,
239};
240pub use recall_view::{RecallView, RecalledFact};
241pub use response_cache::ResponseCache;
242pub use retrieval_failure_logger::RetrievalFailureLogger;
243pub use router::{
244 AsyncMemoryRouter, HeuristicRouter, HybridRouter, LlmRouter, MemoryRoute, MemoryRouter,
245 RoutingDecision, TemporalRange, classify_graph_subgraph, parse_route_str,
246 strip_temporal_keywords,
247};
248pub use scenes::{
249 MemScene, SceneConfig, consolidate_scenes, list_scenes, start_scene_consolidation_loop,
250};
251pub use semantic::{
252 EmbedContext, ExtractionResult, ExtractionStats, GraphExtractionConfig, HebbianReinforcement,
253 HelaSpreadRuntime, ImportanceScoring, IngestBatchConfig, LinkingStats, MmrReranking,
254 NoteLinkingConfig, PersonaExtractionConfig, QueryBiasCorrection, RecalledMessage,
255 SharedPostExtractValidator, StructuredSummary, TemporalDecay, TrajectoryEntry,
256 TrajectoryExtractionConfig, TreeConsolidationConfig, TreeConsolidationResult,
257 build_summarization_prompt, contains_self_referential_language, extract_and_store,
258 extract_persona_facts, extract_trajectory_entries, link_memory_notes,
259 run_tree_consolidation_sweep, start_tree_consolidation_loop,
260};
261pub use snapshot::{ImportStats, MemorySnapshot, export_snapshot, import_snapshot};
262pub use store::agent_sessions::{AgentSessionRow, SessionChannel, SessionKind, SessionStatus};
263pub use store::compression_guidelines::CompressionFailurePair;
264pub use store::corrections::UserCorrectionRow;
265pub use store::experiments::{ExperimentResultRow, NewExperimentResult, SessionSummaryRow};
266pub use store::memory_tree::MemoryTreeRow;
267pub use store::persona::PersonaFactRow;
268pub use store::retrieval_failures::{RetrievalFailureRecord, RetrievalFailureType};
269pub use store::session_digest::SessionDigest;
270pub use store::trajectory::{NewTrajectoryEntry, TrajectoryEntryRow};
271pub use tiered_retrieval::{
272 IntentClass, TieredRetrievalConfig, TieredRetrievalResult, recall_tiered,
273};
274pub use tiers::{TierPromotionConfig, start_tier_promotion_loop};
275pub use token_counter::TokenCounter;
276pub use tokio_util::sync::CancellationToken;
277pub use types::{
278 ConversationId, EntityId, ExperienceId, MemSceneId, MemoryTier, MessageId, UsageRecord,
279 UsageSource,
280};
281pub use vector_store::{
282 FieldCondition, FieldValue, ScoredVectorPoint, VectorFilter, VectorPoint, VectorStore,
283 VectorStoreError,
284};
285pub use zeph_common::config::memory::HebbianConsolidationConfig;
286pub use zeph_common::memory::{FunctionalType, TokenCounting};
287pub use zeph_config::memory::CompressionGuidelinesConfig;
288pub use zeph_config::memory::EvictionConfig;
289pub use zeph_config::memory::TypeAwareComposeConfig;
290pub use zeph_config::memory::{CompactionProbeConfig, ProbeCategory};