forked from kent/consciousness
Adds the client-side of a stateful gRPC protocol against vllm, plus the TLS trust machinery so we can talk to self-signed vllm servers. Protocol (proto/salience.proto): Bidi-streaming Session RPC carries OpenSession / AppendTokens / Generate / Cancel from client and SessionReady / PrefillProgress / Token / GenerateDone / Error from server. Separate Fork unary RPC for cheap branching (prefix cache shares KV automatically). Plus ListSessions, CloseSession, GetReadoutManifest admin RPCs. Per-token readouts ship as packed f32 ([n_layers * n_concepts] per token, flat). Logprobs use range-selected positions plus a top-k parameter — empty ranges means no logprobs, any range means emit sampled-token logprob at those positions, top_k > 0 adds alternatives. Client (src/agent/api/salience.rs): Tonic-generated types under pb::, a connect() helper, with_auth() for bearer metadata, and a Session handle wrapping the bidi stream: open() handshakes SessionReady; append() is fire-and-forget; generate() returns impl Stream<Item = Event> that drains inbound until Done or terminating Error. One generate at a time per session. Peak picker (src/agent/salience.rs): Pure function over ReadoutEntry traces. Per-concept z-score against trace global stats; contiguous above-threshold regions emit one peak at the local max. Configurable sigma threshold and min-std safety floor. Deterministic tie-break on offset then concept name. 12 unit tests covering empty traces, flat channels, single/multi spikes, contiguous humps, multi-concept independence, trailing runs, sub-threshold noise, layer-out-of-range, manifest shape mismatch, and threshold tunability. TLS (src/agent/api/http.rs): HttpClient::build now also loads every .pem file under ~/.consciousness/certs/ into the rustls root store — so dropping a <host>.pem in that directory is enough to trust a new self- signed server; no code changes per new host. Also installs the rustls default crypto provider explicitly via OnceLock: tonic's tls features pulled in both ring and aws-lc-rs on the resolver path, and rustls 0.23 refuses to auto-pick when either could win. Build (build.rs, Cargo.toml): tonic-build generates Rust types from proto/salience.proto at cargo-build time, using a vendored protoc binary (protoc-bin-vendored) so no system install is required. New runtime deps: tonic, prost, async-stream, tokio-stream, rustls-pemfile. Co-Authored-By: Proof of Concept <poc@bcachefs.org>
115 lines
2.5 KiB
TOML
115 lines
2.5 KiB
TOML
[workspace]
|
|
members = ["channels/irc", "channels/telegram", "channels/tmux", "channels/socat"]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
version = "0.4.0"
|
|
edition = "2024"
|
|
|
|
[profile.release]
|
|
opt-level = 2
|
|
debug = 1
|
|
|
|
[profile.release.package."*"]
|
|
debug = false
|
|
|
|
[package]
|
|
name = "consciousness"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
|
|
[dependencies]
|
|
anyhow = "1"
|
|
html2md = "0.2"
|
|
crossterm = { version = "0.29", features = ["event-stream", "bracketed-paste", "osc52"] }
|
|
clap = { version = "4", features = ["derive"] }
|
|
figment = { version = "0.10", features = ["env"] }
|
|
dirs = "6"
|
|
env_logger = "0.11"
|
|
log = "0.4"
|
|
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
json-five = "0.3"
|
|
notify-debouncer-mini = "0.7"
|
|
|
|
ratatui = { version = "0.30", features = ["unstable-rendered-line-info"] }
|
|
tui-markdown = { git = "https://github.com/koverstreet/tui-markdown", subdirectory = "tui-markdown" }
|
|
tui-textarea = { version = "0.10.2", package = "tui-textarea-2" }
|
|
textwrap = "0.16"
|
|
|
|
uuid = { version = "1", features = ["v4"] }
|
|
regex = "1"
|
|
glob = "0.3"
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
libc = "0.2"
|
|
memchr = "2"
|
|
memmap2 = "0.9"
|
|
peg = "0.8"
|
|
paste = "1"
|
|
|
|
ast-grep-core = "0.42"
|
|
ast-grep-language = { version = "0.42", features = ["builtin-parser"] }
|
|
walkdir = "2"
|
|
|
|
redb = "4"
|
|
tempfile = "3"
|
|
|
|
tokio = { version = "1", features = ["full"] }
|
|
tokio-util = { version = "0.7", features = ["compat"] }
|
|
futures = "0.3"
|
|
capnp = "0.25"
|
|
capnp-rpc = "0.25"
|
|
|
|
tonic = { version = "0.12", features = ["tls", "tls-roots"] }
|
|
prost = "0.13"
|
|
async-stream = "0.3"
|
|
tokio-stream = "0.1"
|
|
|
|
tokenizers = "0.22"
|
|
|
|
http = "1"
|
|
hyper = { version = "1", features = ["client", "http1"] }
|
|
hyper-util = { version = "0.1", features = ["tokio"], default-features = false }
|
|
http-body-util = "0.1"
|
|
bytes = "1"
|
|
base64 = "0.22"
|
|
imagesize = "0.14"
|
|
|
|
rustls = "0.23"
|
|
tokio-rustls = "0.26"
|
|
rustls-native-certs = "0.8"
|
|
rustls-pemfile = "2"
|
|
serde_urlencoded = "0.7"
|
|
|
|
[build-dependencies]
|
|
capnpc = "0.25"
|
|
tonic-build = { version = "0.12", default-features = false, features = ["prost", "transport"] }
|
|
protoc-bin-vendored = "3"
|
|
|
|
[lib]
|
|
name = "consciousness"
|
|
path = "src/lib.rs"
|
|
|
|
[[bin]]
|
|
name = "consciousness"
|
|
path = "src/bin/consciousness.rs"
|
|
|
|
[[bin]]
|
|
name = "poc-memory"
|
|
path = "src/main.rs"
|
|
|
|
[[bin]]
|
|
name = "merge-logs"
|
|
path = "src/bin/merge-logs.rs"
|
|
|
|
[[bin]]
|
|
name = "diag-key"
|
|
path = "src/bin/diag-key.rs"
|
|
|
|
[[bin]]
|
|
name = "find-deleted"
|
|
path = "src/bin/find-deleted.rs"
|
|
[[bin]]
|
|
name = "dump-table"
|
|
path = "src/bin/dump-table.rs"
|