Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ target/
**/*.rs.bk
*.pdb

# Stray build artifacts. Two 3.6 MB Linux ELF executables with debug info were
# committed at the repository root before this entry existed; both were produced
# by an ad-hoc build, referenced by nothing, and carried in every clone.
/rust_out
/tmp

# Coverage output
/coverage/
*.profraw
Expand Down
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,30 @@ src/
│ binds as, and the fail-closed external-driver gate
└── mandatory/ the three mandatory capability families, composed once
over the `Memory` storage trait
core/ tinymemory-core — the substance: ingestion, the summary
tree, chunk storage, entities, the graph, the diff
ledger, goals, tool-memory, and the Composio sync layer.
The largest crate here by a wide margin, and the one a
real host actually depends on. Unlike `api/` it is not
dependency-light: today it links the TinyCortex engine,
a bundled SQLite, and an HTTP stack unconditionally.
adapters/
├── tinycortex/ the TinyCortex engine seen through the contract
└── remote/ native HTTP dialects for Supermemory, Mem0, and Cognee
crates/
└── tinymemory-module/ the TinyBus loadable-module driver. Excluded from the
workspace on purpose — see the note in `Cargo.toml`.
vendor/
├── tinycortex/ the engine, pinned as a submodule
├── tinyagents/ pinned TinyAgents submodule
└── tinybus/ pinned TinyBus submodule
```

Run `git submodule update --init --recursive` after cloning. Nothing in the
workspace builds without it — `core` names `tinyagents` and `tinycortex` by
path through `vendor/`, so an uninitialized checkout fails at manifest
resolution rather than at compile time, which reads as a confusing error.

## The contract

`MemoryProvider` is an object-safe trait with **three mandatory** capability
Expand Down
2 changes: 1 addition & 1 deletion adapters/remote/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "tinymemory-remote"
publish = false
version = "0.1.0"
edition = "2021"
rust-version = "1.85"
rust-version = "1.96"
license = "MIT"
description = "HTTP adapters for self-hosted Supermemory, Mem0, and Cognee"
repository = "https://github.com/tinyhumansai/tinymemory"
Expand Down
2 changes: 1 addition & 1 deletion adapters/tinycortex/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ name = "tinymemory-tinycortex"
publish = false
version = "0.1.0"
edition = "2021"
rust-version = "1.85"
rust-version = "1.96"
license = "MIT"
description = "TinyCortex engine adapter for the TinyMemory contract"
repository = "https://github.com/tinyhumansai/tinymemory"
Expand Down
1 change: 1 addition & 0 deletions api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ name = "tinymemory-api"
publish = false
version = "0.1.1"
edition = "2021"
rust-version = "1.96"
license = "MIT"
repository = "https://github.com/tinyhumansai/tinymemory"
description = "Stable public contracts for the TinyMemory memory system"
Expand Down
2 changes: 1 addition & 1 deletion core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ name = "tinymemory-core"
publish = false
version = "0.1.0"
edition = "2021"
rust-version = "1.85"
rust-version = "1.96"
license = "MIT"
description = "The engine-neutral memory subsystem: store, summary tree, sync pipelines, ingestion and recall"
repository = "https://github.com/tinyhumansai/tinymemory"
Expand Down
2 changes: 1 addition & 1 deletion core/src/store/namespace_store/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ fn decode_embedding_row(bytes: &[u8], dim: i64) -> anyhow::Result<Option<Vec<f32
if dim < 0 {
anyhow::bail!("event embedding has negative dimension {dim}");
}
if bytes.len() % 4 != 0 {
if !bytes.len().is_multiple_of(4) {
anyhow::bail!(
"event embedding blob length {} not a multiple of 4",
bytes.len()
Expand Down
2 changes: 1 addition & 1 deletion core/src/store/namespace_store/segments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -610,7 +610,7 @@ fn decode_embedding_row(bytes: &[u8], dim: i64) -> anyhow::Result<Option<Vec<f32
if dim < 0 {
anyhow::bail!("segment embedding has negative dimension {dim}");
}
if bytes.len() % 4 != 0 {
if !bytes.len().is_multiple_of(4) {
anyhow::bail!(
"segment embedding blob length {} not a multiple of 4",
bytes.len()
Expand Down
2 changes: 1 addition & 1 deletion core/src/tree/score/embed/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ pub fn pack_embedding(v: &[f32]) -> Vec<u8> {
/// [`EMBEDDING_DIM`] (after decoding). The latter guards against rows
/// written with a mismatched-provider blob silently passing as valid.
pub fn unpack_embedding(b: &[u8]) -> Result<Vec<f32>> {
if b.len() % 4 != 0 {
if !b.len().is_multiple_of(4) {
anyhow::bail!(
"embedding blob length {} not a multiple of 4 — corrupt row",
b.len()
Expand Down
Binary file removed rust_out
Binary file not shown.
Binary file removed tmp
Binary file not shown.