Skip to main content

basemyai/
lib.rs

1//! # basemyai
2//!
3//! Moteur de **mémoire pour agents IA**, posé sur [`basemyai_core`].
4//!
5//! Ajoute au socle agnostique la *sémantique* mémoire : les 4 couches
6//! ([`MemoryLayer`]), le RAG temporel ([`temporal`]), l'isolation par
7//! [`AgentId`], le chiffrement obligatoire, et le setup hardware-aware
8//! (module `provision`).
9//!
10//! Ces concepts vivent **ici**, jamais dans `basemyai-core` (ADR-001).
11
12// Scaffold : les corps réels arrivent à la phase d'implémentation.
13#![allow(dead_code)]
14
15mod cognition;
16mod error;
17pub mod maintenance;
18mod memory;
19pub mod provision;
20mod retrieval;
21pub mod storage;
22pub mod temporal;
23
24pub use basemyai_core::Metric;
25pub use cognition::{
26    ConsolidationInput, ConsolidationReport, ExtractedEntity, ExtractedRelation, Extraction, Graph, LlmInference,
27    Reached, apply_extraction, consolidate, consolidation_prompt, parse_extraction,
28};
29pub use error::{MemoryError, Result};
30pub use maintenance::{AdaptiveForgetting, ConsolidationTask, ExpiredMemoryGc};
31#[cfg(feature = "test-util")]
32pub use memory::HashEmbedder;
33pub use memory::schema::{BMAI_FORMAT_VERSION, EMBEDDING_DIM, schema};
34pub use memory::{
35    AgentId, AgentStats, ImportReport, MAX_TEXT_LEN, Memory, MemoryEvent, MemoryEventKind, MemoryLayer,
36    MemorySubscription, Record,
37};
38pub use provision::{
39    AnythingLlmBackend, BASELINE_DIM, BASELINE_MODEL_ID, BackendKind, HardwareProfile, KNOWN_MODELS, KnownModel,
40    LlmOption, LlmProvision, ModelProvision, OllamaBackend, OpenAiCompatBackend, anythingllm_from_env, best_llm_option,
41    choose_llm, detect_hardware, detect_llm_options, propose_models_to_install, provision, provision_with_progress,
42};
43pub use retrieval::{Fused, RRF_K, Ranking, rrf_fuse};
44pub use temporal::Validity;
45
46/// Temps Unix courant (secondes, UTC). `0` si l'horloge est antérieure à l'epoch.
47#[must_use]
48pub(crate) fn now_unix() -> i64 {
49    use std::time::{SystemTime, UNIX_EPOCH};
50    SystemTime::now()
51        .duration_since(UNIX_EPOCH)
52        .map(|d| i64::try_from(d.as_secs()).unwrap_or(i64::MAX))
53        .unwrap_or(0)
54}