All checks were successful
CI / CUDA type-check (push) Successful in 1m37s
CI / Format (push) Successful in 33s
CI / Clippy (push) Successful in 3m14s
CI / Test (push) Successful in 5m38s
CI / Build cortex SRPM (push) Has been skipped
CI / Publish cortex to COPR (push) Has been skipped
CI / Build neuron SRPM (push) Has been skipped
CI / Publish neuron to COPR (push) Has been skipped
CI / Bump version in source (push) Has been skipped
First milestone of the mesh-level account/authorization authority (#59). New workspace crate `crates/helexa-upstream` (binary + lib), mirroring the helexa-router skeleton: axum `build_app`/`run`, clap `serve --config`, figment `UPSTREAM_`-prefixed config. - **Storage:** PostgreSQL via sqlx (runtime query API — builds in CI with no DB or offline cache; correctness covered by gated integration tests). `migrations/0001_init.sql` is the full schema: users (argon2 hash slot, email_verified, registration_fingerprint), email_tokens, accounts (allocation total/spent/reserved + `accounts_no_overshoot` CHECK, silent `status` deactivation flag, fingerprint_flagged), api_keys (sha256 hash, percent|hardcap limit, cap_window, per-key ledger), reservations (BIGSERIAL id → maps to cortex Reservation.id u64), top_up_codes, served_usage, sessions. Migrations run on startup. - **Ledger (no-overshoot core):** `ledger::{reserve,settle,release}` — reserve takes `SELECT … FOR UPDATE` on the account + key rows so concurrent reserves serialize and spent+reserved can never exceed the effective cap (= min(resolved key cap, remaining account allocation)); the CHECK is the DB backstop. Settle clamps actual to [0,reserved] and is idempotent; release is idempotent. `resolve_abs_cap` (percent/hardcap, i128 math) is pure + unit-tested. Balance semantics here; rolling-window sub-caps + RateLimited land with the authz API (B2). - `/health` does a DB round-trip. - Config + example TOML ([server]/[db]/[grant] free grant/[abuse] fingerprint threshold). Validated end-to-end against a throwaway Postgres 16: migration applies, 20 concurrent reserves of 100 against a 500 cap admit exactly 5 (reserved == 500, never over), settle/release idempotent, hardcap key sub-cap binds below the account, `/health` → db ok. CI runs the cap-math + config unit tests; the DB integration tests skip cleanly when UPSTREAM_TEST_DATABASE_URL is unset. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F6o3ddqmYNh9kzdwq6eowh
77 lines
2.0 KiB
TOML
77 lines
2.0 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"crates/cortex-core",
|
|
"crates/cortex-gateway",
|
|
"crates/cortex-cli",
|
|
"crates/neuron",
|
|
"crates/helexa-acp",
|
|
"crates/helexa-bench",
|
|
"crates/helexa-router",
|
|
"crates/helexa-stream",
|
|
"crates/helexa-upstream",
|
|
]
|
|
|
|
[workspace.package]
|
|
version = "0.1.16"
|
|
edition = "2024"
|
|
license = "GPL-3.0-or-later"
|
|
repository = "https://git.lair.cafe/helexa/helexa"
|
|
|
|
[workspace.dependencies]
|
|
# async runtime
|
|
tokio = { version = "1", features = ["full"] }
|
|
|
|
# web framework
|
|
axum = { version = "0.8", features = ["macros"] }
|
|
tower = "0.5"
|
|
tower-http = { version = "0.6", features = ["cors", "trace", "timeout"] }
|
|
|
|
# serialization
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
toml = "0.8"
|
|
|
|
# http client (for proxying to neuron backends)
|
|
reqwest = { version = "0.12", features = ["json", "stream"] }
|
|
|
|
# observability
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
|
metrics = "0.24"
|
|
metrics-exporter-prometheus = "0.16"
|
|
|
|
# time
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
|
|
# config
|
|
figment = { version = "0.10", features = ["toml", "env"] }
|
|
|
|
# error handling
|
|
anyhow = "1"
|
|
thiserror = "2"
|
|
|
|
# async traits
|
|
async-trait = "0.1"
|
|
|
|
# CLI
|
|
clap = { version = "4", features = ["derive"] }
|
|
|
|
# futures / streams (for SSE proxying)
|
|
futures = "0.3"
|
|
tokio-stream = "0.1"
|
|
eventsource-stream = "0.2"
|
|
|
|
# workspace crates
|
|
cortex-core = { path = "crates/cortex-core" }
|
|
cortex-gateway = { path = "crates/cortex-gateway" }
|
|
|
|
# Patched cudarc (affects neuron's 0.19.x only; candle's 0.17.x is
|
|
# untouched since the fork is 0.19.7 and doesn't satisfy a 0.17 req). Adds
|
|
# Comm::abort / get_async_error / raw comm() — needed for #17 Stage 2 TP
|
|
# hang-recovery (abort a wedged collective from another thread, then
|
|
# rebuild the comm). Pinned to a fork revision pending upstream review
|
|
# (grenade/cudarc @ nccl-comm-abort).
|
|
[patch.crates-io]
|
|
cudarc = { git = "https://github.com/grenade/cudarc", rev = "63327a256059f8252641ae46c6bb9eefe707f382" }
|