halldyll_memory_model/
lib.rs

1//! # Halldyll Memory Model
2//!
3//! Multi-user, multi-model memory system for distributed AI agents.
4//! Designed for cloud deployment with PostgreSQL + Redis backend.
5//!
6//! ## Features
7//!
8//! - **Multi-user isolation**: Complete user separation with RBAC
9//! - **Multi-model support**: Manage memory across different AI models
10//! - **Distributed memory**: PostgreSQL for persistence, Redis for caching
11//! - **Vector search**: Semantic search with embedding similarity
12//! - **Conversation management**: Full conversation history with context
13//! - **Fact extraction**: Learn and store facts with confidence scoring
14//! - **Image metadata**: Track generated images and their parameters
15//! - **Cloud-ready**: Designed for Kubernetes/RunPods deployment
16//!
17//! ## Architecture
18//!
19//! ```text
20//! ├── core          : Types, errors, configuration
21//! ├── models        : Database models and entities
22//! ├── storage       : PostgreSQL + Redis persistence layer
23//! ├── embedding     : Vector generation and search
24//! ├── ingest        : Data ingestion and processing
25//! ├── retrieval     : Semantic search and ranking
26//! ├── context       : Prompt context building
27//! ├── user          : User management and isolation
28//! ├── engine        : Main orchestration layer
29//! └── utils         : Utilities and helpers
30//! ```
31//!
32//! ## Quick Start
33//!
34//! ```rust,no_run
35//! use halldyll_memory_model::{Config, MemoryEngine};
36//! use halldyll_memory_model::models::{Conversation, Message, Role, Memory};
37//!
38//! #[tokio::main]
39//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
40//!     // Create engine with default config
41//!     let config = Config::default();
42//!     let engine = MemoryEngine::new(config).await?;
43//!     engine.initialize().await?;
44//!
45//!     // Store and search memories
46//!     let mut conversation = Conversation::new("Hello");
47//!     conversation.add_message(Message::new(Role::User, "Hello!"));
48//!
49//!     // engine.store_memory("user-123", Memory::Conversation(conversation)).await?;
50//!     // let results = engine.search("user-123", "hello", 10).await?;
51//!
52//!     Ok(())
53//! }
54//! ```
55
56#![forbid(unsafe_code)]
57#![deny(dead_code)]
58#![deny(non_camel_case_types)]
59#![deny(unused_imports)]
60#![deny(unused_variables)]
61#![deny(unused_must_use)]
62#![deny(non_snake_case)]
63#![deny(non_upper_case_globals)]
64#![deny(nonstandard_style)]
65#![deny(clippy::all)]
66#![deny(clippy::unwrap_used)]
67#![deny(clippy::expect_used)]
68#![deny(clippy::panic)]
69#![deny(clippy::print_stdout)]
70#![deny(clippy::todo)]
71#![deny(clippy::unimplemented)]
72#![deny(clippy::unwrap_in_result)]
73#![deny(clippy::module_inception)]
74#![deny(clippy::redundant_clone)]
75#![deny(clippy::shadow_unrelated)]
76#![deny(clippy::too_many_arguments)]
77#![deny(clippy::cognitive_complexity)]
78#![deny(overflowing_literals)]
79
80pub mod context;
81pub mod core;
82pub mod embedding;
83pub mod engine;
84pub mod ingest;
85pub mod models;
86pub mod retrieval;
87pub mod storage;
88pub mod user;
89pub mod utils;
90
91// Core exports
92pub use core::{Config, MemoryError, MemoryId, MemoryResult, MemoryType};
93
94// Engine exports
95pub use engine::{HealthStatus, MemoryEngine};
96
97// Context exports
98pub use context::{ContextBuilder, ContextConfig, TokenEstimationMethod};
99
100// Embedding exports
101pub use embedding::EmbeddingGenerator;
102
103// Ingestion exports
104pub use ingest::{MemoryProcessor, ProcessingResult, ProcessorConfig};
105
106// Retrieval exports
107pub use retrieval::{MemorySearcher, SearchOptions, SearchResult};
108
109// Storage exports
110pub use storage::{PostgresStorage, RedisCache, StoragePool};
111
112// User exports
113pub use user::{Permission, PermissionChecker, UserManager};
114
115// Model exports (re-exported for convenience)
116pub use models::{
117    Conversation, Fact, ImageMetadata, Memory, Message, Role,
118    TranscriptionMetadata, UserModel, UserRole,
119};
120
121// Utils exports
122pub use utils::Validator;
123
124/// Library version
125pub const VERSION: &str = env!("CARGO_PKG_VERSION");
126
127/// Agent name
128pub const AGENT_NAME: &str = "Halldyll";
129
130/// Creator
131pub const AGENT_CREATOR: &str = "Roy Géryan";
132
133/// Prelude module for convenient imports
134pub mod prelude {
135    pub use crate::context::ContextBuilder;
136    pub use crate::core::{Config, MemoryError, MemoryId, MemoryResult, MemoryType};
137    pub use crate::embedding::EmbeddingGenerator;
138    pub use crate::engine::{HealthStatus, MemoryEngine};
139    pub use crate::ingest::{MemoryProcessor, ProcessingResult, ProcessorConfig};
140    pub use crate::models::{
141        Conversation, Fact, ImageMetadata, Memory, Message, Role,
142        TranscriptionMetadata, UserModel, UserRole,
143    };
144    pub use crate::retrieval::{MemorySearcher, SearchOptions, SearchResult};
145    pub use crate::storage::{PostgresStorage, RedisCache, StoragePool};
146    pub use crate::user::{Permission, PermissionChecker, UserManager};
147    pub use crate::utils::Validator;
148}