Brings the system from "engrams cluster + form synapses" to a complete end-to-end demo: ingest text, watch it cluster, ask questions, restart with state intact. - Stage 4: birth introspection (taxonomy/goals/open_questions via LLM, bounded by the global parallel-op semaphore), per-engram memory log, click-to-inspect side panel. - Stage 5: queries as conversations. POST /api/galaxy/:id/query embeds the question, materializes a pinned Query-Engram at the donut center, runs broadcast retrieval (global cosine scan + 1-hop synaptic expansion with attenuation) and fans out responder LLM calls. The integrator runs every 2s on accumulated snippets and streams the refining answer back over SSE; responders briefly transition to Conversing on the WS bus so the right dots light up. - Stage 6: snapshot persistence. sled-backed store keyed by galaxy id, JSON-encoded values (bincode chokes on internally-tagged enums like Manifest/MemoryKind), 60s periodic snapshot task, hydrate-on-boot, DELETE /api/galaxy/:id wired through. State survives kill -9. - Stage 7: HUD additions (sim ticks/sec, LLM queue depth, FPS) via a new GET /api/stats polled at 1Hz. `sophia demo` subcommand boots the server then auto-ingests a 50-paragraph corpus baked into the binary with include_str!. README quickstart added. Token caps for query_responder/integrator bumped (gemma-4-e4b is a thinking model — output budget must cover hidden reasoning + visible answer, otherwise content comes back empty). Pinned engrams skip physics; their tick scheduling is also skipped at materialization so they stay perfectly still at the donut center. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
76 lines
2.1 KiB
TOML
76 lines
2.1 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"crates/sophia-core",
|
|
"crates/sophia-sim",
|
|
"crates/sophia-llm",
|
|
"crates/sophia-store",
|
|
"crates/sophia-server",
|
|
"crates/sophia-bin",
|
|
]
|
|
|
|
[workspace.package]
|
|
version = "0.0.1"
|
|
edition = "2021"
|
|
license = "MIT"
|
|
rust-version = "1.80"
|
|
authors = ["Sophia"]
|
|
|
|
[workspace.dependencies]
|
|
# Internal
|
|
sophia-core = { path = "crates/sophia-core" }
|
|
sophia-sim = { path = "crates/sophia-sim" }
|
|
sophia-llm = { path = "crates/sophia-llm" }
|
|
sophia-store = { path = "crates/sophia-store" }
|
|
sophia-server = { path = "crates/sophia-server" }
|
|
|
|
# Errors / runtime
|
|
anyhow = "1"
|
|
thiserror = "1"
|
|
tokio = { version = "1.40", features = ["full"] }
|
|
async-trait = "0.1"
|
|
|
|
# Serde
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
|
|
# Logging
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
|
|
|
|
# Math, ids
|
|
glam = { version = "0.28", features = ["serde"] }
|
|
uuid = { version = "1", features = ["v7", "serde"] }
|
|
|
|
# HTTP/WS server (used by sophia-server only)
|
|
axum = { version = "0.7", features = ["ws", "macros"] }
|
|
tower = "0.5"
|
|
tower-http = { version = "0.6", features = ["fs", "trace", "cors"] }
|
|
|
|
# HTTP client (LM Studio)
|
|
reqwest = { version = "0.12", features = ["json", "stream"] }
|
|
|
|
# Sim
|
|
kiddo = "4"
|
|
rand = { version = "0.8", features = ["small_rng"] }
|
|
|
|
# Async helpers
|
|
futures-util = { version = "0.3", default-features = false, features = ["std", "sink"] }
|
|
tokio-stream = { version = "0.1", features = ["sync"] }
|
|
bytes = "1"
|
|
|
|
# Config
|
|
toml = "0.8"
|
|
|
|
# Persistence (Stage 6) — embedded KV with serde_json-encoded values. We
|
|
# pick JSON over bincode because `Manifest` and `MemoryKind` are
|
|
# internally-tagged enums (`#[serde(tag = "kind")]`), which require a
|
|
# self-describing format on the wire. Snapshots are 60-second cadence;
|
|
# JSON's verbosity isn't a real cost at MVP scale.
|
|
sled = "0.34"
|
|
|
|
[profile.release]
|
|
lto = "thin"
|
|
codegen-units = 1
|
|
opt-level = 3
|